{"version":3,"file":"chunk.806.5fb9202f34108c5575bb.js","names":["exports","hookCallback","some","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","i","res","arrLen","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","flags","parsedParts","isNowValid","_d","isNaN","getTime","invalidWeekday","_strict","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","t","this","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","argLen","slice","join","Error","stack","keys","deprecations","deprecateSimple","name","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","D","dates","date","d","days","day","e","weekdays","weekday","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","h","hours","hour","ms","milliseconds","millisecond","minutes","minute","M","months","month","Q","quarters","quarter","s","seconds","second","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","w","weeks","week","W","isoweeks","isoweek","y","years","year","normalizeUnits","units","toLowerCase","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","regexes","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","indexOf","getSetYear","makeGetSet","unit","keepTime","set$1","get","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDate","getDate","getUTCDay","getDay","getUTCMonth","getMonth","getUTCFullYear","getFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setHours","setUTCDate","setDate","setUTCFullYear","setFullYear","daysInMonth","modMonth","o","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","min","setUTCMonth","getSetMonth","computeMonthsParse","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","createUTCDate","UTC","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","lowercase","matchMeridiem","_meridiemParse","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","module","_abbr","aliasedRequire","getSetGlobalLocale","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","x","names","j","next","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","result","weekdayStr","parsedInput","obsOffset","militaryOffset","numOffset","hm","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","temp","weekdayOverflow","curWeek","createLocal","_week","_dayOfYear","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","isPm","meridiemHour","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","createFromInputFallback","dayOrDate","undefined","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","unitHasDecimal","orderLen","parseFloat","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","objectTest","propertyTest","properties","propertyLen","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","priority","prioritizedLen","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","suffix","zone","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","isFormat","standalone","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","posNegDuration","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","BaseHelper","Helper","moment","inject","disableInterval","globalAllowEmpty","__config__","allowEmpty","supportsGlobalAllowEmpty","localeOrTimeZoneChanged","observer","recompute","compute","interval","clearTimer","intervalTimer","setTimeout","run","morphMoment","timeZone","momentService","tz","clearTimeout","destroy","_super","r","computeFn","cb","params","hash","TypeError","datetime","isBlank","Cy","z","HD","p","J8","f","Kj","Le","PO","TX","V9","VW","VZ","cO","fm","i2","O","kK","pt","y1","_","objectToString","isError","wat","isInstanceOf","isBuiltin","className","isErrorEvent","isDOMError","isDOMException","isParameterizedString","isPrimitive","isPlainObject","isEvent","Event","isElement","Element","isRegExp","isThenable","Boolean","then","isSyntheticEvent","_e","isVueViewModel","__isVue","_isVue","isGlobalObj","GLOBAL_OBJ","R","Y","globalThis","window","self","global","getGlobalObject","getGlobalSingleton","creator","gbl","__SENTRY__","Cf","LD","RU","kg","CONSOLE_LEVELS","originalConsoleMethods","consoleSandbox","wrappedFuncs","wrappedLevels","level","originalConsoleMethod","logger","enabled","enable","disable","isEnabled","DEBUG_BUILD","makeLogger","__SENTRY_DEBUG__","fill","replacementFactory","original","wrapped","markFunctionWrapped","addNonEnumerableProperty","defineProperty","writable","configurable","o_O","log","getOriginalFunction","__sentry_original__","urlEncode","object","encodeURIComponent","convertToPlainObject","message","getOwnProperties","newObj","type","target","serializeEventTarget","currentTarget","CustomEvent","detail","htmlTreeAsString","_oO","extractedProps","property","extractExceptionKeysForMessage","exception","maxLength","truncate","includedKeys","serialized","dropUndefinedKeys","inputValue","_dropUndefinedKeys","Map","memoizationMap","getPrototypeOf","constructor","memoVal","returnValue","objectify","objectified","$G","JM","U0","nK","zC","str","snipLine","line","colno","newLine","lineLength","start","end","safeJoin","delimiter","isMatchingPattern","pattern","requireExactStringMatch","includes","stringMatchesSomePattern","testString","patterns","v","momentOrMomentTimezone","require","__esModule","default","normalize","depth","maxProperties","visit","err","ERROR","normalizeToSize","maxSize","normalized","encodeURI","JSON","stringify","memo","memoBuilder","memoize","unmemoize","stringified","_events","document","getFunctionName","objName","startsWith","__sentry_skip_normalization__","remainingDepth","__sentry_override_normalization_depth__","valueWithToJSON","numAdded","visitable","visitKey","visitValue","normalizeUrlToBase","url","basePath","escapedBase","newUrl","decodeURI","_Oo","DM","Db","EG","J4","YO","go","jH","lE","uuid4","crypto","msCrypto","getRandomByte","random","randomUUID","getRandomValues","typedArray","Uint8Array","getFirstException","event","getEventDescription","event_id","eventId","firstException","addExceptionTypeValue","addExceptionMechanism","newMechanism","currentMechanism","mechanism","handled","mergedData","SEMVER_REGEXP","parseSemver","major","minor","patch","buildmetadata","prerelease","addContextToFrame","lines","frame","linesOfContext","lineno","maxLines","sourceLine","pre_context","context_line","post_context","checkOrSetAlreadyCaught","__sentry_captured__","arrayify","maybeArray","unsafeStringify","_validate","byteToHex","uuid","_regex","callbacksFor","callbacks","_promiseCallbacks","ZP","lt","EventTarget","mixin","on","off","trigger","eventName","allCallbacks","splice","options","label","instrument","configure","queue","promise","child","payload","_guidKey","id","_id","_result","childId","_label","timeStamp","error","entry","guid","childGuid","resolve$$1","noop","resolve$1","PENDING","FULFILLED","REJECTED","TRY_CATCH_ERROR","getThen","tryCatchCallback","tryCatcher","tryCatch","handleMaybeThenable","maybeThenable","then$$1","resolve","thenable","_state","fulfill","_onError","reject","subscribe","reason","async","sealed","publishRejection","publish","_subscribers","parent","onFulfillment","onRejection","subscribers","settled","invokeCallback","state","hasCallback","Enumerator","Constructor","abortOnReject","_instanceConstructor","_abortOnReject","_isUsingOwnPromise","Promise","_isUsingOwnResolve","_init","_remaining","_enumerate","_eachEntry","_checkFullfillment","_settleMaybeThenable","firstPass","_settledAt","_willSettleAt","_setResultAt","_this","setSettledResult","guidKey","counter","resolver","resolved","after","catch","finally","wrapThenable","onFulFillment","handleValueInput","nodeFunc","needsPromiseInput","cast","all","entries","race","AllSettled","_Enumerator","ReferenceError","subClass","superClass","create","enumerable","setPrototypeOf","__proto__","PromiseHash","HashSettled","_PromiseHash","MapEnumerator","mapFn","bool","_mapFn","resolve$2","EMPTY_OBJECT","FilterEnumerator","_MapEnumerator","vertxNext","asap","queue$1","scheduleFlush$1","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","process","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useSetTimeout","flush","channel","nextTick","iterations","node","versions","setImmediate","createTextNode","observe","characterData","port1","onmessage","port2","postMessage","vertx","runOnLoop","runOnContext","__PROMISE_INSTRUMENTATION__","allSettled","hashSettled","rethrow","defer","deferred","denodeify","promiseInput","argumentNames","promises","filterFn","$2","WD","cW","States","resolvedSyncPromise","SyncPromise","rejectedSyncPromise","RESOLVED","executor","__init","__init2","__init3","__init4","_handlers","_resolve","_reject","onfulfilled","onrejected","_executeHandlers","onfinally","isRejected","_setResult","_value","cachedHandlers","handler","RA","U4","vK","DSN_REGEX","dsnToString","dsn","withPassword","host","path","pass","port","projectId","protocol","publicKey","dsnFromString","lastPath","pop","projectMatch","dsnFromComponents","components","makeDsn","find","component","isFastBoot","owner","assert","lookup","fastboot","monadic","cache","serializer","cacheKey","computedValue","variadic","assemble","context","strategy","serialize","bind","strategyDefault","serializerDefault","ObjectWithoutPrototypeCache","has","cacheDefault","strategies","getRawTag","symToStringTag","toStringTag","handlers","instrumented","addHandler","resetInstrumentationHandlers","maybeInstrument","instrumentFn","triggerHandlers","typeHandlers","SentryError","logLevel","super","ZT","_T","ev","pi","extendStatics","__extends","__","__assign","__rest","getOwnPropertySymbols","propertyIsEnumerable","__spreadArray","pack","ar","SuppressedError","createEnvelope","headers","items","addItemToEnvelope","envelope","newItem","forEachEnvelopeItem","envelopeItems","envelopeItem","envelopeContainsItemType","types","encodeUTF8","textEncoder","TextEncoder","encode","serializeEnvelope","envHeaders","append","itemHeaders","stringifiedPayload","buffers","totalLength","reduce","acc","buf","merged","buffer","parseEnvelope","env","textDecoder","readBinary","bin","subarray","readJson","parse","decode","envelopeHeader","itemHeader","binaryLength","createAttachmentEnvelopeItem","attachment","filename","content_type","contentType","attachment_type","attachmentType","ITEM_TYPE_TO_DATA_CATEGORY_MAP","session","sessions","transaction","client_report","user_report","profile","replay_event","replay_recording","check_in","feedback","statsd","envelopeItemTypeToDataCategory","getSdkMetadataForEnvelopeHeader","metadataOrEvent","sdk","createEventEnvelopeHeaders","sdkInfo","tunnel","dynamicSamplingContext","sdkProcessingMetadata","sent_at","trace","rC","S6","dB","oA","XQ","Zm","se","DEFAULT_INCLUDES","ip","request","user","DEFAULT_REQUEST_INCLUDES","DEFAULT_USER_INCLUDES","addRequestDataToTransaction","req","deps","metadata","extractPathForTransaction","method","updateName","setMetadata","setAttribute","originalUrl","baseUrl","setData","extractQueryParams","customRoute","route","stripUrlQueryAndFragment","extractRequestData","include","requestData","hostname","socket","encrypted","absoluteUrl","cookie","cookies","eqIdx","endIdx","lastIndexOf","trim","charCodeAt","decodeURIComponent","query_string","body","addRequestDataToEvent","extractedRequestData","extractedUser","remoteAddress","ip_address","_reconstructedRoute","query","URL","search","e2","winterCGHeadersToDict","winterCGHeaders","winterCGRequestToRequestData","$y","KV","l$","isNodeEnv","isBrowserBundle","dynamicRequire","mod","loadModule","moduleName","cwd","hmd","Z1","_I","mL","ph","yW","ONE_SECOND_IN_MS","dateTimestampInSeconds","timestampInSeconds","performance","approxStartingTimeOrigin","timeOrigin","timestampWithMs","_browserPerformanceTimeOriginMode","browserPerformanceTimeOrigin","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","timing","navigationStartDelta","B1","JY","WG","ns","DEFAULT_RETRY_AFTER","parseRetryAfterHeader","header","headerDelay","headerDate","disabledUntil","limits","category","isRateLimited","updateRateLimits","statusCode","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","delay","kG","_K","genericMessage","InvariantError","framesToPop","invariant","condition","verbosityLevels","verbosityLevel","wrapConsoleMethod","debug","maybe","thunk","prefixCounts","wrap","arg0","getHandledErrorMsg","getFallbackErrorMsg","originalInvariant","newInvariantError","optionalParams","ApolloErrorMessageHandler","space","count","undefId","messageArgs","__DEV__","TRACEPARENT_REGEXP","extractTraceparentData","traceparent","parentSampled","traceId","parentSpanId","tracingContextFromHeaders","sentryTrace","baggage","traceparentData","baggageHeaderToDynamicSamplingContext","propagationContext","spanId","substring","sampled","dsc","generateSentryTraceHeader","sampledString","GJ","ME","aB","g","parseStackFrames","stackParser","exceptionFromError","frames","stacktrace","eventFromUnknownInput","getHubOrClient","hint","client","getClient","ex","extras","normalizeDepth","getOptions","__serialized__","syntheticException","synthetic","extra","eventFromMessage","attachStacktrace","__sentry_template_string__","__sentry_template_values__","logentry","parseUrl","fragment","relative","urlPath","getNumberOfUrlSegments","getSanitizedUrlString","$A","en","rt","tF","Z","BaseStore","EmberObject","Evented","persist","RSVP","restore","clear","shared","worker","mapboxgl","define","chunk","workerBundleString","sharedChunk","workerUrl","createObjectURL","Blob","cx","bx","ax","cy","by","ay","p1x","p1y","p2x","p2y","sampleCurveX","sampleCurveY","sampleCurveDerivativeX","solveCurveX","solve","_add","sub","_sub","multByPoint","_multByPoint","divByPoint","_divByPoint","mult","_mult","div","_div","rotate","_rotate","rotateAround","_rotateAround","matMult","_matMult","_unit","perp","_perp","_round","mag","sqrt","equals","dist","distSqr","angle","atan2","angleTo","angleWith","angleWithSep","cos","sin","convert","A","S","I","WorkerGlobalScope","C","navigator","userAgent","safari","P","setItem","removeItem","B","T","V","F","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","msCancelAnimationFrame","cancel","getImageData","createElement","getContext","width","height","drawImage","resolveURL","href","hardwareConcurrency","devicePixelRatio","prefersReducedMotion","matchMedia","API_URL","EVENTS_URL","FEEDBACK_URL","REQUIRE_ACCESS_TOKEN","ACCESS_TOKEN","MAX_PARALLEL_IMAGE_REQUESTS","U","supported","testSupport","q","N","createTexture","bindTexture","TEXTURE_2D","texImage2D","RGBA","UNSIGNED_BYTE","isContextLost","deleteTexture","onload","onerror","src","K","G","_transformRequestFn","_customAccessToken","_createSkuToken","tokenExpiresAt","_skuToken","_skuTokenExpiresAt","_isSkuTokenExpired","transformRequest","normalizeStyleURL","_makeAPIURL","normalizeGlyphsURL","normalizeSourceURL","authority","normalizeSpriteURL","$","normalizeTileURL","canonicalizeTileURL","canonicalizeTileset","tiles","J","X","H","atob","anonId","eventData","pendingRequest","getStorageKey","btoa","fromCharCode","Number","fetchEventData","localStorage","getItem","saveEventData","processRequests","postEvent","created","sdkIdentifier","sdkVersion","skuId","userId","wt","queueRequest","tt","et","success","skuToken","postMapLoadEvent","timestamp","nt","postTurnstileEvent","lastSuccess","tokenU","it","at","ot","st","ut","caches","open","ct","ht","ft","OffscreenCanvas","createImageBitmap","yt","Unknown","Style","Source","Tile","Glyphs","SpriteImage","SpriteJSON","Image","freeze","vt","gt","dt","status","mt","referrer","location","xt","fetch","Request","AbortController","credentials","signal","ok","statusText","code","arrayBuffer","json","text","Headers","toUTCString","Response","ReadableStream","blob","put","delete","abort","actor","send","XMLHttpRequest","responseType","setRequestHeader","withCredentials","response","getResponseHeader","bt","_t","At","accept","requestParameters","cancelled","revokeObjectURL","cacheControl","expires","byteLength","St","kt","It","zt","Ct","_listeners","_oneTimeListeners","once","fire","listens","_eventedParent","_eventedParentData","setEventedParent","Et","$version","$root","required","center","zoom","bearing","pitch","light","sources","sprite","glyphs","transition","layers","source_vector","vector","bounds","scheme","xyz","tms","minzoom","maxzoom","attribution","promoteId","volatile","source_raster","raster","tileSize","source_raster_dem","encoding","terrarium","mapbox","source_geojson","geojson","maximum","minimum","tolerance","cluster","clusterRadius","clusterMaxZoom","clusterMinPoints","clusterProperties","lineMetrics","generateId","source_video","video","urls","coordinates","source_image","image","layer","symbol","circle","heatmap","hillshade","background","layout","paint","layout_background","visibility","visible","none","layout_fill","expression","interpolated","parameters","layout_circle","layout_heatmap","layout_line","butt","square","bevel","miter","requires","layout_symbol","point","auto","viewport","both","left","right","top","bottom","horizontal","vertical","uppercase","layout_raster","layout_hillshade","filter_operator","in","any","within","geometry_type","Point","LineString","Polygon","function","stops","identity","exponential","categorical","colorSpace","rgb","lab","hcl","function_stop","position","color","intensity","paint_fill","paint_line","paint_circle","paint_heatmap","paint_symbol","overridable","paint_raster","linear","nearest","paint_hillshade","paint_background","constant","Pt","identifier","__line__","Mt","Bt","Tt","Vt","Ft","Dt","bindings","Lt","kind","Ot","Rt","Ut","jt","qt","Nt","Kt","Gt","Zt","Xt","itemType","Jt","Ht","Yt","$t","Wt","Qt","transparent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","parseCSSColor","te","ee","sensitivity","collator","Intl","Collator","usage","compare","resolvedLocale","resolvedOptions","re","scale","fontStack","textColor","ne","sections","fromString","isEmpty","ie","available","ae","oe","ue","le","expectedType","evaluate","eachChild","outputDefined","pe","ce","boolean","he","every","fe","font","content","ye","availableImages","de","me","parseColor","ve","ge","globals","feature","featureState","formattedSection","_parseColorCache","canonical","geometryType","geometry","canonicalID","xe","_evaluate","definitions","overloads","je","registry","scope","checkSubtype","errors","register","be","caseSensitive","diacriticSensitive","we","Ae","PI","Se","ke","Ie","ze","Ce","Ee","Pe","Me","Be","Te","Ve","Fe","De","geometries","Oe","Re","features","Ue","boundExpression","qe","_parse","typeAnnotation","Ne","labels","outputs","Ke","Ge","Ze","Xe","Je","He","Ye","$e","We","Qe","alpha","tr","er","rr","forward","reverse","interpolate","nr","ir","operator","interpolation","or","interpolationFactor","controlPoints","sr","ur","lr","pr","needle","haystack","cr","fromIndex","hr","inputType","cases","otherwise","MAX_SAFE_INTEGER","outputIndex$1","fr","branches","yr","beginIndex","endIndex","dr","mr","vr","lhs","rhs","hasUntypedArgument","gr","xr","br","wr","_r","Ar","Sr","currency","minFractionDigits","maxFractionDigits","NumberFormat","style","minimumFractionDigits","maximumFractionDigits","kr","Ir","case","coalesce","let","literal","step","var","zr","Cr","Er","Pr","Mr","Br","Tr","Vr","Fr","Dr","Lr","Or","Rr","Ur","jr","qr","Nr","typeof","rgba","heatmapDensity","lineProgress","accumulated","ln2","LN2","log10","LN10","ln","log2","asin","acos","atan","isSupportedScript","upcase","downcase","Kr","_warningHistory","_evaluator","_defaultValue","_enumValues","Gr","Zr","enum","formatted","resolvedImage","evaluateWithoutErrorHandling","Xr","_styleExpression","isStateDependent","Jr","zoomStops","interpolationType","Hr","Yr","_parameters","_specification","$r","valueSpec","objectElementValidators","styleSpec","An","objectKey","Wr","arrayElementValidator","arrayIndex","Qr","tn","expressionContext","propertyKey","propertyType","rn","nn","deserialize","an","needGeometry","un","sn","hn","pn","cn","yn","layerType","dn","mn","vn","ref","gn","xn","bn","wn","_n","constants","Sn","kn","In","zn","paintProperty","layoutProperty","Cn","En","Pn","Mn","Bn","Tn","Vn","cells","ArrayBuffer","Int32Array","bboxes","insert","_insertReadonly","extent","padding","uid","_forEachCell","_insertCell","_queryCell","_convertToCellCoord","_convertFromCellCoord","toArrayBuffer","Fn","ImageData","Dn","ImageBitmap","Ln","On","writeable","klass","omit","shallow","Rn","_classRegistryKey","Un","jn","qn","isView","$name","Nn","Kn","first","update","lastIntegerZoom","lastIntegerZoomTime","lastZoom","lastFloorZoom","Gn","Arabic","Khmer","Hiragana","Katakana","Bopomofo","Kanbun","Zn","Xn","Jn","Hn","Yn","$n","Wn","Qn","ti","ei","ri","ni","pluginStatus","pluginURL","ai","oi","applyArabicShaping","processBidirectionalText","processStyledBidirectionalText","isLoaded","isLoading","setState","isParsed","getPluginURL","si","fadeDuration","zoomHistory","crossFadingFactor","getCrossfadeParameters","fromScale","toScale","ui","specification","isDataDriven","possiblyEvaluate","li","transitioned","ci","untransitioned","_properties","_values","defaultTransitionablePropertyValues","getValue","setValue","getTransition","setTransition","hi","begin","prior","defaultTransitioningPropertyValues","di","hasTransition","fi","defaultPropertyValues","yi","isConstant","constantOr","defaultPossiblyEvaluatedValues","mi","vi","overrides","gi","_calculate","xi","bi","wi","overridableProperties","_featureFilter","sourceLayer","_unevaluatedLayout","_transitionablePaint","setPaintProperty","validate","setLayoutProperty","_transitioningPaint","_crossfadeParameters","getLayoutProperty","getPaintProperty","_handleSpecialPaintPropertyUpdate","_handleOverridablePaintPropertyUpdate","isHidden","updateTransitions","recalculate","is3D","isTileClipped","hasOffscreenPass","resize","Ai","Int8","Int8Array","Uint8","Int16","Int16Array","Uint16","Uint16Array","Int32","Uint32","Uint32Array","Float32","Float32Array","Si","_structArray","_pos1","size","_pos2","_pos4","_pos8","ki","isTransferred","capacity","Ii","members","BYTES_PER_ELEMENT","zi","alignment","_trim","bytesPerElement","_refreshViews","reserve","uint8","Ci","int16","emplaceBack","emplace","Ei","Pi","Mi","Bi","float32","Ti","uint16","Vi","Fi","Di","uint32","Li","Oi","Ri","Ui","ji","qi","Ni","Ki","Gi","Zi","Xi","Ji","Hi","Yi","anchorPointX","anchorPointY","x1","x2","y2","featureIndex","sourceLayerIndex","bucketIndex","anchorPoint","defineProperties","$i","Wi","anchorX","anchorY","glyphStartIndex","numGlyphs","vertexStartIndex","lineStartIndex","segment","lowerSize","upperSize","lineOffsetX","lineOffsetY","writingMode","placedOrientation","hidden","crossTileID","associatedIconIndex","Qi","ta","rightJustifiedTextSymbolIndex","centerJustifiedTextSymbolIndex","leftJustifiedTextSymbolIndex","verticalPlacedTextSymbolIndex","placedIconSymbolIndex","verticalPlacedIconSymbolIndex","textBoxStartIndex","textBoxEndIndex","verticalTextBoxStartIndex","verticalTextBoxEndIndex","iconBoxStartIndex","iconBoxEndIndex","verticalIconBoxStartIndex","verticalIconBoxEndIndex","numHorizontalGlyphVertices","numVerticalGlyphVertices","numIconVertices","numVerticalIconVertices","useRuntimeCollisionCircles","textBoxScale","textOffset0","textOffset1","collisionCircleDiameter","ea","ra","getoffsetX","na","getx","gety","gettileUnitDistanceFromAnchor","ia","aa","oa","sa","segments","ua","prepareSegment","MAX_VERTEX_ARRAY_LENGTH","vertexLength","sortKey","vertexOffset","primitiveOffset","primitiveLength","vaos","simpleSegment","la","pa","ca","ha","fa","murmur3","murmur2","ya","ids","positions","indexed","ma","getPositions","Float64Array","va","da","ga","gl","xa","current","uniform1i","ba","uniform1f","wa","uniform2f","uniform3f","Aa","uniform4f","Sa","ka","Ia","uniformMatrix4fv","za","Ca","uniformNames","setUniform","getBinding","Ea","patternFrom","patternTo","pixelRatioFrom","pixelRatioTo","setConstantPatternPositions","pixelRatio","tlbr","Pa","maxValue","paintVertexAttributes","paintVertexArray","populatePaintArray","_setPaintValue","updatePaintArray","upload","paintVertexBuffer","updateData","createVertexBuffer","Ma","useIntegerZoom","Ba","layerId","zoomInPaintVertexArray","zoomOutPaintVertexArray","_setPaintValues","mid","tl","zoomInPaintVertexBuffer","zoomOutPaintVertexBuffer","Ta","binders","_buffers","Fa","Da","getMaxValue","populatePaintArrays","updatePaintArrays","defines","getBinderAttributes","getBinderUniforms","getPaintVertexBuffers","getUniforms","binding","setUniforms","updatePaintBuffers","Va","programConfigurations","needsUpload","_featureMap","_bufferOffset","composite","La","Oa","Ra","loadGeometry","Ua","ja","qa","overscaling","layerIds","hasPattern","layoutVertexArray","indexArray","stateDependentLayerIds","Na","Wa","Xa","Ka","Ha","Ga","$a","Za","Ja","Ya","Qa","eo","ro","populate","addFeature","stateDependentLayers","uploadPending","uploaded","layoutVertexBuffer","indexBuffer","createIndexBuffer","no","io","ao","oo","so","hypot","uo","lo","po","co","createBucket","queryRadius","queryIntersectsFeature","ho","cameraToCenterDistance","fo","yo","RangeError","mo","vo","copy","xo","bo","wo","resolution","clips","evaluationKey","_o","_updateColorRamp","colorRamp","colorRampTexture","heatmapFbo","Ao","So","ko","Io","Co","zo","Eo","prev","steiner","Uo","Do","Lo","Po","Mo","Qo","Yo","Ko","$o","No","Ro","prevZ","nextZ","To","Bo","Vo","Fo","jo","Go","Jo","qo","Ho","Oo","Xo","Zo","Wo","ts","exp","es","rs","area","is","patternDependencies","os","deviation","flatten","vertices","holes","dimensions","patternFeatures","indexArray2","segments2","addFeatures","indexBuffer2","us","ls","ps","cs","hs","fs","_pbf","_geometry","_keys","readFields","ys","readVarint","ds","readSVarint","bbox","toGeoJSON","vs","_features","gs","readString","readFloat","readDouble","readVarint64","readBoolean","xs","bs","VectorTile","VectorTileFeature","VectorTileLayer","_s","As","Ss","ks","Is","zs","Es","Cs","Ps","Ms","Bs","Ts","Vs","Fs","lineClipsArray","gradients","layoutVertexArray2","maxLineLength","layoutVertexBuffer2","lineFeatureClips","mapbox_clip_start","mapbox_clip_end","lineClips","addLine","distance","scaledDistance","totalDistance","updateScaledDistance","e1","updateDistance","addCurrentVertex","addHalfVertex","Ds","Ls","Os","Rs","gradientVersion","stepInterpolant","gradientExpression","Us","js","qs","Ns","Ks","Gs","Zs","toLocaleUpperCase","Xs","Js","Hs","Ys","$s","Varint","Fixed64","Bytes","Fixed32","Ws","TextDecoder","Qs","tu","eu","realloc","ru","writeVarint","nu","writeSVarint","iu","writeFloat","au","writeDouble","ou","writeBoolean","su","writeFixed32","uu","writeSFixed32","lu","writeFixed64","pu","writeSFixed64","cu","hu","fu","yu","readMessage","du","mu","advance","bitmap","metrics","readBytes","vu","skip","readFixed32","readSFixed32","readFixed64","readSFixed64","readPackedVarint","readPackedSVarint","readPackedBoolean","readPackedFloat","readPackedDouble","readPackedFixed32","readPackedSFixed32","readPackedFixed64","readPackedSFixed64","writeTag","finish","writeString","writeBytes","writeRawMessage","writeMessage","writePackedVarint","writePackedSVarint","writePackedBoolean","writePackedFloat","writePackedDouble","writePackedFixed32","writePackedSFixed32","writePackedFixed64","writePackedSFixed64","writeBytesField","writeFixed32Field","writeSFixed32Field","writeFixed64Field","writeSFixed64Field","writeVarintField","writeSVarintField","writeStringField","writeFloatField","writeDoubleField","writeBooleanField","gu","stretchX","stretchY","paddedRect","xu","displaySize","bu","haveRenderCallbacks","addImages","iconPositions","patternPositions","hasRenderCallback","patchUpdatedImages","dispatchRenderCallbacks","updatedImages","patchUpdatedImage","getImage","wu","horizontalOnly","_u","imageName","forText","forImage","Au","sectionIndex","imageSectionID","Su","fromFeature","verticalizePunctuation","Mu","positionedLines","iconsInText","verticalizable","getMaxScale","positionedGlyphs","lineOffset","getSection","getSectionIndex","getCharCode","ku","rect","glyph","Tu","Bu","horizontalAlign","verticalAlign","addImageSection","addTextSection","getNextImageSectionCharCode","Iu","zu","Cu","Eu","Pu","badness","priorBreak","Vu","collisionPadding","Fu","Du","layoutSize","minZoom","maxZoom","minSize","Lu","uSize","uSizeT","Ou","Ru","getSizeData","evaluateSizeForFeature","evaluateSizeForZoom","SIZE_PACK_FACTOR","Uu","angleDelta","ju","qu","Nu","Ku","Gu","Zu","Xu","Ju","Yu","stretch","$u","fixed","bl","tex","glyphOffset","pixelOffsetTL","pixelOffsetBR","minFontScaleX","minFontScaleY","isSDF","Hu","Wu","boxStartIndex","circleDiameter","boxEndIndex","Qu","_down","el","rl","nl","SQRT2","_up","peek","il","POSITIVE_INFINITY","al","ol","sl","sdf","allowVerticalPlacement","textSizeData","compositeTextSizes","addSymbols","placedSymbolArray","ul","ll","compareText","pl","cl","hl","fl","yl","dl","dynamicLayoutVertexArray","opacityVertexArray","dynamicLayoutVertexBuffer","opacityVertexBuffer","itemSize","ml","layoutAttributes","collisionVertexArray","collisionVertexBuffer","vl","collisionBoxArray","hasRTLText","sortKeyRanges","collisionCircleArray","placementInvProjMatrix","placementViewportMatrix","iconSizeData","canOverlap","sortFeaturesByKey","sortFeaturesByY","writingModes","sourceID","createArrays","icon","glyphOffsetArray","lineVertexArray","symbolInstances","calculateGlyphDependencies","iconDependencies","glyphDependencies","getValueAndResolveTokens","hasDebugData","textCollisionBox","iconCollisionBox","destroyDebugData","addToLineVertexArray","tileUnitDistanceFromAnchor","_addCollisionDebugVertex","addCollisionDebugVertices","addDebugCollisionBoxes","generateCollisionDebugBuffers","_deserializeCollisionBoxesForSymbol","textBox","textFeatureIndex","verticalTextBox","verticalTextFeatureIndex","iconBox","iconFeatureIndex","verticalIconBox","verticalIconFeatureIndex","deserializeCollisionBoxes","collisionArrays","hasTextData","hasIconData","hasTextCollisionBoxData","hasIconCollisionBoxData","addIndicesForPlacedSymbol","getSortedSymbolIndexes","sortedAngle","symbolInstanceIndexes","addToSortKeyRanges","symbolInstanceEnd","symbolInstanceStart","sortFeatures","featureSortOrder","MAX_GLYPHS","addDynamicAttributes","xl","runtimeType","getOverride","hasOverride","defaultValue","wl","_setPaintOverrides","hasPaintOverride","_interpolationType","Al","Sl","kl","Il","implementation","renderingMode","prerender","onAdd","painter","onRemove","zl","Cl","HTMLImageElement","El","HTMLCanvasElement","Pl","HTMLVideoElement","Ml","Bl","Tl","texture","useMipmap","pixelStoreUnpackFlipY","pixelStoreUnpack","pixelStoreUnpackPremultiplyAlpha","premultiply","texSubImage2D","isSizePowerOfTwo","generateMipmap","LINEAR_MIPMAP_NEAREST","LINEAR","texParameteri","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","Vl","_callback","_triggered","_channel","remove","Fl","mapId","tasks","taskQueue","cancelCallbacks","invoker","addEventListener","receive","globalScope","Dl","targetMapId","mustQueue","sourceMapId","processTask","getWorkerSource","removeEventListener","Ll","setSouthWest","setNorthEast","_ne","Ol","lng","lat","_sw","getCenter","getSouthWest","getNorthEast","getNorthWest","getWest","getNorth","getSouthEast","getEast","getSouth","contains","distanceTo","toBounds","lon","Rl","Ul","jl","ql","Nl","Kl","Gl","fromLngLat","toLngLat","toAltitude","meterInMercatorCoordinateUnits","Zl","Hl","getTilePoint","Xl","Jl","overscaledZ","scaledTo","calculateScaledKey","isChildOf","children","isLessThan","unwrapTo","overscaleFactor","toUnwrapped","Yl","stride","dim","_idx","_unpackTerrarium","_unpackMapbox","getUnpackVector","getPixels","backfillBorder","$l","_stringToNumber","_numberToString","Wl","_vectorTileFeature","_z","_x","_y","Ql","tp","stateChanges","deletedStates","updateState","removeFeatureState","getState","initializeTileState","setFeatureState","coalesceChanges","ep","tileID","grid","grid3D","featureIndexArray","rp","np","minX","minY","maxX","maxY","loadVTLayers","vtLayers","rawTileData","sourceLayerCoder","queryGeometry","queryPadding","cameraQueryGeometry","loadMatchingFeature","transform","pixelPosMatrix","bucketLayerIDs","getId","intersectionZ","lookupSymbolFeatures","hasLayer","ap","uses","buckets","expirationTime","hasSymbolBuckets","dependencies","expiredRequestCount","registerFadeDuration","timeAdded","fadeEndTime","wasRequested","loadVectorData","hasData","unloadVectorData","latestFeatureIndex","latestRawTileData","getLayer","justReloaded","imageAtlas","glyphAtlasImage","imageAtlasTexture","glyphAtlasTexture","getBucket","ALPHA","prepare","queryRenderedFeatures","querySourceFeatures","_geojsonTileLayer","tile","patternsLoaded","setExpiryData","getExpiryTimeout","holdingForFade","symbolFadeHoldUntil","symbolFadeFinished","clearFadeHold","setHoldDuration","setDependencies","hasDependency","op","sp","_marks","measure","mark","getEntriesByName","clearMarks","clearMeasures","Actor","AlphaImage","CanonicalTileID","CollisionBoxArray","Color","DEMData","DataConstantProperty","DictionaryCoder","EXTENT","ErrorEvent","EvaluationParameters","FeatureIndex","FillBucket","FillExtrusionBucket","ImageAtlas","ImagePosition","LineBucket","LngLat","LngLatBounds","MercatorCoordinate","ONE_EM","OverscaledTileID","Point$1","Properties","Protobuf","RGBAImage","RequestManager","RequestPerformance","ResourceType","SegmentVector","SourceFeatureState","StructArrayLayout1ui2","StructArrayLayout2f1f2i16","StructArrayLayout2i4","StructArrayLayout3ui6","StructArrayLayout4i8","SymbolBucket","Texture","Transitionable","Uniform1f","Uniform1i","Uniform2f","Uniform3f","Uniform4f","UniformColor","UniformMatrix4f","UnwrappedTileID","ValidationError","WritingMode","ZoomHistory","asyncAll","bezier","bindAll","browser","cacheEntryPossiblyAdded","getActor","clamp","clearTileCache","clipLine","clone$1","clone$2","collisionCircleLayout","create$1","create$2","createCommonjsModule","createExpression","createLayout","createStyleLayer","cross","deepEqual","dot","dot$1","ease","emitValidationErrors","endsWith","enforceCacheSizeLimit","evaluateVariableOffset","evented","featureFilter","filterObject","fromRotation","getAnchorAlignment","getAnchorJustification","getArrayBuffer","getJSON","getRTLTextPluginStatus","getReferrer","getVideo","muted","onloadstart","crossOrigin","appendChild","invert","isChar","isMapboxURL","keysDifference","makeRequest","mapObject","mercatorXfromLng","mercatorYfromLat","mercatorZfromAltitude","mul","multiply","mvt","nextPowerOfTwo","offscreenCanvasSupported","ortho","parseGlyphPBF","pbf","performSymbolLayout","tilePixelRatio","iconsNeedLinear","compositeIconSizes","layoutTextSize","layoutIconSize","textMaxSize","sdfIcons","perspective","pick","plugin","polygonIntersectsPolygon","potpack","refProperties","registerForPluginStateChange","renderColorRamp","rotateX","rotateZ","scale$1","scale$2","setCacheLimits","setRTLTextPlugin","sphericalToCartesian","sqrLen","symbolSize","transformMat3","transformMat4","translate","triggerPluginCompletionEvent","uniqueId","validateCustomStyleLayer","render","validateLight","validateStyle","vectorTile","warnOnce","webpSupported","keyCache","_layerConfigs","_layers","familiesBySource","showCollisionBoxes","collectResourceTiming","returnDependencies","rawData","stacks","icons","glyphMap","iconMap","glyphPositions","layerIndex","loading","loaded","loadTile","resourceTiming","reloadTile","reloadCallback","abortTile","removeTile","rawImageData","offscreenCanvas","offscreenCanvasContext","clearRect","_feature","tags","rawGeometry","keycache","valuecache","fromVectorTileJs","fromGeojsonVt","GeoJSONWrapper","nodeSize","points","coords","range","minPoints","radius","trees","parentId","numPoints","cluster_id","point_count","point_count_abbreviated","transformed","numSimplified","numFeatures","tileCoords","timeEnd","indexMaxZoom","indexMaxPoints","stats","splitTile","_geoJSONIndex","getTile","byteOffset","load","_cluster","getClusters","_limitZoom","getChildren","_getOriginId","_getOriginZoom","getLeaves","_appendLeaves","_addTileFeatures","getClusterExpansionZoom","_map","loadGeoJSON","loadData","_pendingCallback","abandoned","_pendingLoadDataParams","_loadData","superclusterOptions","geojsonVtOptions","removeSource","clusterId","getClusterChildren","getClusterLeaves","layerIndexes","workerSourceTypes","workerSources","demWorkerSources","registerWorkerSource","registerRTLTextPlugin","setReferrer","setImages","setLayers","getLayerIndex","updateLayers","removedIds","loadDEMTile","getDEMWorkerSource","removeDEMTile","loadWorkerSource","syncRTLPluginState","getAvailableImages","reduceRight","isSealed","isExtensible","getOwnPropertyDescriptor","seal","preventExtensions","Worker","terminate","failIfMajorPerformanceCaveat","webGLContextAttributes","probablySupportsContext","supportsContext","createShader","VERTEX_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","notSupportedReason","antialias","stencil","createNS","createElementNS","documentElement","disableDrag","enableDrag","setTransform","capture","preventDefault","stopPropagation","userImage","suppressClick","mousePos","getBoundingClientRect","clientX","clientLeft","clientY","clientTop","touchPos","mouseButton","InstallTrigger","button","ctrlKey","platform","parentNode","removeChild","images","callbackDispatchedThisFrame","requestors","atlasImage","dirty","setLoaded","_notify","addImage","_validateStretch","_validateContent","updateImage","removeImage","listImages","getImages","getPixelSize","getPattern","_updatePatternAtlas","atlasTexture","CLAMP_TO_EDGE","beginFrame","fontSize","cutoff","fontFamily","fontWeight","canvas","ctx","textBaseline","fillStyle","gridOuter","gridInner","middle","draw","fillText","requestManager","localIdeographFontFamily","setURL","getGlyphs","requests","ranges","_tinySDF","loadGlyphRange","_doesCharSupportLocalGlyph","tinySDF","TinySDF","_transitionable","setLight","_transitioning","getLight","nextRow","dashEntry","getDash","addDash","getDashRanges","isDash","zeroLength","addRoundDash","addRegularDash","REPEAT","workerPool","actors","currentActor","acquire","vector_layers","vectorLayers","vectorLayerIds","broadcast","release","validateBounds","dispatcher","reparseOverscaled","_loaded","_options","_collectResourceTiming","dataType","_tileJSONRequest","_requestManager","tileBounds","_getMapId","sourceDataType","hasTile","setSourceProperty","sourceCaches","clearTiles","setTiles","setUrl","aborted","_refreshExpiredTiles","unloadTile","roundZoom","getTileTexture","extTextureFilterAnisotropic","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","extTextureFilterAnisotropicMax","saveTileTexture","dem","needsHillshadePrepare","coord","neighboringTiles","_getNeighboringTiles","backfilled","demTexture","fbo","_removed","_resourceTiming","workerOptions","_updateWorkerData","_finishLoading","setCoordinates","_boundsArray","boundsBuffer","boundsSegments","loop","triggerRepaint","play","pause","seek","seekable","currentTime","readyState","paused","animate","getElementById","_hasInvalidDimensions","_playing","getCanvas","calculatePosMatrix","maxPitchScaleFactor","tilesIn","wrappedTileID","queryResults","getFeatureState","reset","timeout","order","_getAndRemoveByKey","getAndRemove","getByKey","setMaxSize","createBuffer","dynamicDraw","unbindVAO","bindElementBuffer","bufferData","ELEMENT_ARRAY_BUFFER","DYNAMIC_DRAW","STATIC_DRAW","bufferSubData","deleteBuffer","attributes","bindVertexBuffer","ARRAY_BUFFER","enableAttributes","enableVertexAttribArray","setVertexAttribPointers","vertexAttribPointer","getDefault","setDefault","clearColor","clearDepth","clearStencil","colorMask","depthMask","stencilMask","ALWAYS","mask","stencilFunc","KEEP","stencilOp","STENCIL_TEST","depthRange","DEPTH_TEST","LESS","depthFunc","BLEND","ONE","ZERO","blendFunc","blendColor","FUNC_ADD","blendEquation","CULL_FACE","BACK","cullFace","CCW","frontFace","useProgram","TEXTURE0","activeTexture","drawingBufferWidth","drawingBufferHeight","bindFramebuffer","FRAMEBUFFER","bindRenderbuffer","RENDERBUFFER","bindBuffer","vao","extVertexArrayObject","bindVertexArrayOES","pixelStorei","UNPACK_ALIGNMENT","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_FLIP_Y_WEBGL","setDirty","framebufferTexture2D","COLOR_ATTACHMENT0","framebufferRenderbuffer","DEPTH_ATTACHMENT","framebuffer","createFramebuffer","colorAttachment","depthAttachment","deleteRenderbuffer","deleteFramebuffer","ReadOnly","ReadWrite","disabled","fail","depthFail","blendFunction","Replace","unblended","alphaBlended","mode","backCCW","getExtension","stencilTest","depthTest","blend","cullFaceSide","program","getParameter","MAX_TEXTURE_MAX_ANISOTROPY_EXT","extTextureHalfFloat","extRenderToTextureHalfFloat","extTimerQuery","maxTextureSize","MAX_TEXTURE_SIZE","createRenderbuffer","renderbufferStorage","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","setCullFace","setDepthMode","setStencilMode","setColorMode","_sourceLoaded","_paused","reload","_sourceErrored","_source","_tiles","_cache","_unloadTile","_timers","_cacheTimers","_maxTileCacheSize","_loadedParentTiles","_coveredTiles","getSource","resume","_shouldReloadOnResume","_loadTile","_abortTile","imageManager","getIds","getRenderableIds","_isIdRenderable","hasRenderableParent","findLoadedParent","_reloadTile","_tileLoaded","refreshedUponExpiration","_setTileReloadTimer","_backfillDEM","getTileByID","_retainLoadedChildren","_getLoadedTile","updateCacheSize","handleWrapJump","_prevLng","used","getVisibleUnwrappedCoordinates","coveringTiles","coveringZoomLevel","maxOverzooming","maxUnderzooming","_updateRetainedTiles","_addTile","_fadeDuration","_removeTile","_updateLoadedParentTileCache","releaseSymbolFadeTiles","getCameraQueryGeometry","pointCoordinate","getVisibleCoordinates","posMatrix","reloadTilesForDependencies","active","workers","workerCount","numActive","isPreloaded","setStyle","addLayer","removeLayer","setFilter","addSource","setGeoJSONSourceData","setLayerZoomRange","setLayerProperty","setCenter","setZoom","setBearing","setPitch","setSprite","setGlyphs","command","_distances","paddedLength","lerp","boxCells","circleCells","xCellCount","yCellCount","circleKeys","boxKeys","circles","xScale","yScale","boxUid","circleUid","labelPlaneMatrix","glCoordMatrix","signedDistanceFromCamera","useVertical","notEnoughRoom","needsFlipping","last","keysLength","_insertBoxCell","insertCircle","_insertCircleCell","_query","hitTest","seenUids","box","_queryCircle","_queryCellCircle","hitTestCircle","_circleAndRectCollide","_circlesCollide","_convertToXCellCoord","_convertToYCellCoord","ignoredGrid","pitchfactor","_pitch","screenRightBoundary","screenBottomBoundary","gridRightBoundary","gridBottomBoundary","placeCollisionBox","projectAndGetPerspectiveRatio","perspectiveRatio","isInsideGrid","offscreen","isOffscreen","placeCollisionCircles","collisionDetected","queryRenderedSymbols","bucketInstanceId","insertCollisionBox","collisionGroupID","insertCollisionCircles","getViewportMatrix","opacity","placed","skipFade","invProjMatrix","viewportMatrix","crossSourceCollisions","maxGroupID","collisionGroups","ID","predicate","collisionIndex","placements","opacities","variableOffsets","stale","commitTime","retainedQueryData","collisionCircleArrays","prevPlacement","placedOrientations","getBucketParts","bucket","textLabelPlaneMatrix","labelToScreenMatrix","textPixelRatio","partiallyEvaluatedTextSize","collisionGroup","attemptAnchorPlacement","textOffset","prevAnchor","markUsedJustification","markUsedOrientation","placedGlyphBoxes","placeLayerBucketPart","unshift","commit","zoomAtLastRecencyCheck","prevZoomAdjustment","zoomAdjustment","symbolFadeChange","lastPlacementChangeTime","updateLayerOpacities","updateBucketOpacities","hasTransitions","stillRecent","setStale","_sortAcrossTiles","_currentTileIndex","_currentPartIndex","_seenCrossTileIDs","_bucketParts","continuePlacement","placement","_currentPlacementIndex","_forceFullPlacement","_showCollisionBoxes","_done","isDone","_inProgressLayer","indexedSymbolInstances","getScaledCoordinates","findMatches","maxCrossTileID","generate","indexes","usedCrossTileIDs","addBucket","removeBucketCrossTileIDs","removeStaleBuckets","crossTileIDs","maxBucketInstanceId","bucketsInCurrentPlacement","pruneUnusedLayers","glyphManager","lineAtlas","crossTileSymbolIndex","_serializedLayers","_order","_availableImages","_resetUpdates","_rtlTextPluginCallback","sourceId","_validateLayer","loadURL","accessToken","_request","_load","loadJSON","loadEmpty","stylesheet","_loadSprite","_serializeLayers","_spriteRequest","_updatedSources","_checkLoaded","_changed","_updatedLayers","_removedLayers","_updateWorkerLayers","_reloadSource","_clearSource","_updateTilesForChangedImages","_updatedPaintProps","_changedImages","_afterImageUpdated","isSourceLoaded","_layerOrderChanged","_updateLayer","moveLayer","getFilter","_flattenAndSortRenderedFeatures","addSourceType","getSourceType","setSourceType","workerSourceURL","_remove","_updateSources","_generateCollisionBoxes","_updatePlacement","pauseablePlacement","_releaseSymbolFadeTiles","getResource","fragmentSource","vertexSource","staticAttributes","staticUniforms","prelude","backgroundPattern","clippingMask","heatmapTexture","collisionBox","collisionCircle","fillOutline","fillOutlinePattern","fillPattern","fillExtrusion","fillExtrusionPattern","hillshadePrepare","lineGradient","linePattern","lineSDF","symbolIcon","symbolSDF","symbolTextAndIcon","boundProgram","boundLayoutVertexBuffer","boundPaintVertexBuffers","boundIndexBuffer","boundVertexOffset","boundDynamicVertexBuffer","boundDynamicVertexBuffer2","freshBind","numAttributes","createVertexArrayOES","currentNumAttributes","disableVertexAttribArray","deleteVertexArrayOES","createProgram","FRAGMENT_SHADER","failedToCreate","attachShader","bindAttribLocation","linkProgram","deleteShader","getUniformLocation","fixedUniforms","binderUniforms","tileZoom","u_image","u_texsize","u_scale","u_fade","u_pixel_coord_upper","u_pixel_coord_lower","LINES","TRIANGLES","LINE_STRIP","drawElements","UNSIGNED_SHORT","u_matrix","u_lightpos","u_lightintensity","u_lightcolor","u_vertical_gradient","u_opacity","u_height_factor","u_world","pixelsToGLUnits","u_camera_to_center_distance","u_scale_with_map","translatePosMatrix","u_pitch_with_map","u_device_pixel_ratio","u_extrude_scale","u_pixels_to_tile_units","u_overscale_factor","u_inv_matrix","u_viewport_size","u_color","u_overlay","u_overlay_scale","u_intensity","u_ratio","u_units_to_pixels","u_image_height","u_patternscale_a","u_patternscale_b","u_sdfgamma","u_tex_y_a","u_tex_y_b","u_mix","u_tl_parent","u_scale_parent","u_buffer_scale","u_fade_t","mix","u_image0","u_image1","u_brightness_low","u_brightness_high","u_saturation_factor","u_contrast_factor","u_spin_weights","u_is_size_zoom_constant","u_is_size_feature_constant","u_size_t","u_size","u_pitch","u_rotate_symbol","u_aspect_ratio","u_fade_change","u_label_plane_matrix","u_coord_matrix","u_is_text","u_texture","u_gamma_scale","u_is_halo","u_texsize_icon","u_texture_icon","u_pattern_tl_a","u_pattern_br_a","u_pattern_tl_b","u_pattern_br_b","u_pattern_size_a","u_pattern_size_b","u_scale_a","u_scale_b","u_tile_units_to_pixels","u_color_ramp","u_latrange","u_light","u_shadow","u_highlight","u_accent","u_dimension","u_zoom","u_unpack","circleArray","circleOffset","invTransform","colorModeForRenderPass","shiftedAnchor","depthModeForSublayer","rotating","zooming","NEAREST","uniformValues","atlasTextureIcon","atlasInterpolation","atlasInterpolationIcon","hasHalo","TEXTURE1","stencilModeForClipping","moving","rasterBoundsBuffer","quadTriangleIndexBuffer","rasterBoundsSegments","SCISSOR_TEST","scissor","emptyTexture","debugBuffer","tileBorderIndexBuffer","debugSegments","initDebugOverlayCanvas","debugOverlayCanvas","shadowColor","shadowBlur","lineWidth","strokeStyle","strokeText","debugOverlayTexture","renderPass","programConfiguration","HALF_FLOAT_OES","viewportBuffer","viewportSegments","gradient","opaquePassEnabledForLayer","LEQUAL","depthRangeFor3D","stencilModeFor3D","stencilConfigForOverlap","isPatternMissing","tileExtentBuffer","tileExtentSegments","custom","setCustomLayerDefaults","customLayerMatrix","setBaseState","_tileTextures","setup","numSublayers","depthEpsilon","gpuTimers","stencilClearMode","nextStencilID","currentStencilSource","_renderTileClippingMasks","_tileClippingMaskIDs","REPLACE","NOTEQUAL","EQUAL","GEQUAL","_showOverdrawInspector","CONSTANT_COLOR","currentLayer","opaquePassCutoff","renderLayer","showOverdrawInspector","showTileBoundaries","showPadding","centerPoint","gpuTimingStart","gpuTimingEnd","gpuTiming","calls","cpuTime","createQueryEXT","beginQueryEXT","TIME_ELAPSED_EXT","endQueryEXT","collectGpuTimers","queryGpuTimers","getQueryObjectEXT","QUERY_RESULT_EXT","deleteQueryEXT","planes","fromInvProjectionMatrix","quadrant","distanceX","distanceY","intersects","MAX_VALUE","maxValidLatitude","_renderWorldCopies","_minZoom","_maxZoom","_minPitch","_maxPitch","setMaxBounds","_center","_fov","_unmodified","_edgeInsets","_posMatrixCache","_alignedPosMatrixCache","minPitch","maxPitch","renderWorldCopies","worldSize","centerOffset","fov","unmodified","latRange","_calcMatrices","rotationMatrix","_zoom","zoomScale","zoomFraction","_constrain","isPaddingEqual","interpolatePadding","scaleZoom","aabb","fullyVisible","distanceSq","project","unproject","setLocationAtPoint","locationCoordinate","coordinateLocation","locationPoint","coordinatePoint","pointLocation","pixelMatrixInverse","pixelMatrix","getBounds","getMaxBounds","lngRange","alignedProjMatrix","projMatrix","mercatorMatrix","_constraining","getCameraPoint","_hashName","_updateHash","_updateHashUnthrottled","addTo","_onHashChange","getHashString","getZoom","getBearing","getPitch","_getCurrentHash","dragRotate","touchZoomRotate","jumpTo","history","replaceState","linearity","easing","deceleration","maxSpeed","amount","_inertiaBuffer","record","_drainInertiaBuffer","settings","_onMoveEnd","pan","pinchAround","around","zoomDelta","bearingDelta","pitchDelta","panDelta","noMoveStart","getCanvasContainer","lngLat","originalEvent","_defaultPrevented","defaultPrevented","changedTouches","touches","lngLats","_clickTolerance","clickTolerance","_mousedownPos","wheel","_firePreventable","mousedown","mouseup","click","dblclick","mouseover","mouseout","touchstart","touchmove","touchend","touchcancel","isActive","_delayContextMenu","_contextMenuEvent","mousemove","contextmenu","_el","_container","getContainer","_enabled","_active","shiftKey","_startPos","_lastPos","mousemoveWindow","_box","classList","_fireEvent","mouseupWindow","cameraAnimation","fitScreenCoordinates","keydown","keyCode","blur","numTouches","centroid","startTime","singleTap","numTaps","lastTime","lastTap","_zoomIn","_zoomOut","easeTo","_moved","_lastPoint","_eventButton","_correctButton","_move","buttons","_minTouches","_touches","_sum","_calculateTransform","_firstTwoTouches","_start","_aroundCenter","_distance","_startDistance","_minDiameter","_startVector","_vector","_isBelowThreshold","_valid","_firstMove","_lastPoints","gestureBeginsVertically","panStep","bearingStep","pitchStep","_panStep","_bearingStep","_pitchStep","_rotationDisabled","altKey","metaKey","easeId","disableRotation","enableRotation","_handler","_delta","_defaultZoomRate","_wheelZoomRate","setZoomRate","setWheelZoomRate","_finishTimeout","isZooming","_zooming","deltaMode","WheelEvent","DOM_DELTA_LINE","deltaY","_lastWheelEventTime","_type","_lastValue","_timeout","_onTimeout","_lastWheelEvent","_frameId","_around","_aroundPoint","_triggerRenderFrame","renderFrame","_targetZoom","_startZoom","_easing","_smoothOutEasing","noInertia","needsRenderFrame","_prevEase","_clickZoom","_tapZoom","_tap","_swipePoint","_swipeTouch","_tapTime","_mousePan","_touchPan","_inertiaOptions","_pitchWithRotate","pitchWithRotate","_mouseRotate","_mousePitch","_touchZoom","_touchRotate","_tapDragZoom","drag","_handlersById","_changes","_inertia","_bearingSnap","bearingSnap","_previousActiveHandlers","_eventsInProgress","_addDefaultHandlers","passive","handleWindowEvent","handleEvent","boxZoom","doubleClickZoom","touchPitch","dragPan","scrollZoom","keyboard","interactive","handlerName","allowed","stop","_updatingCamera","_fireEvents","isRotating","isMoving","_blockedByActive","_getMapTouches","mergeHandlerResult","_stop","_applyChanges","_updateMapTransform","_update","resetNorth","_requestFrame","_renderTaskQueue","_moving","panBy","panTo","zoomTo","zoomIn","zoomOut","getPadding","setPadding","rotateTo","resetNorthPitch","snapToNorth","cameraForBounds","_cameraForBoxAndBearing","fitBounds","_fitInternal","flyTo","essential","_normalizeBearing","_normalizeCenter","_rotating","pitching","_pitching","_padding","_easeId","_prepareEase","_ease","_fireMoveEvents","_afterEase","speed","curve","screenSpeed","maxDuration","isEasing","_easeFrameId","_cancelRenderFrame","_onEaseFrame","_onEaseEnd","_easeStart","_easeOptions","_requestRenderFrame","_renderFrameCallback","getDefaultPosition","compact","_compactButton","_toggleAttribution","_setElementTitle","_innerContainer","_updateAttributions","_updateEditLink","_updateData","_updateCompact","_attribHTML","_getUIString","title","_editLink","querySelector","styleOwner","styleId","_hash","rel","customAttribution","innerHTML","offsetWidth","display","_updateLogo","_logoRequired","mapbox_logo","_queue","_cleared","_currentlyRunning","HTMLElement","attributionControl","preserveDrawingBuffer","trackResize","refreshExpiredTiles","maxTileCacheSize","_interactive","_failIfMajorPerformanceCaveat","_preserveDrawingBuffer","_antialias","_trackResize","_crossSourceCollisions","_crossFadingFactor","_controls","_mapId","container","maxBounds","_setupContainer","_setupPainter","_onWindowOnline","_onWindowResize","fitBoundsOptions","_localIdeographFontFamily","addControl","logoPosition","repaint","_controlPositions","insertBefore","firstChild","removeControl","hasControl","_containerDimensions","_resizeCanvas","setMinZoom","getMinZoom","setMaxZoom","getMaxZoom","setMinPitch","getMinPitch","setMaxPitch","getMaxPitch","getRenderWorldCopies","setRenderWorldCopies","_createDelegatedListener","listener","delegates","_delegatedListeners","_diffStyle","_updateStyle","_lazyInitEmptyStyle","_updateDiff","getStyle","isStyleLoaded","areTilesLoaded","hasImage","loadImage","_canvasContainer","_canvas","clientWidth","clientHeight","_detectMissingCSS","getComputedStyle","_missingCSSCanary","getPropertyValue","_contextLost","_contextRestored","_controlContainer","_onMapScroll","_frame","scrollTop","scrollLeft","_styleDirty","_sourcesDirty","_render","_placementDirty","gpuTime","layerTimes","_repaint","_fullyLoaded","loseContext","_showTileBoundaries","_showPadding","_vertices","_setCacheLimits","showCompass","showZoom","visualizePitch","_zoomInButton","_createButton","_zoomOutButton","_compass","_compassIcon","_updateZoomButtons","_rotateCompassArrow","_setButtonTitle","element","mouseRotate","mousePitch","down","move","offTemp","targetTouches","_anchor","_color","_scale","_draggable","draggable","_isDragging","_rotation","rotation","_rotationAlignment","rotationAlignment","_pitchAlignment","pitchAlignment","_element","_defaultMarker","setAttributeNS","rx","ry","_popup","setDraggable","_onMapClick","_addDragHandler","_onUp","_onMove","getLngLat","_lngLat","setLngLat","_pos","getElement","setPopup","_onKeyPress","_originalTabIndex","removeAttribute","getAttribute","charCode","togglePopup","getPopup","isOpen","getOffset","setOffset","_pointerdownPos","_positionDelta","pointerEvents","isDraggable","setRotation","getRotation","setRotationAlignment","getRotationAlignment","setPitchAlignment","getPitchAlignment","positionOptions","enableHighAccuracy","maximumAge","trackUserLocation","showAccuracyCircle","showUserLocation","_setupUI","permissions","geolocation","_geolocationWatchID","clearWatch","_userLocationDotMarker","_accuracyCircleMarker","_onZoom","_isOutOfMapMaxBounds","longitude","latitude","_setErrorState","_watchState","_geolocateButton","_onSuccess","_updateMarker","_finish","_lastKnownPosition","_updateCamera","_dotElement","accuracy","geolocateSource","_accuracy","_updateCircleRadius","_circleElement","_clearWatch","_timeoutId","_setup","watchPosition","getCurrentPosition","maxWidth","setUnit","_fullscreen","_fullscreenchange","_checkFullscreenSupport","_changeIcon","fullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","webkitFullscreenEnabled","_fullscreenButton","_updateTitle","_onClickFullscreen","_getTitle","_isFullscreen","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","toggle","exitFullscreen","mozCancelFullScreen","msExitFullscreen","webkitCancelFullScreen","requestFullscreen","mozRequestFullScreen","msRequestFullscreen","webkitRequestFullscreen","closeButton","closeOnClick","focusAfterOpen","_onClose","closeOnMove","_focusFirstElement","_trackPointer","_onMouseMove","_onMouseUp","_content","_onDrag","trackPointer","setText","setDOMContent","setHTML","createDocumentFragment","getMaxWidth","setMaxWidth","hasChildNodes","_createCloseButton","addClassName","removeClassName","toggleClassName","_closeButton","_tip","offsetHeight","focus","NavigationControl","GeolocateControl","AttributionControl","ScaleControl","FullscreenControl","Popup","Marker","prewarm","clearPrewarmedResources","baseApiUrl","maxParallelImageRequests","clearStorage","__SENTRY_BROWSER_BUNDLE__","symbolMap","numberMap","pluralForm","plurals","pluralize","weekdaysParseExact","suffixes","relativeTimeWithPlural","num","forms","lastDigit","last2Digits","monthsParseExact","relativeTimeWithMutation","mutationTable","lastNumber","minWeekdaysParse","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","lll","llll","plural","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","monthsShortWithDots","monthsShortWithoutDots","weekEndings","eraYearOrdinalRegex","$0","$1","isUpper","eifelerRegelAppliesToNumber","translateSingular","special","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","word","numbersNouns","numberNoun","hundred","ten","one","processHoursFunction","nominative","accusative","genitive","isFiniteImpl","compareArray","mulSafe","decimals","getFractional","divSafe","den","factor","QtyError","throwIncompatibleUnits","UNITS","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","denominator","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","previous","isBase","toBase","QTY_STRING_REGEX","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","scalarMatch","nx","UNIT_TEST_REGEX","parseUnits","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","KINDS","addTempDegrees","deg","tempDegrees","getDegreeUnits","isDegrees","isCompatible","dst","dstScalar","dstUnits","srcDegK","qty","toDegrees","isInverse","inverse","baseUnitCache","toFloat","isUnitless","toPrec","precQuantity","cleanTerms","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","prefixValue","combinedPrefixValue","NestedMap","getUnits","unitKeys","getKinds","getAliases","unitName","strings","knownSignature","seen","swiftConverter","srcUnits","srcQty","dstQty","eq","lhsUnits","rhsConverted","dstDegrees","op1","op2","numdenscale","compareTo","lte","gte","same","_isBase","childMap","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","targetQty","stringifiedUnitsCache","unitCounter","unitCount","tokenNext","unitNames","WINDOW","root","JS_SHA256_NO_WINDOW","WEB_WORKER","NODE_JS","JS_SHA256_NO_NODE_JS","COMMON_JS","JS_SHA256_NO_COMMON_JS","AMD","JS_SHA256_NO_ARRAY_BUFFER","HEX_CHARS","EXTRA","SHIFT","OUTPUT_TYPES","blocks","JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW","createOutputMethod","outputType","is224","Sha256","createMethod","nodeWrap","bufferFrom","Buffer","algorithm","JS_SHA256_NO_BUFFER_FROM","createHash","digest","createHmacOutputMethod","HmacSha256","createHmacMethod","sharedMemory","h0","h1","h2","h3","h4","h5","h6","h7","block","bytes","hBytes","finalized","hashed","oKeyPad","iKeyPad","inner","notString","lastByteIndex","finalize","s0","s1","maj","t1","ab","cd","bc","chromeBugWorkAround","hex","dataView","DataView","setUint32","innerHash","sha256","sha224","hmac","createErrorType","init","superErrorClass","JsJodaException","captureStackTrace","ArithmeticException","ChronoField","ChronoLocalDate","ChronoLocalDateTime","ChronoUnit","ChronoZonedDateTime","Clock","DateTimeException","DateTimeFormatter","DateTimeFormatterBuilder","DateTimeParseException","DayOfWeek","DecimalStyle","IllegalArgumentException","IllegalStateException","Instant","IsoChronology","IsoFields","LocalDate","LocalDateTime","LocalTime","Month","MonthDay","NullPointerException","OffsetDateTime","OffsetTime","ParsePosition","Period","ResolverStyle","SignStyle","Temporal","TemporalAccessor","TemporalAdjuster","TemporalAdjusters","TemporalAmount","TemporalField","TemporalQueries","TemporalQuery","TemporalUnit","TextStyle","UnsupportedTemporalTypeException","ValueRange","Year","YearConstants","YearMonth","ZoneId","ZoneOffset","ZoneOffsetTransition","ZoneRegion","ZoneRules","ZoneRulesProvider","ZonedDateTime","nativeJs","use","cause","parsedString","errorIndex","assertion","requireNonNull","parameterName","requireInstance","_class","abstractMethodFail","methodName","MIN_SAFE_INTEGER","MathUtil","intDiv","roundDown","safeZero","intMod","floorDiv","floorMod","safeAdd","verifyInt","safeToInt","safeSubtract","safeMultiply","_parseInt","compareNumbers","smi","int","Infinity","hashCode","_len","numbers","_key","_numbers","Enum","_name","_proto","temporal","subtractFrom","toPrimitive","isDurationEstimated","isDateBased","isTimeBased","isSupportedBy","dateTime","periodToAdd","between","temporal1","temporal2","_TemporalAmount","nanos","_seconds","_nanos","_inheritsLoose","ofDays","_create","SECONDS_PER_DAY","ofHours","SECONDS_PER_HOUR","ofMinutes","SECONDS_PER_MINUTE","ofSeconds","nanoAdjustment","secs","NANOS_PER_SECOND","nos","ofMillis","millis","mos","ofNanos","of","plus","startInclusive","endExclusive","SECONDS","isSupported","NANO_OF_SECOND","startNos","getLong","adjustedEnd","with","negate","dayMatch","hourMatch","minuteMatch","secondMatch","fractionMatch","daysAsSecs","_parseNumber","hoursAsSecs","minsAsSecs","negativeSecs","_parseFraction","parsed","multiplier","errorText","_createSecondsNanos","_createNegateDaysHoursMinutesSecondsNanos","negated","NANOS","isZero","isNegative","nano","withSeconds","withNanos","nanoOfSecond","checkValidIntValue","plusDuration","durationOrNumber","unitOrNumber","plusAmountUnit","plusSecondsNanos","amountToAdd","DAYS","plusNanos","MICROS","MILLIS","plusMillis","plusSeconds","multipliedBy","plusDays","daysToAdd","plusHours","hoursToAdd","plusMinutes","minutesToAdd","secondsToAdd","millisToAdd","nanosToAdd","epochSec","minus","minusDuration","minusAmountUnit","secsToSubtract","nanosToSubtract","amountToSubtract","minusDays","daysToSubtract","minusHours","hoursToSubtract","minusMinutes","minutesToSubtract","minusSeconds","secondsToSubtract","minusMillis","millisToSubtract","minusNanos","multiplicand","dividedBy","secsMod","toDays","toHours","toMinutes","toMillis","toNanos","totalNanos","otherDuration","cmp","nanoString","rval","_TemporalUnit","estimatedDuration","_duration","FOREVER","baseUnit","rangeUnit","rangeRefinedBy","getFrom","adjustInto","newValue","displayName","minSmallest","minLargest","maxSmallest","maxLargest","_minSmallest","_minLargest","_maxLargest","_maxSmallest","isFixed","largestMinimum","smallestMaximum","isValidValue","checkValidValue","isValidIntValue","isIntValue","_TemporalField","_baseUnit","_rangeUnit","_range","byName","fieldName","DAY_OF_WEEK","ALIGNED_DAY_OF_WEEK_IN_MONTH","ALIGNED_DAY_OF_WEEK_IN_YEAR","DAY_OF_MONTH","DAY_OF_YEAR","EPOCH_DAY","ALIGNED_WEEK_OF_MONTH","ALIGNED_WEEK_OF_YEAR","MONTH_OF_YEAR","PROLEPTIC_MONTH","YEAR_OF_ERA","ERA","NANO_OF_DAY","MICRO_OF_SECOND","MICRO_OF_DAY","MILLI_OF_SECOND","MILLI_OF_DAY","SECOND_OF_MINUTE","SECOND_OF_DAY","MINUTE_OF_HOUR","MINUTE_OF_DAY","HOUR_OF_AMPM","CLOCK_HOUR_OF_AMPM","HOUR_OF_DAY","CLOCK_HOUR_OF_DAY","AMPM_OF_DAY","zoneId","ZONE_ID","chronology","CHRONO","precision","PRECISION","ZONE","OFFSET","localDate","LOCAL_DATE","localTime","LOCAL_TIME","queryFrom","_Enum","createTemporalQuery","queryFromFunction","ExtendedTemporalQuery","_TemporalQuery","ENUMS","MONTHS","_TemporalAccessor","dayOfWeek","newMonthVal","leapYear","FEBRUARY","APRIL","JUNE","SEPTEMBER","NOVEMBER","minLength","leap","JANUARY","MARCH","MAY","JULY","AUGUST","OCTOBER","DECEMBER","firstMonthOfQuarter","INSTANCE","PATTERN","_years","_assertThisInitialized","ofYears","ofMonths","ofWeeks","unitAmount","YEARS","startDate","endDate","yearMatch","monthMatch","weekMatch","withYears","withMonths","withDays","plusYears","yearsToAdd","plusMonths","monthsToAdd","minusYears","yearsToSubtract","minusMonths","monthsToSubtract","totalMonths","toTotalMonths","splitYears","splitMonths","_index","_errorIndex","getIndex","setIndex","getErrorIndex","setErrorIndex","EnumMap","putAll","otherMap","containsKey","retainAll","keyList","keyName","keySet","STRICT","SMART","LENIENT","fieldOrUnit","_minusAmount","_minusUnit","_plusUnit","_plusAmount","endTemporal","adjusterOrField","_withAdjuster","_withField","adjuster","_Temporal","ofEpochDay","toEpochDay","StringUtil","systemDefault","getAvailableZoneIds","ofOffset","rules","isFixedOffset","EPOCH","Fixed","instantOrLocalDateTime","offsetOfInstant","offsetOfLocalDateTime","instant","offsetOfEpochMilli","epochMilli","localDateTime","validOffsets","standardOffset","daylightSavings","isDaylightSavings","isValidOffset","nextTransition","previousTransition","transitions","transitionRules","_ZoneRules","_proto2","SECONDS_CACHE","ID_CACHE","_ZoneId","totalSeconds","_validateTotalSeconds","_totalSeconds","_rules","_buildId","absTotalSeconds","absHours","absMinutes","MINUTES_PER_HOUR","absSeconds","MAX_SECONDS","offsetId","ofHoursMinutesSeconds","precededByColon","ch1","ch2","ofHoursMinutes","ofTotalSeconds","ofTotalMinutes","totalMinutes","totalSecs","OFFSET_SECONDS","DateTimeBuilder","fieldValues","chrono","leapSecond","excessDays","dtb","_addFieldValue","getFieldValue0","old","_putFieldValue0","resolverStyle","resolverFields","_mergeDate","_mergeTime","_resolveTimeInferZeroes","_resolveInstant","_checkDate","resolveDate","_addObject","val1","val2","ch","_ch","hap","nod","cod","lod","los","_nos","_cos","_los","hod","moh","som","hodVal","mohVal","somVal","nosVal","_hodVal","ofNanoOfDay","_excessDays","ofSecondOfDay","_excessDays2","dateOrTime","offsetSecs","atTime","atZone","INSTANT_SECONDS","_instant","build","DateTimeParseContext","_constructorSelf","_constructorFormatter","_constructorParam","_caseSensitive","_parsed","Parsed","symbols","_symbols","_overrideChronology","decimalStyle","_overrideZone","setStrict","setLocale","startOptional","currentParsed","endOptional","successful","isCaseSensitive","setCaseSensitive","subSequenceEquals","cs1","offset1","cs2","offset2","charEquals","charEqualsIgnoreCase","c1","c2","setParsedField","errorPos","successPos","currentParsedFieldValues","setParsedZone","getParsed","toParsed","setParsedLeapSecond","getEffectiveChronology","dateTimeParseContext","cloned","toBuilder","builder","overrideZone","DateTimePrintContext","localeOrFormatter","_temporal","adjust","_optional","getValueQuery","setDateTime","QUARTER_DAYS","Field","_isIso","_getWeekRangeByLocalDate","wby","_getWeekBasedYear","_getWeekRangeByYear","THURSDAY","WEDNESDAY","_getWeek","dow0","doy0","doyThu0","firstMonDoy0","withDayOfYear","_dow","DAY_OF_QUARTER_FIELD","_Field","QUARTER_YEARS","qoy","QUARTER_OF_YEAR","moy","curValue","partialTemporal","yearLong","qoyLong","doq","DAY_OF_QUARTER","_qoy","QUARTER_OF_YEAR_FIELD","_Field2","_proto3","WEEK_OF_WEEK_BASED_YEAR_FIELD","_Field3","_proto4","WEEKS","WEEK_BASED_YEARS","wbyLong","WEEK_BASED_YEAR","dowLong","wowby","WEEK_OF_WEEK_BASED_YEAR","plusWeeks","_dow2","WEEK_BASED_YEAR_FIELD","_Field4","_proto5","newWby","Unit","_proto6","added","zeroChar","positiveSignChar","negativeSignChar","decimalPointChar","_zeroDigit","_zeroDigitCharCode","_positiveSign","_negativeSign","_decimalSeparator","positiveSign","withPositiveSign","negativeSign","withNegativeSign","zeroDigit","withZeroDigit","decimalSeparator","withDecimalSeparator","convertToDigit","char","convertNumberToI18N","numericText","convertedText","availableLocales","STANDARD","positive","fixedWidth","NORMAL","EXCEEDS_PAD","NEVER","NOT_NEGATIVE","isStandalone","FULL_STANDALONE","SHORT_STANDALONE","NARROW_STANDALONE","asStandalone","FULL","SHORT","NARROW","asNormal","CharLiteralPrinterParser","_literal","print","CompositePrinterParser","printerParsers","optional","_printerParsers","withOptional","setLength","FractionPrinterParser","minWidth","decimalPoint","fraction","convertToFraction","outputScale","effectiveMin","effectiveMax","minEndPos","maxEndPos","digit","moveLeft","convertFromFraction","_min","decimal","EXCEED_POINTS","NumberPrinterParser","signStyle","subsequentWidth","_field","_minWidth","_maxWidth","_signStyle","_subsequentWidth","withFixedWidth","withSubsequentWidth","_isFixedWidth","contextValue","_getValue","negative","effMinWidth","effMaxWidth","parseLen","_parseLen","_setValue","ReducedPrinterParser","_NumberPrinterParser","baseValue","baseDate","_baseValue","_baseDate","absValue","basePart","isFixedWidth","PATTERNS","OffsetIdPrinterParser","noOffsetText","_checkPattern","bufPos","appendChar","noOffsetLen","parseText","converted","INSTANCE_ID","PadPrinterParserDecorator","printerParser","padWidth","padChar","_printerParser","_padWidth","_padChar","preLen","endPos","resultPos","SettingsParser","SENSITIVE","INSENSITIVE","PARSER$2","PARSER$1","PARSER","StringLiteralPrinterParser","getRules","ofId","ZoneIdPrinterParser","description","nextChar","newContext","nextNextChar","_parsePrefixedOffset","availableZoneIds","zoneIdTree","ZoneIdTree","createTreeMap","maxParseLength","treeMap","parsedZoneId","parseLength","parsedSubZoneId","isLeaf","prefixPos","sortedZoneIds","ZoneIdTreeMap","_treeMap","idLength","subZoneId","subTreeMap","MAX_WIDTH","_parent","_padNextWidth","_padNextChar","_valueParserIndex","_of","dtFormatterBuilder","parseCaseSensitive","_appendInternalPrinterParser","parseCaseInsensitive","parseStrict","parseLenient","appendValue","_appendValue1","_appendValue2","_appendValue4","_appendValuePrinterParser","pp","appendValueReduced","_appendValueReducedFieldWidthMaxWidthBaseDate","_appendValueReducedFieldWidthMaxWidthBaseValue","activeValueParser","basePP","_appendInternal","appendFraction","appendInstant","fractionalDigits","InstantPrinterParser","appendOffsetId","appendOffset","appendZoneId","appendPattern","_parsePattern","appendZoneText","appendText","appendLocalizedOffset","appendWeekField","FIELD_MAP","cur","pad","padNext","_parseField","zero","appendLiteral","optionalStart","optionalEnd","BASE_DATE","_padNext1","_padNext2","cpp","_toPrinterParser","toFormatter","SECONDS_PER_10000_YEARS","SECONDS_0000_TO_1970","inSecs","inNanos","inSec","inNano","zeroSecs","ldt","ofEpochSecond","_zeroSecs","_hi","_lo","_ldt","minDigits","maxDigits","ISO_LOCAL_DATE","instantSecs","yearParsed","secVal","nanoVal","sec","toEpochSecond","StringBuilder","_str","_decimalStyle","_resolverStyle","_resolverFields","_chrono","_zone","parsedExcessDays","PARSED_EXCESS_DAYS","parsedLeapSecond","PARSED_LEAP_SECOND","ofPattern","withChronology","withLocale","withResolverStyle","_formatTo","appendable","parse1","parse2","_parseToBuilder","_createError","_parseUnresolved0","parseUnresolved","dayOfMonth","_month","_day","zoneIdOrClock","now0","nowZoneId","nowClock","systemDefaultZone","system","clock","monthOrNumber","ofMonthNumber","ofNumberNumber","parseString","parseStringFormatter","FROM","monthValue","isValidYear","isLeap","withMonth","withDayOfMonth","atYear","_year","ofNumberMonth","isSupportedField","isSupportedUnit","DECADES","CENTURIES","MILLENNIA","ERAS","_getProlepticMonth","isValidDay","lengthOfMonth","lengthOfYear","withYear","newYear","calcMonths","monthsUntil","atDay","atEndOfMonth","isoYear","parseTextFormatter","isValidMonthDay","monthDay","ofYearDay","atMonth","atMonthMonth","atMonthNumber","atMonthDay","yearsUntil","firstDayOfMonth","Impl","FIRST_DAY_OF_MONTH","lastDayOfMonth","LAST_DAY_OF_MONTH","firstDayOfNextMonth","FIRST_DAY_OF_NEXT_MONTH","FIRST_DAY_OF_YEAR","lastDayOfYear","LAST_DAY_OF_YEAR","firstDayOfNextYear","FIRST_DAY_OF_NEXT_YEAR","firstInMonth","DayOfWeekInMonth","lastInMonth","dayOfWeekInMonth","RelativeDayOfWeek","nextOrSame","previousOrSame","_TemporalAdjuster","_TemporalAdjuster2","_this2","_dowValue","curDow","dowDiff","_temp","_curDow","daysDiff","_TemporalAdjuster3","_this3","_relative","calDow","_daysDiff","prolepticYear","_updateResolveMap","prolepticMonth","yoeLong","dom","_y2","_days2","aw","ad","_y3","_weeks","_days3","_aw","_date","_time","toOffsetTime","clockOrZone","_now","ofInstant","ofTimeAndOffset","ofNumbers","secsOfDay","epochSecond","ISO_OFFSET_TIME","toNanoOfDay","atDate","_toEpochNano","isEqual","_withLocalTimeOffset","toLocalTime","truncatedTo","nanosUntil","MINUTES","NANOS_PER_MINUTE","HOURS","NANOS_PER_HOUR","HALF_DAYS","withHour","withMinute","withSecond","withNano","withOffsetSameInstant","difference","withOffsetSameLocal","toLocalDate","toInstant","toSecondOfDay","toLocalDateTime","thisEpochSec","otherEpochSec","_ChronoZonedDateTime","_dateTime","of2","of3","of8","ofLocal","preferredOffset","trans","offsetAfter","validOffset","ofInstant2","ofInstant3","ofStrict","isGap","ofLenient","zdt","_from","__from","ISO_ZONED_DATE_TIME","_resolveLocal","newDateTime","_resolveOffset","withEarlierOffsetAtOverlap","isOverlap","earlierOffset","offsetBefore","withLaterOffsetAtOverlap","laterOffset","withZoneSameLocal","withZoneSameInstant","withFixedOffsetZone","minusWeeks","toOffsetDateTime","ofDateTime","ofDateAndTime","ISO_OFFSET_DATE_TIME","atZoneSameInstant","atZoneSimilarLocal","toZonedDateTime","_withDateTimeOffset","DAYS_PER_CYCLE","DAYS_0000_TO_1970","_ChronoLocalDate","epochDay","adjustCycles","doyEst","yearEst","zeroDay","marchDoy0","marchMonth0","_resolvePreviousValid","_get0","_prolepticMonth","newMonth","weeksToAdd","mjDay","weeksToSubtract","until1","until2","daysUntil","_monthsUntil","packed1","packed2","calcDate","atTime1","atTime4","_atTimeOffsetTime","atStartOfDay","_atStartOfDayWithZone","MIDNIGHT","dateTimeAfter","_compareTo0","otherDate","yearValue","dayValue","_ChronoLocalDateTime","_ofEpochMillis","localSecond","localEpochDay","ISO_LOCAL_DATE_TIME","_withDateTime","newDate","newTime","MICROS_PER_DAY","MILLIS_PER_DAY","_plusWithOverflow","totDays","NANOS_PER_DAY","MINUTES_PER_DAY","HOURS_PER_DAY","totNanos","curNoD","newNoD","timeUntil","endTime","atOffset","_hour","_minute","_second","_nanoOfSecond","_nano","secondOfDay","nanoOfDay","ISO_LOCAL_TIME","ham","unitDur","dur","mofd","newMofd","sofd","newSofd","nofd","newNofd","hourValue","minuteValue","secondValue","nanoValue","NANOS_PER_MILLI","systemUTC","ofEpochMilli","ofEpochMicro","epochMicro","ISO_INSTANT","MIN_SECONDS","nval","_nval","plusMicros","_plus","microsToAdd","minusMicros","microsToSubtract","_nanosUntil","_microsUntil","toEpochMilli","_secondsUntil","secsDiff","totalMicros","nanosDiff","otherInstant","SystemClock","fixedInstant","FixedClock","baseClock","OffsetClock","withZone","_Clock","_Clock2","_zoneId","_Clock3","_baseClock","_transition","_offsetBefore","_offsetAfter","dateTimeBefore","durationSeconds","SystemDefaultZoneRules","offsetInMinutes","offsetInMinutesBeforePossibleTransition","offsetInMinutesAfterPossibleTransition","_throwNotSupported","SystemDefaultZoneId","ZoneIdFactory","SYSTEM_DEFAULT_ZONE_ID_INSTANCE","isInit","MIN_VALUE","MIN","MAX","NOON","isoWeekOfWeekyear","isoWeekyear","MONDAY","TUESDAY","FRIDAY","SATURDAY","SUNDAY","EPOCH_0","SYSTEM","BASIC_ISO_DATE","ISO_OFFSET_DATE","ISO_ORDINAL_DATE","ISO_WEEK_DATE","ISO_DATE","ISO_TIME","ISO_DATE_TIME","ToNativeJsConverter","zonedDateTime","jsJoda","assert$1","jsJodaExports","TZDB_DATA","TZDB_VERSION","MomentZoneRules","tzdbInfo","_tzdbInfo","_ldtUntils","LDTUntils","untils","offsets","core","_offsetByIndexInSeconds","info","_offsetInfo","offsetIndex","ldtBefore","ldtAfter","offsetInSeconds","notSupported","_tzdbUntils","tzdbOffsets","_tzdbOffsets","_generateTupple","epochMillis","zone1","ldt1","nextIndex","zone2","ldt2","_getTupple","tzdbOffset","charCodeToInt","unpackBase60","whole","fractional","arrayToInt","mapIndices","indices","unpack","abbrs","population","AVAILABLE_ZONE_IDS","zones","links","MomentZoneRulesProvider","_ZoneRulesProvider","tzdbZoneInfo","getVersion","getTzdbData","loadTzdbData","packedJson","_step","_iterator","_createForOfIteratorHelperLoose","done","_step2","_iterator2","link","resolvedZoneId","resolvedTimeZone","DateTimeFormat","extendSystemDefaultZoneId","kL","IQ","zX","requestAnimFrame","throttled","thisArg","updateFn","updateArgs","ticking","rest","_toLeftRightCenter","align","_alignStartEnd","isNullOrUndef","isNumberFinite","finiteOrDefault","valueOrDefault","toDimension","dimension","each","loopable","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","klen","isValidKey","_merger","tval","sval","merge","merger","mergeIf","_mergerIf","emptyString","indexOfDotOrLength","idx","resolveObjectKey","_capitalize","defined","setsEqual","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","niceNum","roundedRange","almostEquals","niceRange","epsilon","_setMinAndMaxByKey","toRadians","degrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","atEdge","elasticIn","elasticOut","effects","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","lim","p2b","n2b","b2n","n2p","map$1","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb2hsl","calln","hsl2rgb","hue","names$1","OiceXe","antiquewEte","aquamarRe","azuY","blanKedOmond","XeviTet","bPwn","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","pRk","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","skyXe","UXe","UWay","UgYy","sprRggYF","stAlXe","teO","tEstN","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","RGB_RE","modHSL","ratio","fromObject","unpacked","tkeys","nk","functionParse","_rgb","valid","rgbString","hexString","hslString","weight","w2","w1","rgb1","rgb2","clearer","greyscale","opaquer","lighten","darken","saturate","desaturate","index_esm","isPatternOrGradient","getHoverColor","descriptors","getScope$1","_descriptors","animation","backgroundColor","borderColor","datasets","chart","getDevicePixelRatio","elements","events","family","lineHeight","hover","hoverBackgroundColor","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scales","showLine","drawActiveElementsOnTop","describe","override","targetScope","targetName","scopeObject","targetScopeObject","privateName","_scriptable","_indexable","_fallback","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","save","jlen","thing","nestedThing","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","resetTransform","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rad","beginPath","arc","closePath","moveTo","lineTo","SQRT1_2","borderWidth","stroke","_isPointInArea","margin","clipArea","clip","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","opts","strokeWidth","strokeColor","translation","textAlign","decorateText","strikethrough","underline","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","props","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","fallback","inputs","cacheable","createContext","parentContext","_lookup","table","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","listeners","_arrayUnique","Set","_createResolver","scopes","prefixes","rootScopes","getTarget","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_cached","proxy","readKey","needsSubResolver","createSubResolver","Reflect","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","isScriptable","isIndexable","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","_parseObjectDataRadialScale","meta","iScale","_parsing","EPSILON","getPoint","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fb","capControlPoint","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getPositionedStyle","styles","useOffsetPos","shadowRoot","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","offsetX","offsetY","round1","retinaScale","forceRatio","forceStyle","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","formatNumber","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","_itemWidth","overrideTextDirection","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","normalizeSegment","_boundSegment","startBound","endBound","prevValue","inside","subStart","_boundSegments","readStyle","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","styleChanged","prevStyle","animator","_charts","_running","_lastDate","anims","numSteps","initial","currentStep","_refresh","remaining","running","_total","tick","_getAnims","charts","complete","progress","listen","interpolators","c0","Animation","cfg","currentValue","_fn","_loop","_target","_prop","_to","_promises","elapsed","remain","wait","rej","animationOptions","colors","show","animations","hide","Animations","_chart","animatedProps","option","_animateOptions","newOptions","$shared","$animations","_createAnimations","anim","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stackKey","indexValue","subStack","getLastIndexInStack","vScale","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","axis","vAxis","indexScale","valueScale","_top","_bottom","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","DatasetController","_ctx","_cachedDataOpts","getMeta","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","initialize","linkScales","_stacked","addElements","updateIndex","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","datasetElementType","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","getLabels","singleScale","xAxisKey","yAxisKey","getDataElement","updateRangeFromParsed","parsedValue","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","minDefined","maxDefined","getUserBounds","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","updateElement","updateSharedOptions","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","$bar","visibleMetas","curr","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","parseValue","startValue","endValue","barStart","barEnd","_custom","parseArrayOrPrimitive","isFloatBar","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","ruler","_getRuler","firstOpts","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","grouped","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","minBarLength","actualBase","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","percent","thickness","stackIndex","rects","_index_","_value_","beginAtZero","BubbleController","iPixel","vPixel","tooltip","DoughnutController","innerRadius","outerRadius","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","cutout","toPercentage","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","aspectRatio","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_dataset","animationsDisabled","pointCount","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","_datasetIndex","_decimated","animated","spanGaps","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","controllers","abstract","DateAdapter","adapters","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestItems","distanceMetric","useX","useY","deltaX","minDistance","getCenterPoint","getProps","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","getMargins","fitBoxes","boxes","refitBoxes","refit","fullSize","setBoxDims","placeBoxes","userPadding","stackWeight","autoPadding","layouts","addBox","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","updatePos","change","BasePlatform","acquireContext","releaseContext","getMaximumSize","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","createAttachObserver","addedNodes","removedNodes","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","native","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","proxies","$proxies","attach","detach","bbWidth","bbHeight","margins","containerSize","containerStyle","containerBorder","containerPadding","isConnected","tooltipPosition","hasValue","final","defaultRoutes","formatters","numeric","tickValue","notation","delta","maxTick","logDelta","numDecimal","logarithmic","Ticks","newTicks","majorStart","majorEnd","grace","drawBorder","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","beforeUpdate","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","ticksLimit","maxTicksLimit","_tickSize","maxScale","maxChart","majorIndices","numMajorIndices","evenMajorSpacing","factors","avgMajorSpacing","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","getValueForPixel","getDecimalForPixel","getBaseValue","optionTicks","rot","_computeGridLineItems","ticksLength","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","positionAxisID","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","_computeLabelItems","tickAndPadding","hTickAndPadding","lineCount","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","fillRect","findIndex","drawGrid","drawLine","setLineDash","lineDashOffset","lastLineWidth","drawLabels","drawTitle","titleX","titleY","gz","axisID","_maxDigits","TypedRegistry","isForType","isPrototypeOf","parentScope","itemDefaults","routes","propertyParts","sourceName","sourceScope","unregister","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","camelMethod","PluginService","notify","hook","_createDescriptors","descriptor","cancelable","invalidate","_oldCache","_notifyStateChanges","getOpts","pluginOpts","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","defaultScaleOptions","defaultID","initData","keysCached","cachedKeys","addIfFound","Config","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","instances","getChart","moveNumericKeys","intKey","Chart","userConfig","initialCanvas","existingChart","_aspectRatio","_metasets","_lastEvent","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_updateDataset","_drawDatasets","_drawDataset","useClip","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","lastEvent","invalidatePlugins","clipArc","pixelMargin","angleMargin","rThetaToXY","theta","pathArc","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStart","outerEnd","innerStart","innerEnd","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p8","ArcElement","fullCircles","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","lineJoin","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","tension","cubicInterpolationMode","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","_path","_points","_segments","_pointsUpdated","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","segmentOptions","chartContext","baseStyle","addStyle","p0","p0DataIndex","p1DataIndex","_interpolate","segmentMethod","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","outer","maxW","maxH","maxR","enableBorder","addRectPath","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","beforeElementsUpdate","xAxis","decimated","samples","bucketWidth","sampledIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minIndex","maxIndex","startIndex","xMin","dx","intermediateIndex1","intermediateIndex2","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_resolveTarget","propagate","visited","_decodeFill","fillOption","firstCh","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_drawfill","sourcePoints","below","lineOpts","above","clipVertical","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","heightLimit","totalWidth","currentColWidth","currentColHeight","col","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","fontColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","yBoxTop","xBoxLeft","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","onLeave","hoveredItem","sameItem","itemsEqual","plugin_legend","afterEvent","Title","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","WeakMap","plugin_subtitle","positioners","average","eventPosition","nearestElement","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","determineAlignment","getBackgroundPoint","paddingAndSize","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","Tooltip","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","getTitle","beforeTitle","afterTitle","getBeforeBody","getBody","bodyItems","scoped","beforeLabel","afterLabel","getAfterBody","getFooter","beforeFooter","afterFooter","_createItems","itemSort","labelColor","labelPointStyle","labelTextColor","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","bodyColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","labelCount","Decimation","Filler","SubTitle","CategoryScale","_startValue","_valueRange","_addedLabels","addedLabels","addIfString","relativeLabelSize","minSpacing","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","includeBounds","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","rounded","decimalPlaces","LinearScale","isMajor","tickVal","LogarithmicScale","_zero","endExp","endSignificand","significand","lastTick","getTickBackdropHeight","determineLimits","updateLimits","hLimits","vLimits","getTextAlignForAngle","yForAngle","pathRadiusLine","getPointPosition","RadialLinearScale","drawingArea","_pointLabels","_pointLabelItems","valueCount","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","plFont","setCenterPoint","outerDistance","pointLabelPosition","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","pointLabel","distanceFromCenter","getBasePosition","getPointLabelPosition","backdropLeft","backdropTop","backdropWidth","backdropHeight","gridLineOpts","INTERVALS","common","steps","sorter","adapter","_adapter","parser","_parseOpts","determineUnitForAutoTicks","minUnit","addTick","timestamps","ticksFromTimestamps","majorUnit","TimeScale","_majorUnit","_offsets","_normalized","displayFormats","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","_tickFormatFunction","minorFormat","majorFormat","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","construct","Func","_len2","_key2","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","_len4","_key4","_len3","_key3","addToSet","transformCaseFunc","lcElement","cleanArray","newObject","lookupGetter","desc","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","purify","createDOMPurify","DOMPurify","nodeType","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","NodeFilter","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","trustedTypes","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","ownerDocument","trustedTypesPolicy","emptyHTML","createNodeIterator","getElementsByTagName","importNode","afterSanitizeAttributes","afterSanitizeElements","afterSanitizeShadowDOM","beforeSanitizeAttributes","beforeSanitizeElements","beforeSanitizeShadowDOM","uponSanitizeAttribute","uponSanitizeElement","uponSanitizeShadowNode","createHTMLDocument","EXPRESSIONS","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","tagCheck","attributeCheck","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","ADD_FORBID_CONTENTS","tbody","TRUSTED_TYPES_POLICY","createHTML","createScriptURL","purifyHostElement","createPolicy","ATTR_NAME","hasAttribute","policyName","scriptUrl","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","_removeAttribute","attribute","getAttributeNode","_initDocument","doc","leadingWhitespace","dirtyPayload","parseFromString","createDocument","childNodes","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","nodeName","textContent","namespaceURI","_isNode","_executeHooks","currentNode","_sanitizeElements","tagName","allowedTags","firstElementChild","_isBasicCustomElement","childClone","__removalCount","parentTagName","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","forceKeepAttr","attr","getAttributeType","_sanitizeShadowDOM","shadowNode","shadowIterator","nextNode","sanitize","importedNode","returnNode","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","tag","addHook","entryPoint","hookFunction","removeHook","removeHooks","removeAllHooks","ReflectOwnKeys","ReflectApply","NumberIsNaN","EventEmitter","emitter","errorListener","eventTargetAgnosticAddListener","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","existing","warning","newListener","emit","warned","onceWrapper","fired","wrapFn","_onceWrap","unwrap","evlistener","arrayClone","listenerCount","wrapListener","setMaxListeners","getMaxListeners","doError","addListener","prependListener","prependOnceListener","list","originalListener","removeAllListeners","rawListeners","eventNames","baseRange","isIterateeCall","toFinite","fromRight","nativeCeil","nativeMax","isArrayLike","isIndex","isLength","baseGetTag","freeGlobal","freeSelf","objectProto","nativeObjectToString","isOwn","unmasked","reIsUint","toNumber","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","trimmedEndIndex","reTrimStart","reWhitespace","isObjectLike","rnds8","DNS","hashfunc","generateUUID","namespace","_namespace","unescape","_stringify","filenameIsInApp","isNative","getModule","FILENAME_MATCH","FULL_MATCH","lineMatch","functionName","typeName","methodStart","objectEnd","in_app","_oldOnErrorHandler","addGlobalErrorInstrumentationHandler","instrumentError","column","handlerData","__SENTRY_LOADER__","__SENTRY_INSTRUMENTED__","_oldOnUnhandledRejectionHandler","addGlobalUnhandledRejectionInstrumentationHandler","instrumentUnhandledRejection","onunhandledrejection","makePromiseBuffer","task","taskProducer","drain","capturedSetTimeout","applyAggregateErrorsToEvent","exceptionFromErrorImplementation","maxValueLimit","originalException","exceptions","maxValueLength","aggregateExceptionsFromError","prevExceptions","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","is_exception_group","exception_id","parent_id","sham","iterator","LuxonError","_Error","InvalidDateTimeError","_LuxonError","toMessage","InvalidIntervalError","_LuxonError2","InvalidDurationError","_LuxonError3","ConflictingSpecificationError","_LuxonError4","InvalidUnitError","_LuxonError5","InvalidArgumentError","_LuxonError6","ZoneIsAbstractError","_LuxonError7","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hour12","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","isInteger","hasIntl","hasFormatToParts","formatToParts","hasRelative","RelativeTimeFormat","bestBy","best","pair","integerBetween","padStart","repeat","parseInteger","parseMillis","roundTo","digits","towardZero","trunc","objToLocalTS","parseZoneInfo","offsetFormat","intlOpts","modified","intl","without","signedOffset","offHourStr","offMinuteStr","offHour","offMin","asNumber","numericValue","normalizeObject","normalizer","nonUnitKeys","formatOffset","timeObject","ianaRegex","monthsLong","monthsNarrow","weekdaysLong","weekdaysNarrow","meridiems","erasLong","erasShort","stringifyTokens","splits","tokenToString","_macroTokenToFormatOpts","DD","DDDD","ttt","tttt","TT","TTT","TTTT","ff","fff","ffff","FF","FFF","FFFF","Formatter","formatOpts","loc","systemLoc","parseFormat","fmt","currentFull","bracketed","macroTokenToFormatOpts","formatWithSystemDefault","redefaultToSystem","dtFormatter","formatDateTime","formatDateTimeParts","forceSimple","padTo","numberFormatter","formatDateTimeFromString","knownEnglish","listingMode","useDateTimeFormatter","outputCalendar","extract","isOffsetFixed","allowZ","offsetName","weekNumber","formatDurationFromString","lildur","tokenToField","realTokens","found","_ref","collapsed","shiftTo","mapped","Invalid","explanation","Zone","otherZone","singleton","LocalZone","_Zone","matchingRegex","dtfCache","typeToPos","ianaZoneCache","IANAZone","isValidZone","isValidSpecifier","parseGMTOffset","specifier","dtf","_ref2","filled","_formatted$i","fMonth","fDay","asTS","over","singleton$1","FixedOffsetZone","instance","utcInstance","parseSpecifier","InvalidZone","normalizeZone","defaultZone","lowered","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","throwOnInvalid","Settings","resetCaches","numberingSystem","intlDTCache","getCachedDTF","locString","intlNumCache","intlRelCache","sysLocaleCache","listStuff","defaultOK","englishFn","intlFn","PolyNumberFormatter","useGrouping","minimumIntegerDigits","inf","PolyDateFormatter","universal","gmtOffset","offsetZ","isOffsetZoneSupported","DateTime","fromMillis","toJSDate","tokenFormat","knownFormat","dateTimeHuge","PolyRelFormatter","isEnglish","rtf","_opts","cacheKeyOpts","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","numbering","specifiedLocale","_parseLocaleString","localeStr","uIndex","smaller","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","fromOpts","defaultToEN","computedSys","hasFTP","isActuallyEn","hasNoWeirdness","alts","redefaultToEN","formatStr","mapMonths","mapWeekdays","_this4","matching","fastNumbers","relFormatter","combineRegexes","full","combineExtractors","extractors","mergedVals","mergedZone","_ex","_patterns","_patterns$_i","extractor","simpleParse","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","extractISOYmd","extractISOTime","extractISOOffset","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","weekStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","fromStrings","extractRFC2822","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOYmdTimeOffsetAndIANAZone","extractISOTimeOffsetAndIANAZone","lowOrderMatrix","casualMatrix","accurateMatrix","daysInYearAccurate","daysInMonthAccurate","orderedUnits","reverseUnits","conf","conversionAccuracy","matrix","fromMap","fromUnit","toMap","toUnit","conv","accurate","isLuxonDuration","normalizeUnit","fromISO","_parseISODuration","fromISOTime","_parseISOTimeOnly","toFormat","fmtOpts","includeConfig","toISO","toISOTime","suppressMilliseconds","suppressSeconds","includePrefix","friendlyDuration","mapUnits","_Object$keys","reconfigure","vals","lastUnit","built","own","ak","_i2","_Object$keys2","_step3","_iterator3","durationish","INVALID$1","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","validateStartEnd","_split","startIsValid","endIsValid","_dur","isInterval","toDuration","hasSame","splitAt","dateTimes","results","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","intervals","_intervals$sort$reduc","sofar","xor","_Array$prototype","currentCount","ends","toISODate","_temp2","_ref3$separator","invalidReason","mapEndpoints","Info","hasDST","setZone","isValidIANAZone","_ref$locale","_ref$numberingSystem","_ref$locObj","locObj","_ref$outputCalendar","monthsFormat","_ref2$locale","_ref2$numberingSystem","_ref2$locObj","_ref2$outputCalendar","_temp3","_ref3","_ref3$locale","_ref3$numberingSystem","_ref3$locObj","weekdaysFormat","_temp4","_ref4","_ref4$locale","_ref4$numberingSystem","_ref4$locObj","_temp5","_ref5$locale","_temp6","_ref6$locale","intlTokens","dayDiff","earlier","later","utcDayStart","toUTC","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegex","intUnit","post","deser","_numberingSystemsUTF","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","groups","simple","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","dummyDateTimeCache","explainFromTokens","part","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","_ref5","disqualifyingUnit","_buildRegex","regexString","_match","matchIndex","rawMatches","_ref6","nonLeapLadder","leapLadder","unitOutOfRange","computeOrdinal","uncomputeOrdinal","month0","gregorianToWeek","gregObj","weekToGregorian","weekData","weekdayOfJan4","yearInDays","_uncomputeOrdinal","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","_uncomputeOrdinal2","hasInvalidGregorianData","validYear","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","INVALID$2","MAX_DATE","unsupportedZone","possiblyCachedWeekData","inst","fixOffset","localTS","utcGuess","o2","o3","tsToObj","objToTS","adjustTime","oPre","_fixOffset","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","toTechTimeFormat","_ref$suppressSeconds","_ref$suppressMillisec","includeOffset","_ref$includePrefix","_ref$includeZone","includeZone","_ref$spaceZone","spaceZone","_ref$format","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedUnits$1","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","quickDT","tsNow","_objToTS","diffRelative","calendary","differ","isLuxonDateTime","fromJSDate","zoneToUse","fromSeconds","offsetProvis","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","defaultValues","useWeekData","objNow","foundFirst","higherOrderInvalid","validWeek","validWeekday","validOrdinal","_objToTS2","_parseISODate","fromRFC2822","_parseRFC2822Date","fromHTTP","_parseHTTPDate","fromFormat","_opts$locale","_opts$numberingSystem","_parseFromTokens","_explainFromTokens","fromSQL","_parseSQL","isDateTime","resolvedLocaleOpts","_Formatter$create$res","toLocal","_ref3$keepLocalTime","_ref3$keepCalendarTim","keepCalendarTime","newTS","offsetGuess","mixed","settingWeekStuff","_objToTS4","normalizedUnit","_this$plus","toLocaleString","toLocaleParts","_ref5$format","toISOWeekDate","_ref6$suppressMillise","_ref6$suppressSeconds","_ref6$includeOffset","_ref6$includePrefix","_ref6$format","toRFC2822","toHTTP","toSQLDate","toSQLTime","_ref7","_ref7$includeOffset","_ref7$includeZone","toSQL","toSeconds","toBSON","otherDateTime","durOpts","otherIsLater","diffed","_cursor$plus3","_highOrderDiffs","lowestOrder","highWater","_differs","_differs$_i","_cursor$plus","_cursor$plus2","remainingMillis","lowerOrderUnits","_Duration$fromMillis","diffNow","otherZoneDateTime","toRelative","toRelativeCalendar","fromFormatExplain","_options$locale","_options$numberingSys","fromStringExplain","dateTimeish","VERSION","objectsAreEqual","TYPE","SKELETON_TYPE","isLiteralElement","isArgumentElement","argument","isNumberElement","isDateElement","isTimeElement","isSelectElement","select","isPluralElement","isPoundElement","pound","isTagElement","isNumberSkeleton","isDateTimeSkeleton","createLiteralElement","createNumberElement","HI","O4","VG","Wh","aV","mD","qx","uf","wD","yx","SyntaxError","pegParse","DATE_TIME_REGEX","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","g1","g2","minimumSignificantDigits","maximumSignificantDigits","parseSign","signDisplay","currencySign","parseConciseScientificAndEngineeringStem","stem","parseNotationOptions","opt","parseNumberSkeleton","tokens_1","compactDisplay","currencyDisplay","unitDisplay","g3","g4","g5","signOpts","conciseScientificAndEngineeringOpts","expected","buildMessage","literalEscape","classEscape","describeExpectation","expectation","escapedParts","inverted","expected1","descriptions","found1","peg$result","peg$FAILED","peg$startRuleFunctions","peg$parsestart","peg$startRuleFunction","peg$c0","ignoreTag","peg$c1","peg$c2","peg$c3","peg$c4","peg$literalExpectation","peg$c5","peg$c6","peg$c7","messageText","insertLocation","peg$c8","peg$c9","peg$c10","peg$c11","peg$otherExpectation","peg$c12","close","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$classExpectation","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","parsedOptions","shouldParseSkeleton","peg$c38","peg$c39","peg$c40","skeleton","peg$c41","messageCtx","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","hourCycle","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","peg$c66","peg$c67","peg$c68","pluralType","optionLocation","peg$c69","peg$c70","peg$c71","peg$c72","peg$c73","peg$c74","peg$c75","peg$c76","peg$c77","peg$c78","peg$c79","peg$c80","peg$c81","peg$c82","peg$c83","peg$c84","peg$c85","peg$c86","peg$c87","peg$c88","peg$c90","peg$c91","peg$c92","peg$c93","peg$c94","escapedChar","quotedChars","peg$c95","isInPluralOption","peg$c96","peg$c97","peg$c98","peg$c99","peg$c100","peg$c101","peg$c102","peg$c103","peg$c104","peg$c105","peg$c106","peg$c107","peg$c108","peg$c109","peg$c110","peg$c111","peg$currPos","peg$savedPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","peg$computeLocation","location1","text1","ignoreCase","peg$computePosDetails","details","startPos","startPosDetails","endPosDetails","peg$fail","peg$parsemessage","peg$parsemessageElement","s2","s3","peg$parseselfClosingTag","peg$parseopeningTag","peg$parseclosingTag","peg$parsemessageText","s5","peg$parse_","peg$parseargNameOrNumber","s7","s9","s10","s11","peg$parsenumberSkeletonToken","peg$parsedateTimeSkeletonLiteral","peg$parsedateTimeSkeletonPattern","s13","s14","s15","peg$parsenumber","peg$parsepluralOption","peg$parseselectOption","peg$parsedoubleApostrophes","peg$parsequotedString","peg$parseunquotedString","peg$parsenonTagStartingAngleBracket","s4","peg$parsevalidTag","peg$parsenumberSkeletonId","peg$parsewhiteSpace","peg$parsenumberSkeletonTokenOption","s6","peg$parseargName","peg$parsepatternSyntax","peg$parseargNumber","captureLocation","PLURAL_HASHTAG_REGEX","normalizeHashtagInPlural","els","matchingLiteralElIndex","literalEl","el_1","newEls","passthrough","Observable","toLink","ApolloLink","isTerminating","leftLink","rightLink","operation","execute","starting","transformedOperation","variables","extensions","operationName","OPERATION_FIELDS","firstLink","nextLink","onError","setOnError","$P","Ep","Sq","UV","pE","STACKTRACE_FRAME_LIMIT","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","skipFirst","cleanedLine","stripSentryFramesAndReverse","stackParserFromStackParserOptions","localStack","defaultFunctionName","nodeStackLineParser","Breadcrumbs","BrowserClient","BrowserProfilingIntegration","Gb","BrowserTracing","hb","Dedupe","Feedback","Ah","FunctionToString","GlobalHandlers","HttpContext","Hub","InboundFilters","Integrations","$b","LinkedErrors","ModuleMetadata","Replay","ReplayCanvas","SDK_VERSION","Scope","TryCatch","addBreadcrumb","addEventProcessor","addGlobalEventProcessor","addIntegration","addTracingExtensions","breadcrumbsIntegration","browserApiErrorsIntegration","captureEvent","captureException","captureMessage","captureUserFeedback","chromeStackLineParser","configureScope","continueTrace","createTransport","createUserFeedbackEnvelope","dedupeIntegration","defaultIntegrations","defaultRequestInstrumentationOptions","sb","defaultStackLineParsers","defaultStackParser","eventFromException","feedbackIntegration","_h","forceLoad","functionToStringIntegration","geckoStackLineParser","getActiveSpan","getActiveTransaction","getCurrentHub","getCurrentScope","getDefaultIntegrations","getHubFromCarrier","globalHandlersIntegration","httpContextIntegration","inboundFiltersIntegration","instrumentOutgoingRequests","isInitialized","lastEventId","linkedErrorsIntegration","makeBrowserOfflineTransport","yb","makeFetchTransport","makeMain","makeMultiplexedTransport","makeXHRTransport","moduleMetadataIntegration","onLoad","onProfilingStartRouteTransaction","Hb","opera10StackLineParser","opera11StackLineParser","parameterize","replayCanvasIntegration","replayIntegration","sendFeedback","oh","setCurrentClient","setExtra","setExtras","setMeasurement","setTag","setTags","setUser","showReportDialog","spanStatusfromHttpCode","startInactiveSpan","startSpan","startSpanManual","startTransaction","winjsStackLineParser","withIsolationScope","withScope","DEFAULT_MAX_STRING_LENGTH","elem","currentElem","MAX_TRAVERSE_HEIGHT","sepLength","nextStr","keyAttrs","maxStringLength","_htmlElementAsString","classes","sentryComponent","keyAttrPairs","keyAttr","keyAttrPair","allowedAttrs","getComponentName","getGlobalEventProcessors","notifyEventProcessors","processors","processor","DEFAULT_ENVIRONMENT","makeSession","startingTime","sid","started","ignoreDuration","did","abnormal_mechanism","attrs","environment","ipAddress","user_agent","updateSession","email","username","closeSession","getRootSpan","BAGGAGE_HEADER_NAME","SENTRY_BAGGAGE_KEY_PREFIX","SENTRY_BAGGAGE_KEY_PREFIX_REGEX","MAX_BAGGAGE_STRING_LENGTH","dynamicSamplingContextToSentryBaggageHeader","baggageHeader","objectValue","currentIndex","baggageEntry","newBaggageHeader","dscKey","dscValue","baggageHeaderToObject","keyOrValue","baggageObject","currBaggageObject","TRACE_FLAG_SAMPLED","spanToTraceContext","span_id","trace_id","spanContext","parent_span_id","origin","spanToJSON","spanToTraceHeader","spanIsSampled","spanTimeInputToSeconds","ensureTimestampInSeconds","getSpanJSON","traceFlags","getDynamicSamplingContextFromClient","public_key","getDsn","user_segment","getUser","getDynamicSamplingContextFromSpan","txn","v7FrozenDsc","_frozenDynamicSamplingContext","sampleRate","maybeSampleRate","sample_rate","jsonSpan","applyScopeDataToEvent","fingerprint","breadcrumbs","contexts","transactionName","cleanedExtra","cleanedTags","cleanedUser","cleanedContexts","rootSpan","mergedBreadcrumbs","mergeScopeData","mergeData","eventProcessors","attachments","mergeAndOverwriteScopeData","mergeVal","_notifyingListeners","_scopeListeners","_eventProcessors","_breadcrumbs","_attachments","_user","_tags","_extra","_contexts","_sdkProcessingMetadata","_propagationContext","generatePropagationContext","newScope","_level","_span","_session","_transactionName","_fingerprint","_requestSession","_client","setClient","addScopeListener","_notifyScopeListeners","getRequestSession","setRequestSession","requestSession","setFingerprint","setLevel","setTransactionName","setSpan","getSpan","getTransaction","setSession","getSession","captureContext","updatedScope","breadcrumb","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","getLastBreadcrumb","clearBreadcrumbs","addAttachment","getAttachments","getScopeData","clearAttachments","applyToEvent","additionalEventProcessors","setSDKProcessingMetadata","newData","setPropagationContext","getPropagationContext","API_VERSION","DEFAULT_BREADCRUMBS","isolationScope","_version","assignedScope","assignedIsolationScope","bindClient","_isolationScope","isOlderThan","getStackTop","setupIntegrations","pushScope","getStack","popScope","maybePromiseResult","getIsolationScope","_lastEventId","beforeBreadcrumb","finalBreadcrumb","oldHub","getIntegration","integration","customSamplingContext","_callExtensionMethod","traceHeaders","captureSession","endSession","_sendSessionUpdate","startSession","currentSession","shouldSendDefaultPii","sendDefaultPii","sentry","getMainCarrier","hub","setHubOnCarrier","acs","carrier","hasWeakSet","WeakSet","debugIdStackParserCache","captureContextKeys","runWithAsyncContext","currentScope","installedIntegrations","getIntegrationsToSetup","userIntegrations","integrations","isDefaultInstance","finalIntegrations","integrationsByName","currentInstance","existingInstance","debugIndex","debugInstance","setupIntegration","integrationIndex","setupOnce","preprocessEvent","processEvent","convertIntegrationFnToClass","originalFunctionToString","INTEGRATION_NAME","_functionToStringIntegration","DEFAULT_IGNORE_ERRORS","DEFAULT_IGNORE_TRANSACTIONS","_inboundFiltersIntegration","_hint","clientOptions","mergedOptions","internalOptions","allowUrls","denyUrls","ignoreErrors","disableErrorDefaults","ignoreTransactions","disableTransactionDefaults","ignoreInternal","possibleMessages","lastException","_getEventFilterUrl","oO","filenameMetadataMap","parsedStacks","getMetadataForUrl","_sentryModuleMetadata","_moduleMetadataIntegration","module_metadata","SENTRY_API_VERSION","getBaseApiEndpoint","getEnvelopeEndpointWithUrlEncodedAuth","tunnelOrOptions","_metadata","sentry_key","sentry_version","sentry_client","NAME_AND_TAG_KEY_NORMALIZATION_REGEX","TAG_VALUE_NORMALIZATION_REGEX","ALREADY_SEEN_ERROR","BaseClient","_integrations","_integrationsInitialized","_numProcessing","_outcomes","_hooks","_dsn","_transport","transport","recordDroppedEvent","transportOptions","_process","_captureEvent","eventMessage","promisedEvent","sendSession","getSdkMetadata","getTransport","metricsAggregator","_isClientDoneProcessing","clientFinished","transportFlushed","getEventProcessors","eventProcessor","forceInitialize","_isEnabled","_setupIntegrations","getIntegrationById","integrationId","getIntegrationByName","integrationName","sendEvent","eventType","packages","envelopeHeaders","_sendEnvelope","sendResponse","_event","sendClientReports","captureAggregateMetrics","metricBucketItems","metricsEnvelope","tagEntries","maybeTags","metric","metricType","_updateSessionFromEvent","crashed","errored","sessionNonTerminal","ticked","setInterval","clearInterval","_prepareEvent","normalizeMaxBreadth","prepared","integrationNames","debugIdMap","_sentryDebugIds","debugIdStackFramesCache","cachedDebugIdStackFrameCache","filenameDebugIdMap","debugIdStackTrace","parsedStack","cachedParsedStack","stackFrame","debug_id","finalScope","clientEventProcessors","abs_path","debug_meta","code_file","maxBreadth","spans","_processEvent","finalEvent","sentryError","isTransaction","isTransactionEvent","beforeSendLabel","dataCategory","__sentry__","beforeSend","beforeSendTransaction","beforeSendResult","invalidValueError","processedEvent","transactionInfo","transaction_info","_clearOutcomes","outcomes","quantity","maybeHub","extractTraceparentData$1","errorsInstrumented","errorCallback","activeTransaction","setStatus","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SpanRecorder","maxlen","_maxlen","spanRecorder","Span","_traceId","_spanId","_startTime","startTimestamp","_attributes","instrumenter","_parentSpanId","_sampled","_status","endTimestamp","_endTime","startChild","childSpan","logMessage","_logMessage","setAttributes","setHttpStatus","httpStatus","spanStatus","setName","isSuccess","toTraceparent","toContext","_getData","updateWithContext","getTraceContext","start_timestamp","isRecording","hasAttributes","Transaction","transactionContext","_measurements","_hub","_trimEnd","trimEnd","incomingDynamicSamplingContext","newName","spanMetadata","initSpanRecorder","newMetadata","timestampInS","_finishTransaction","getDynamicSamplingContext","setHub","finishedSpans","endTimes","measurements","TRACING_DEFAULTS","idleTimeout","finalTimeout","heartbeatInterval","IDLE_TRANSACTION_FINISH_REASONS","IdleTransactionSpanRecorder","_pushActivity","_popActivity","transactionSpanId","originalEnd","IdleTransaction","_idleHub","_idleTimeout","_finalTimeout","_heartbeatInterval","_onScope","delayAutoFinishUntilSignal","activities","_heartbeatCounter","_finished","_idleTimeoutCanceledPermanently","_beforeFinishCallbacks","_finishReason","_autoFinishAllowed","_restartIdleTimeout","endTimestampInS","spanStartedBeforeTransactionFinish","timeoutWithMarginOfError","spanEndedBeforeFinalTimeout","stringifiedSpan","registerBeforeFinishCallback","pushActivity","popActivity","_pingHeartbeat","cancelIdleTimeout","restartOnChildSpanChange","_idleTimeoutID","setFinishReason","sendAutoFinishSignal","_beat","heartbeatString","_prevHeartbeatString","hasTracingEnabled","maybeOptions","__SENTRY_TRACING__","enableTracing","sampleTransaction","samplingContext","tracesSampler","tracesSampleRate","rate","_startTransaction","configInstrumenter","transactionInstrumenter","_experiments","maxSpans","startIdleTransaction","onScope","handleCallbackErrors","onFinally","afterFinish","parentSpan","normalizeContext","activeSpan","createChildSpanOrTransaction","finishAndSetSpan","DEFAULT_TRANSPORT_BUFFER_SIZE","bufferSize","rateLimits","filteredEnvelopeItems","envelopeItemDataCategory","getEventForEnvelopeItem","filteredEnvelope","recordEnvelopeLoss","__sentry__baseTransport__","eventFromEnvelope","fallbackTransport","otherTransports","validatedDsn","transports","getEvent","eventTypes","allTransports","METRIC_MAP","_last","_max","_count","rv","BrowserMetricsAggregator","_buckets","_interval","unsanitizedName","unsanitizedTags","maybeFloatTimestamp","bucketKey","localeCompare","bucketItem","metricBuckets","metricsAggregatorIntegration","_metricsAggregatorIntegration","addToMetricsAggregator","metricTags","distribution","gauge","MetricsAggregator","ignoreOnError","shouldIgnoreOnError","wrapper","__sentry_wrapped__","sentryWrapped","wrappedArguments","extractMessage","eventFromError","popSize","reactMinifiedRegexp","eventFromString","isUnhandledRejection","domException","getNonErrorObjectExceptionValue","captureType","SENTRY_SDK_SOURCE","visibilityState","_flushOutcomes","discarded_events","supportsFetch","isNativeFetch","cachedFetchImpl","nativeFetch","fetchImpl","sandbox","contentWindow","pendingBodySize","pendingCount","requestSize","requestOptions","referrerPolicy","keepalive","fetchOptions","XHR_READYSTATE_DONE","xhr","onreadystatechange","UNKNOWN_FUNCTION","createFrame","chromeRegex","chromeEvalRegex","subMatch","extractSafariExtensionDetails","geckoREgex","geckoEvalRegex","winjsRegex","opera10Regex","opera11Regex","isSafariExtension","isSafariWebExtension","lastHref","addHistoryInstrumentationHandler","instrumentHistory","chrome","isChromePackagedApp","app","runtime","hasHistoryApi","pushState","oldOnPopState","onpopstate","historyReplacementFunction","originalHistoryFunction","instrumentConsole","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","__sentry_instrumentation_handlers__","handlerForType","refCount","originalRemoveEventListener","globalListener","_sentryCaptured","isContentEditable","_sentryId","SENTRY_XHR_DATA_KEY","addXhrInstrumentationHandler","instrumentXHR","xhrproto","originalOpen","request_headers","__sentry_own_request__","onreadystatechangeHandler","xhrInfo","status_code","readyStateArgs","setRequestHeaderArgs","originalSend","sentryXhrData","addFetchInstrumentationHandler","instrumentFetch","EdgeRuntime","originalFetch","fetchArgs","getUrlFromResource","hasProp","fetchData","resource","validSeverityLevels","_breadcrumbsIntegration","componentName","serializeAttribute","parsedLoc","parsedFrom","parsedTo","_dedupeIntegration","previousEvent","currentEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","previousException","_getExceptionFromEvent","currentException","currentFrames","_getFramesFromEvent","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","_globalHandlersIntegration","stackTraceLimit","_enhanceEventWithInitialFrame","globalHandlerLog","ev0","ev0s","ev0sf","_httpContextIntegration","Referer","_linkedErrorsIntegration","DEFAULT_EVENT_TARGET","_browserApiErrorsIntegration","eventTarget","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","originalCallback","wrapOptions","originalFunction","globalObject","wrappedEventHandler","originalEventHandler","__SENTRY_RELEASE__","SENTRY_RELEASE","autoSessionTracking","clientClass","initialScope","script","dsnLike","dialogOptions","endpoint","encodedOptions","onClose","reportDialogClosedMessageHandler","injectionPoint","wrap$1","_optionalChain","ops","lastAccessLHS","removeTrailingSlash","isBrowser","getNavigationEntry","__WEB_VITALS_POLYFILL__","getEntriesByType","getNavigationEntryFromPerformanceTiming","navigation","navigationEntry","entryType","getActivationStart","navEntry","activationStart","onHidden","onHiddenOrPageHide","firstHiddenTime","PerformanceObserver","supportedEntryTypes","getEntries","buffered","reportedMetricIDs","onLCP","onReport","visibilityWatcher","prerendering","initMetric","navigationType","rating","report","handleEntries","lastEntry","bindReporter","reportAllChanges","forceReport","stopListening","takeRecords","_previousLcp","instrumentLcp","getCleanupCallback","REPLAY_SESSION_KEY","REPLAY_EVENT_NAME","UNABLE_TO_SEND_REPLAY","NETWORK_BODY_MAX_SIZE","CONSOLE_ARG_MAX_SIZE","REPLAY_MAX_EVENT_BUFFER_SIZE","_optionalChain$5","NodeType$1","isShadowRoot","_2","isNativeShadowDom","stringifyStylesheet","cssRules","cssText","stringifyRule","rule","importStringified","styleSheet","statement","layerName","supportsText","media","mediaText","selectorText","NodeType","Document","DocumentType","Text","CDATA","Comment","Mirror","idNodeMap","nodeMetaMap","_3","_4","_5","getNode","removeNodeFromMap","childNode","hasNode","oldNode","shouldMaskInput","maskInputOptions","maskInputValue","isMasked","maskInputFn","ORIGINAL_ATTRIBUTE_NAME","getInputType","getInputValue","tagNameRegex","IGNORED_NODE","genId","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","quote1","path1","quote2","path2","path3","filePath","maybeQuote","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","absoluteToDoc","attributeValue","getHref","transformAttribute","maskAttributeFn","collectCharacters","regEx","chars","descriptorsStr","inParens","ignoreAttribute","distanceToMatch","matchPredicate","ELEMENT_NODE","createMatchPredicate","selector","eIndex","needMaskingText","maskTextClass","maskTextSelector","unmaskTextClass","unmaskTextSelector","maskAllText","parentElement","maskDistance","unmaskDistance","lowerIfExists","maybeAttr","serializeNodeWithId","blockClass","blockSelector","unblockSelector","skipChild","inlineStylesheet","maskTextFn","slimDOMOptions","dataURLOptions","inlineImages","recordCanvas","onSerialize","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","keepIframeSrcFn","newlyAddedElement","preserveWhiteSpace","_serializedNode","rootId","docId","DOCUMENT_NODE","compatMode","DOCUMENT_TYPE_NODE","publicId","systemId","needBlock","processedTagName","styleSheets","_cssText","sheet","innerText","checked","forceMask","selected","__context","originalGetImageData","rr_dataURL","quality","canvasDataURL","blankCanvas","oldValue","recordInlineImage","naturalWidth","naturalHeight","currentSrc","rr_mediaState","rr_mediaCurrentTime","rr_scrollLeft","rr_scrollTop","class","rr_width","rr_height","isCustomElement","contentDocument","rr_src","customElements","isSVG","ownerSVGElement","isCustom","TEXT_NODE","isStyle","isScript","isTextarea","nextSibling","previousSibling","_6","_7","_8","textarea","CDATA_SECTION_NODE","COMMENT_NODE","comment","headFavicon","headMetaDescKeywords","headMetaSocial","headMetaRobots","headMetaHttpEquiv","headMetaAuthorship","headMetaVerification","serializedNode","recordChild","isShadowHost","headWhitespace","bypassOptions","childN","serializedChildNode","isShadow","iframeEl","win","timer","blankUrl","iframeDoc","serializedIframeNode","styleSheetLoadTimeout","styleSheetLoaded","serializedLinkNode","_optionalChain$4","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","throttle$1","leading","trailing","hookSetter","isRevoked","replacement","__rrweb_original__","cachedRequestAnimationFrameImplementation","nowTimestamp","getWindowScroll","scrollingElement","pageXOffset","pageYOffset","_9","_10","_11","_12","_13","_14","getWindowHeight","innerHeight","getWindowWidth","innerWidth","isBlocked","checkAncestors","blockedPredicate","isUnblocked","blockDistance","unblockDistance","isIgnored","isAncestorRemoved","legacy_isTouchEvent","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","_18","StyleSheetMirror","styleIDMap","idStyleMap","newId","getShadowHost","shadowHost","_19","getRootNode","_20","_21","DOCUMENT_FRAGMENT_NODE","inDom","rootShadowHost","EventType","EventType2","DomContentLoaded","Load","FullSnapshot","IncrementalSnapshot","Meta","Custom","Plugin","IncrementalSource","IncrementalSource2","Mutation","MouseMove","MouseInteraction","Scroll","ViewportResize","Input","TouchMove","MediaInteraction","StyleSheetRule","CanvasMutation","Font","Log","Drag","StyleDeclaration","Selection","AdoptedStyleSheet","CustomElement","MouseInteractions","MouseInteractions2","MouseUp","MouseDown","Click","ContextMenu","DblClick","Focus","Blur","TouchStart","TouchMove_Departed","TouchEnd","TouchCancel","PointerTypes","PointerTypes2","Mouse","Pen","Touch","_optionalChain$3","isNodeInLinkedList","DoubleLinkedList","tail","addNode","__ln","removeNode","moveKey","MutationBuffer","frozen","locked","texts","removes","mapRemoves","movedMap","addedSet","movedSet","droppedSet","processMutations","mutations","processMutation","adds","addedIds","addList","getNextId","nextId","pushAdd","currentN","iframeManager","addIframe","stylesheetManager","trackLinkElement","shadowDomManager","addShadowRoot","iframe","childSn","attachIframe","observeAttachShadow","attachLinkElement","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","mutationCb","unattachedDoc","attributeName","isInputMasked","pname","newPriority","genAdds","nodeId","deepDelete","processedNodeManager","inOtherBuffer","targetId","canvasManager","unfreeze","lock","unlock","addsSet","_isParentRemoved","_isAncestorInSet","errorHandler","callbackWrapper","rrwebWrapped","_optionalChain$2","mutationBuffers","getEventTarget","composedPath","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","__rrMutationObserver","angularZoneSymbol","__symbol__","onMutation","attributeOldValue","characterDataOldValue","initScrollObserver","scrollCb","sampling","defaultView","scrollLeftTop","scroll","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isTrusted","isChecked","cbWithDedup","querySelectorAll","lastInputValue","currentWindow","propertyDescriptor","HTMLInputElement","hookProperties","HTMLSelectElement","HTMLTextAreaElement","HTMLOptionElement","getNestedCSSRulePositions","childRule","hasNestedCSSRule","parentRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","CSSConditionRule","parentStyleSheet","getIdAndStyleId","styleMirror","ownerNode","initAdoptedStyleSheetObserver","hostId","patchTarget","ShadowRoot","originalPropertyDescriptor","sheets","_15","_16","adoptStyleSheets","initObservers","mutationObserver","mousemoveHandler","mousemoveCb","callbackThreshold","mousemoveCallback","timeBaseline","wrappedCb","totalOffset","timeOffset","updatePosition","DragEvent","MouseEvent","mouseInteractionHandler","mouseInteractionCb","mouseInteraction","disableMap","currentPointerType","eventKey","pointerType","thisEventKey","PointerEvent","scrollHandler","viewportResizeHandler","viewportResizeCb","lastH","lastW","inputHandler","mediaInteractionHandler","mediaInteractionCb","volume","playbackRate","styleSheetObserver","styleSheetRuleCb","CSSStyleSheet","insertRule","argumentsList","deleteRule","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","adoptedStyleSheetObserver","styleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","CSSStyleDeclaration","_17","removeProperty","fontObserver","collectFonts","fontCb","fontMap","originalFontFace","FontFace","fontFace","fontSource","restoreHandler","fonts","selectionObserver","param","selectionCb","updateSelection","selection","getSelection","isCollapsed","rangeCount","getRangeAt","startContainer","startOffset","endContainer","endOffset","customElementObserver","customElementCb","pluginHandlers","CrossOriginIframeMirror","generateIdFn","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","getRemoteId","getRemoteIds","_optionalChain$1","IframeManagerNoop","crossOriginIframeMirror","crossOriginIframeRootIdMap","addLoadListener","IframeManager","iframes","crossOriginIframeMap","wrappedEmit","recordCrossOriginIframes","crossOriginIframeStyleMirror","handleMessage","loadListener","isAttachIframe","adoptedStyleSheets","crossOriginMessageEvent","transformedEvent","transformCrossOriginEvent","isCheckout","replaceIdOnNode","patchRootIdOnNode","replaceIds","replaceStyleIds","iframeMirror","ShadowDomManagerNoop","ShadowDomManager","shadowDoms","restoreHandlers","patchAttachShadow","iframeElement","manager","CanvasManagerNoop","snapshot","StylesheetManager","trackedLinkElements","adoptedStyleSheetCb","linkEl","trackStylesheetInLinkElement","adoptedStyleSheetData","styleIds","CSSRule","ProcessedNodeManager","nodeMap","periodicallyClear","requestAnimationFrameImplementation","onRequestAnimationFrame","thisBuffer","wrapEvent","eWithTime","_takeFullSnapshot","checkoutEveryNms","checkoutEveryNth","maskAllInputs","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordAfter","getCanvasManager","registerErrorHandler","inEmittingFrame","passEmitsToParent","tel","radio","checkbox","lastFullSnapshotEvent","NodeList","DOMTokenList","incrementalSnapshotCount","exceedCount","exceedTime","takeFullSnapshot","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","__RRWEB_EXCLUDE_IFRAME__","getMirror","nodeMirror","getCanvasManagerFn","__RRWEB_EXCLUDE_SHADOW_DOM__","slimDOM","initialOffset","canvasMutationCb","unregisterErrorHandler","timestampToMs","timestampToS","addBreadcrumbEvent","triggerUserActivity","checkAndHandleExpiredSession","addUpdate","throttledAddEvent","INTERACTIVE_SELECTOR","getClosestInteractive","closest","getClickTargetNode","getTargetNode","ClickDetector","slowClickConfig","_addBreadcrumbEvent","_lastMutation","_lastScroll","_clicks","_threshold","_scollTimeout","scrollTimeout","_replay","_ignoreSelector","addListeners","cleanupWindowOpen","nowInSeconds","originalWindowOpen","_teardown","removeListeners","_checkClickTimeout","handleClick","SLOW_CLICK_TAGS","newClick","clickBreadcrumb","clickCount","_scheduleCheckClicks","registerMutation","registerScroll","registerClick","_handleMultiClick","_getClicks","_checkClicks","timedOutClicks","mutationAfter","scrollAfter","_generateBreadcrumbs","hadScroll","hadMutation","isSlowClick","timeAfterClickMs","endReason","getCurrentRoute","createBreadcrumb","ATTRIBUTES_TO_RECORD","getAttributesToRecord","normalizedKey","getBaseDomBreadcrumb","ENTRY_TYPES","initiatorType","responseEnd","decodedBodySize","encodedBodySize","responseStatus","transferSize","getAbsoluteTime","domComplete","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","createPerformanceEntry","logInfo","shouldAddBreadcrumb","addLogBreadcrumb","logInfoNextTick","EventBufferSizeExceededError","EventBufferArray","_totalSize","hasCheckout","hasEvents","addEvent","eventSize","eventsRet","getEarliestTimestamp","WorkerHandler","_worker","ensureReady","_ensureReadyPromise","_getAndIncrementId","EventBufferCompressionWorker","_earliestTimestamp","_sendEventToWorker","_finishRequest","EventBufferProxy","_compression","_used","_ensureWorkerIsLoadedPromise","_ensureWorkerIsLoaded","ensureWorkerIsLoaded","_switchToCompressionWorker","addEventPromises","hasSessionStorage","sessionStorage","isSampled","lastActivity","segmentId","previousSessionId","saveSession","createSession","sessionSampleRate","allowBuffering","stickySession","isExpired","initialTime","expiry","targetTime","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","traceInternals","sessionOptions","existingSession","sessionStringFromStorage","sessionObj","addEventSync","shouldAddEvent","_addEvent","eventBuffer","recordingMode","eventAfterPossibleCallback","beforeAddRecordingEvent","isPaused","timestampInMs","timeouts","sessionIdlePause","initialTimestamp","isFeedbackEvent","handleAfterSendEvent","enforceStatusCode","replayContext","traceIds","errorIds","replayId","beforeErrorSampling","sendBufferedReplayOrFlush","createPerformanceSpans","addNetworkBreadcrumb","hubOrClient","getBodySize","URLSearchParams","FormData","formDataStr","_serializeFormData","parseContentLengthHeader","getBodyString","mergeWarning","_meta","warnings","newMeta","existingWarnings","makeNetworkReplayBreadcrumb","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","normalizedBody","exceedsSizeLimit","isProbablyJson","truncatedBody","e3","getAllowedHeaders","allowedHeaders","filteredHeaders","formData","urlMatches","fullUrl","baseURI","fixedUrl","_getFetchRequestArgBody","getAllHeaders","allHeaders","getHeadersFromOptions","_LAST_BREADCRUMB","addGlobalListeners","newBreadcrumb","isTruncated","normalizedArgs","normalizedArg","clickDetector","networkDetailAllowUrls","networkDetailDenyUrls","networkCaptureBodies","networkRequestHeaders","networkResponseHeaders","reqSize","resSize","request_body_size","response_body_size","requestBodySize","responseBodySize","getAllResponseHeaders","requestBody","requestWarning","responseBody","responseWarning","responseText","captureDetails","bodyStr","bodyText","txt","handleNetworkBreadcrumbs","includeAfterSendEventHandling","afterSendHandler","replay_id","getSessionId","feedbackId","__rrweb__","captureExceptions","isErrorEventSampled","errorSampleRate","hasHooks","exceptionValue","lastTransaction","feedbackEvent","includeReplay","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","memory","getHandleRecordingEmit","hadFirstEvent","_isCheckout","setInitialState","shouldRecordCanvas","isRecordingCanvas","useCompressionOption","useCompression","blockAllMedia","networkDetailHasUrls","networkRequestHasHeaders","networkResponseHasHeaders","earliestEvent","sendReplayRequest","recordingData","segment_id","eventContext","preparedRecordingData","payloadWithSequence","replayHeaders","sequence","baseEvent","replay_start_timestamp","error_ids","trace_ids","replay_type","replayEvent","eventHint","preparedEvent","prepareReplayEvent","TransportStatusCodeError","RateLimitError","sendReplay","replayData","retryConfig","_retryCount","THROTTLED","ReplayContainer","recordingOptions","__init5","__init6","performanceEntries","replayPerformanceEntries","_lastActivity","_isPaused","_hasInitializedCoreListeners","initialUrl","_recordingOptions","_debouncedFlush","callbackReturnValue","timerId","maxTimerId","maxWait","invokeFunc","cancelTimers","debounced","debounce","_flush","flushMinDelay","flushMaxDelay","_throttledAddEvent","maxCount","isThrottled","wasThrottled","throttle","slowClickTimeout","slowClickIgnoreSelectors","initializeSampling","_initializeSessionForSampling","_initializeRecording","_handleException","startBuffering","startRecording","canvasOptions","_stopRecording","_onMutationHandler","stopRecording","forceFlush","_removeListeners","_checkSession","continueRecording","flushImmediate","activityTime","hasStoppedRecording","_updateUserActivity","_updateSessionActivity","_maybeSaveSession","cbResult","updateUserActivity","conditionalFlush","cancelFlush","pathname","_clearContext","customWorkerUrl","__SENTRY_EXCLUDE_REPLAY_WORKER__","_addListeners","_refreshSession","_handleVisibilityChange","_handleWindowBlur","_handleWindowFocus","_handleKeyboardEvent","_performanceCleanupCallback","addPerformanceEntry","onEntries","clearCallbacks","durationThreshold","stopOnCallback","previousValue","addLcpInstrumentationHandler","clearCallback","setupPerformanceObserver","_doChangeToForegroundTasks","_doChangeToBackgroundTasks","hasModifierKey","isCharacterKey","_createCustomBreadcrumb","_addPerformanceEntries","_updateInitialTimestampFromEventBuffer","_popEventContext","_runFlush","tooShort","minReplayDuration","tooLong","_flushLock","mutationLimit","overMutationLimit","mutationBreadcrumbLimit","getOption","selectors","defaultSelectors","deprecatedClassOption","deprecatedSelectorOption","allSelectors","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","__initStatic","MAX_REPLAY_DURATION","maskAttributes","unmask","unblock","ignore","maskFn","privacyOptions","password","_initialOptions","_getMergedNetworkHeaders","_isInitialized","getReplayId","_maybeLoadFromReplayCanvasIntegration","finalOptions","initialOptions","replaysSessionSampleRate","replaysOnErrorSampleRate","canvasIntegration","CanvasContext","CanvasContext2","WebGL","WebGL2","canvasVarMap","saveWebGLVar","isInstanceOfWebGLObject","ctor","contextMap","serializeArg","rr_type","base64","arraybuffer","serializeArgs","supportedWebGLConstructorNames","initCanvasContextObserver","setPreserveDrawingBufferToTrue","contextType","ctxName","contextAttributes","patchGLPrototype","recordArgs","mutation","hookHandler","CanvasManager","pendingCanvasMutations","resetObservers","rafStamps","latestId","invokeId","enableManualSnapshot","initCanvasMutationObserver","initCanvasFPSObserver","fps","canvasContextReset","rafId","takeSnapshot","startRAFTimestamping","startPendingCanvasMutationFlusher","canvas2DReset","props2D","CanvasRenderingContext2D","canvasWebGL1and2Reset","WebGLRenderingContext","WebGL2RenderingContext","canvasElement","isManualSnapshot","snapshotInProgressMap","commands","timeBetweenSnapshots","lastSnapshotTime","takeCanvasSnapshots","matchedCanvas","getContextAttributes","flushPendingCanvasMutations","setLatestRAFTimestamp","flushPendingCanvasMutationFor","valuesWithType","CANVAS_QUALITY","low","medium","high","_replayCanvasIntegration","_canvasOptions","canvasManagerResolve","_canvasManager","getLocationHref","LIGHT_BACKGROUND","INHERIT","SUBMIT_COLOR","LIGHT_THEME","backgroundHover","foreground","boxShadow","submitBackground","submitBackgroundHover","submitBorder","submitOutlineFocus","submitForeground","submitForegroundHover","cancelBackground","cancelBackgroundHover","cancelBorder","cancelOutlineFocus","cancelForeground","cancelForegroundHover","inputBackground","inputForeground","inputBorder","inputOutlineFocus","formBorderRadius","formContentBorderRadius","DEFAULT_THEME","FEEDBACK_WIDGET_SOURCE","FEEDBACK_API_SOURCE","contact_email","prepareFeedbackEvent","mergeOptions","defaultOptions","optionOverrides","themeDark","themeLight","getThemedCssVariables","theme","setAttributesNS","retrieveStringValue","XMLNS$1","createWidget","shadow","shouldCreateActor","attachTo","dialog","isDialogOpen","_handleFeedbackSubmit","emptyField","isNameRequired","nameLabel","isEmailRequired","emailLabel","messageLabel","showError","hideError","removeDialog","viewBox","clipPath","speakerDefs","speakerClipPathDef","speakerRect","successMessageText","timeoutId","showActor","onSubmitSuccess","onSubmitError","hideActor","openDialog","onFormOpen","userKey","useSentryUser","formTitle","showBranding","showName","showEmail","colorScheme","defaultName","defaultEmail","onClosed","onCancel","onSubmit","textLabels","formEl","namePlaceholder","emailPlaceholder","messagePlaceholder","cancelButtonLabel","submitButtonLabel","submitEl","errorEl","nameEl","placeholder","emailEl","messageEl","autoFocus","rows","cancelEl","htmlFor","defs","checkIsOpen","Dialog","onFormClose","closeDialog","dialogEl","handleActorClick","buttonLabel","removeActor","autoInject","_host","_shadow","_widget","_widgets","_hasInsertedActorStyles","_cleanupWidgetIfExists","_createWidget","_ensureShadowHost","targetEl","widget","removeWidget","getWidget","existingFeedback","needsAppendHost","attachShadow","themes","dark","sentryFeedbackColorscheme","getVisibilityWatcher","_previousCls","_previousFid","addPerformanceInstrumentationHandler","instrumentCls","sessionValue","sessionEntries","hadRecentInput","firstSessionEntry","lastSessionEntry","onCLS","instrumentFid","handleEntry","processingStart","onFID","addMetricObserver","isMeasurementValue","_startChild","msToSec","getBrowserPerformanceAPI","_lcpEntry","_clsEntry","_performanceCursor","_addPerformanceNavigationTiming","eventEnd","setResourceEntrySizeData","dataKey","entryVal","DEFAULT_TRACE_PROPAGATION_TARGETS","traceFetch","traceXHR","enableHTTPTimings","tracingOrigins","tracePropagationTargets","shouldCreateSpanForRequest","shouldCreateSpan","shouldAttachHeadersWithTargets","createdSpan","shouldAttachHeaders","spanOrigin","shouldCreateSpanResult","__span","contentLength","contentLengthNum","requestSpan","sentryTraceHeader","sentryBaggageHeader","newHeaders","existingBaggageHeader","newBaggageHeaders","addHTTPTimings","__sentry_xhr_span_id__","setHeaderOnXhr","cleanup","nextHopProtocol","spanData","timingSpanData","redirectStart","fetchStart","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","requestStart","responseStart","DEFAULT_BROWSER_TRACING_OPTIONS","markBackgroundTransactions","routingInstrumentation","customStartTransaction","startTransactionOnPageLoad","startTransactionOnLocationChange","startingUrl","enableLongTask","_hasSetTracePropagationTargets","_collectWebVitals","fidCallback","fid","clsCallback","addClsInstrumentationHandler","cls","lcpCallback","lcp","enableInteractions","_getCurrentHub","instrumentRouting","clientOptionsTracePropagationTargets","_createRouteTransaction","onStartRouteTransaction","statusType","_registerInteractionListener","beforeNavigate","isPageloadTransaction","getMetaContent","expandedContext","modifiedContext","finalContext","_latestRouteName","sourceFromData","sourceFromMetadata","_latestRouteSource","idleTransaction","responseStartTimestamp","requestStartTimestamp","transactionStartTime","measureStartTimestamp","measureEndTimestamp","firstHidden","shouldRecord","fp","fcp","resourceUrl","parsedUrl","renderBlockingStatus","connection","effectiveType","rtt","deviceMemory","ttfb","measurementTimestamp","normalizedValue","fidMark","measurementName","inflightInteractionTransaction","registerInteractionTransaction","currentTransaction","metaName","metaTag","MIN_DELAY","START_DELAY","MAX_DELAY","promisifyRequest","oncomplete","onsuccess","onabort","store","getAllKeys","createIndexedDbStore","getStore","dbName","storeName","indexedDB","onupgradeneeded","createObjectStore","dbp","db","objectStore","maxQueueSize","deserialized","createStore","flushTimer","retryDelay","flushIn","unref","flushWithBackOff","shouldStore","flushAtStartup","makeOfflineTransport","MS_TO_NS","THREAD_ID_STRING","THREAD_NAME","OS_PLATFORM","OS_PLATFORM_VERSION","OS_ARCH","OS_BROWSER","OS_MODEL","OS_LOCALE","language","languages","userAgentData","isAutomatedPageLoadTransaction","getHighEntropyValues","architecture","platformVersion","fullVersionList","firstUa","brand","applyDebugMetadata","resource_paths","file","PROFILING_CONSTRUCTOR_FAILED","MAX_PROFILE_DURATION_MS","shouldProfileTransaction","profilesSampleRate","createProfilingEvent","profile_id","processed_profile","enrichedThreadProfile","EMPTY_STACK_ID","STACK_ID","thread_metadata","qb","adjustForOriginChange","jsSample","stackId","elapsed_since_start_ns","stack_id","thread_id","stackTop","frameId","resourceId","resources","transactionStartMs","transactionEndMs","build_number","device","manufacturer","is_emulator","transactions","active_thread_id","relative_start_ns","relative_end_ns","createProfilePayload","PROFILE_MAP","takeProfileFromGlobalCache","startProfileForTransaction","profiler","JSProfilerConstructor","Profiler","maxSamples","sampleInterval","maxBufferSize","profileId","onProfileHandler","maxDurationTimeoutID","browserProfilingIntegration","profiledTransactionEvents","profilesToAddToEnvelope","profiledTransaction","profileEvent","profiles","windowIntegrations","Sentry","INTEGRATIONS","LOCAL_STORAGE_TEST_KEY","proxyToInternalStore","computed","_store","Adaptive","localStorageKey","_cookieDomain","cookieDomain","_sameSite","sameSite","_cookieName","cookieName","_cookiePath","cookiePath","_cookieExpirationTime","cookieExpirationTime","_cookies","_isLocalStorageAvailable","getOwner","_fastboot","setProperties","cookieStorage","getProperties","_setupStoreEvents","handle","closed","unsubscribe","ErrorLink","PROTOCOL_ERRORS_SYMBOL","ApolloError","graphQLErrors","protocolErrors","clientErrors","networkError","errorMessage","extraInfo","retriedSub","retriedResult","prepareEvent","getGlobalScope","withActiveSpan","captureCheckIn","checkIn","upsertMonitorConfig","withMonitor","monitorSlug","checkInId","finishCheckIn","setGlobalScope","getGlobalHub","hasHubOnCarrier","ensureHubOnCarrier","setAsyncContextStrategy","SpanStatus","Ok","DeadlineExceeded","Unauthenticated","PermissionDenied","NotFound","ResourceExhausted","InvalidArgument","Unimplemented","Unavailable","InternalError","UnknownError","Cancelled","AlreadyExists","FailedPrecondition","Aborted","OutOfRange","DataLoss","startActiveSpan","createSessionEnvelope","createEventEnvelope","eventItem","SessionFlusher","flushTimeout","_pendingAggregates","_intervalId","_sessionAttrs","sessionAggregates","getSessionAggregates","aggregates","incrementSessionStatusCount","_incrementSessionStatusCount","sessionStartedTrunc","aggregationCounts","exited","getReportDialogEndpoint","defineIntegration","getBucketKey","sanitizeTags","createCheckInEnvelope","_bucketsTotalWeight","_flushShift","_forceFlush","_captureMetrics","cutoffSeconds","DEFAULT_FLUSH_INTERVAL","flushedBuckets","ServerRuntimeClient","_sessionFlusher","initSessionFlusher","monitorConfig","serializedCheckIn","check_in_id","monitor_slug","monitor_config","schedule","checkin_margin","checkinMargin","max_runtime","maxRuntime","timezone","traceContext","_getTraceInfoFromScope","_captureRequestSession","serverName","server_name","initAndBind","isSentryRequestUrl","applySdkMetadata","DEFAULT_OPTIONS","transactionNamingScheme","requestDataIntegration","_requestDataIntegration","_addRequestData","addRequestDataOptions","requestDataOptionsFromExpressHandler","requestDataOptionsFromGCPWrapper","integrationOptions","requestIncludeKeys","addReqDataUserOpt","userIncludeKeys","_sentryTransaction","shouldIncludeMethodInTransactionName","transactionValue","RequestData","addConsoleInstrumentationHandler","addClickKeypressInstrumentationHandler","supportsErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","supportsNativeFetch","supportsReportingObserver","supportsReferrerPolicy","finishedHandlerData","erroredHandlerData","supportsHistory","addInstrumentationHandler","normalizeArray","allowAboveRoot","up","splitPathRe","splitPath","truncated","resolvedPath","resolvedAbsolute","fromParts","toParts","samePartsLength","outputParts","normalizePath","isPathAbsolute","isAbsolute","trailingSlash","normalizedPath","dirname","basename","ext","severityFromString","severityLevelFromString","createClientReportEnvelope","clientReportItem","setNestedKey","keyPath","addOrUpdateIntegration","defaultIntegrationInstance","forcedOptions","addOrUpdateIntegrationInArray","userIntegrationsFunc","userFinalIntegrations","allowExclusionByUser","userInstance","makeFifoCache","evictionOrder","evictCandidate","watchdogTimer","createTimer","pollInterval","anrThreshold","triggered","diffMs","getTimeMs","poll","callFrameToStackFrame","getModuleFromFilename","columnNumber","lineNumber","LRUMap","_maxSize","_nullishCoalesce","rhsFn","_asyncNullishCoalesce","_asyncOptionalChain","_asyncOptionalChainDelete","_optionalChainDelete","escapeStringForRegex","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","Arr","curByte","revLookup","fromByteArray","extraBytes","maxChunkLength","len2","encodeChunk","FORMATS","_adapters","DEFAULTS","CookiesService","Service","_fastBoot","_getDocumentCookies","_document","_filterDocumentCookies","_getFastBootCookies","fastBootCookies","fastBootCookiesCache","_fastBootCookiesCache","mergedFastBootCookies","_filterCachedFastBootCookies","domain","maxAge","_isFastBoot","_decodeValue","write","signed","_encodeValue","_isCookieSizeAcceptable","_writeFastBootCookie","httpOnly","_normalizedDefaultPath","_writeDocumentCookie","exists","serializedCookie","_serializeCookie","responseHeaders","_cacheFastBootCookie","replaced","getAll","fastBootCache","cachedOptions","requestPath","optionsPath","isNone","unfilteredCookies","separatorIndex","isPresent","serializeCookie","typeOf","secure","partitioned","_byteCount","UNINITIALIZED","ElementHelper","_defineProperty","componentClass","ensureSafeComponent","EmberComponent","runInDebug","modifier","ClassBasedModifierManager","capabilities","createModifier","modifierClass","installModifier","createdState","installedState","modify","positional","named","updateModifier","destroyModifier","ClassBasedModifier","setOwner","setModifierManager","MANAGER","teardown","comparisonArgs","_params","momentAdd","additionArgs","momentCalendar","formatHash","referenceTime","mergedFormats","momentDiff","float","dateA","dateB","momentDuration","momentFormat","defaultFormatDidChange","formatArgs","momentFromNow","hideAffix","momentFrom","momentSubtract","subtractionArgs","momentToDate","hidePrefix","momentToNow","momentTo","unixTimeStamp","utcTime","_timeZone","localeOptions","outputFormat","factoryFor","readOnly","changeLocale","setTimeZone","changeTimeZone","momentObj","BaseAuthenticator","authenticate","InternalSession","ObjectProxy","authenticator","isAuthenticated","attemptedTransition","authenticated","_busy","_bindToStoreEvents","authenticatorFactory","_lookupAuthenticator","rejectWithError","_clear","_onSessionDataUpdated","restoredContent","_clearWithContent","authenticatedContent","_bindToAuthenticatorEvents","_updateStore","setUnknownProperty","_onSessionDataInvalidated","authenticatorName","LocalStorage","_boundHandler","_handleStorageEvent","willDestroy","_lastData","persistingProperty","beforeSet","scheduleOnce","rewriteCookie","Cookie","_syncDataTimeout","_renewExpirationTimeout","_oldCookieName","_secureCookies","_isPageVisible","cachedExpirationTime","_read","_renew","_syncData","_renewExpiration","expiration","_calculateExpirationTime","_write","cookieOptions","oldCookie","expirationCookieName","emberSimpleAuth","ENV","resolveRegistration","rootURL","baseURL","Configuration","routeAfterAuthentication","SESSION_DATA_KEY_PREFIX","assertSetupHasBeenCalled","isSetupCalled","sessionDataKey","_setupHandlers","handleAuthentication","handleInvalidation","requireAuthentication","routeOrCallback","_setupIsCalled","sessionService","fastbootService","intent","argType","authenticationRoute","transitionTo","prohibitAuthentication","routeIfAlreadyAuthenticated","cookiesService","redirectTarget","routerService","retry","handleSessionAuthenticated","routeAfterInvalidation","handleSessionInvalidated","factoryNameOrType","injectionName","injection","ErrorCode","FormatError","IntlMessageFormat","InvalidValueError","InvalidValueTypeError","MissingValueError","PART_TYPE","isFormatXMLElementFn","MISSING_VALUE","INVALID_VALUE","MISSING_INTL_API","originalMessage","variableId","currentPluralValue","els_1","getNumberFormat","varName","getDateTimeFormat","value_1","formatFn","chunks","PluralRules","getPluralRules","lastPart","createFastMemoizeCache","memoizeIntl","overrideFormats","defaultConfig","configs","formatterCache","pluralRules","ast","supportedLocalesOf","getAst","__parse","memoizedDefaultLocale","jwtDecode","InvalidTokenError","decoded","TrackedArray","TrackedMap","TrackedObject","TrackedSet","TrackedWeakMap","TrackedWeakSet","tracked","_Symbol$toStringTag","readStorageFor","storages","createStorage","dirtyStorageFor","collection","_Symbol$iterator","_Symbol$toStringTag2","storageFor","_classPrivateFieldGet","privateMap","action","ARRAY_GETTER_METHODS","ARRAY_WRITE_THEN_READ_METHODS","convertToInt","_collection","_storages","_readStorageFor","_dirtyStorageFor","iterable","mapfn","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","boundFns","nativelyAccessingLengthFromPushOrUnshift","_classPrivateMethodGet","_readStorageFor2","_dirtyStorageFor2","_dirtyCollection","fromEntries","descs","getOwnPropertyDescriptors","_dirtyCollection2","tracked$1","_nil","_v","_v2","_v3","_v4","_interopRequireDefault","_rng","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","seedBytes","rng","msecs","nsecs","tmh","_md","_default","getOutputLength","inputLength8","lsw","md5cmn","cnt","md5ff","md5gg","md5hh","md5ii","length32","hexTab","olda","oldb","oldc","oldd","length8","_native","rnds","_sha","ROTL","BufferedChangeset","CHANGESET","Change","Changeset","Err","ValidatedChangeset","ValidationChangeset","ValidationChangesetFactory","arrayToObject","buildOldValues","changeset","getChangeValue","getDeep","getKeyValues","isArrayObject","isChange","isChangeset","isPromise","keyInObject","lookupValidator","mergeDeep","mergeNested","objectToArray","objectWithout","propertyIsUnsafe","pureAssign","setDeep","take","EMPTY","asString","shouldSkip","structuredClone","lossy","deserializer","unpair","BigInt","VALUE","maybeChange","validation","keysUpToValue","getKeyErrorValues","handleValidationsAsync","validations","maybeFailed","getSubObject","validationMap","validator","validators","Notifier","notifierForEvent","_eventedNotifiers","notifier","hasKey","safeGet","pathInChanges","isObj","hasChanges","isTruthy","objects","validatorMap","keysUpToFunction","flattenValidations","__changeset__","baseKey","findSiblings","leafKey","safeSet","isComplex","changeValue","siblings","resolvedValue","nestedKeys","finalObj","getKeys","propertyIsOnObject","buildPathToValue","kv","possibleKeys","possible","mergeTargetAndSource","stringValue","sourceIsArray","targetIsArray","sourceIsArrayLike","objectProxyHandler","childValue","childContent","ObjectTreeNode","nodeContent","defaultSafeGet","isObject$1","excludedKeys","originalObj","keysToTake","keys$1","CONTENT","PREVIOUS_CONTENT","CHANGES","ERRORS","ERRORS_CACHE","OPTIONS","maybeUnwrapProxy","newFormat","isPristine","validationKeys","userChangesetKeys","changesetKeys","isInvalid","isDirty","chKey","_setProperty","oldContent","unexecute","rollback","_rollbackKeys","_notifyVirtualProperties","rollbackInvalid","errorKeys","_deleteKey","errKey","addError","newError","removeError","removeErrors","pushErrors","newErrors","existingError","getChangesForSnapshot","newChanges","getChangesFromSnapshot","getChangeForProp","previousNode","currentKey","changesValue","baseChanges","normalizedBaseChanges","baseContent","subContent","subChanges","targetBuffer","keys$2","CONTENT$1","PREVIOUS_CONTENT$1","CHANGES$1","ERRORS$1","ERRORS_CACHE$1","VALIDATOR","OPTIONS$1","RUNNING_VALIDATIONS","AFTER_VALIDATION_EVENT","defaultValidatorFn","skipValidate","maybeUnwrapProxy$1","validateFn","validatorMapKeys","initValidate","_collectErrors","_bareChanges","_handleValidation","_validateKey","prepareChangesFn","preparedChanges","savePromise","maybePromise","newChangeset","ValidatedChangeset$1","mergedErrors","mergedChanges","rollbackProperty","casted","isValidating","runningValidations","_setIsValidating","resolvedValidation","_isValidResult","validationResult","validationError","changeset$1","Changeset$1","_arrayLikeToArray","_defineProperties","_createClass","protoProps","staticProps","hasSymbols","hasSymbol","getSymbol","observable","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","getSpecies","hostReportError","enqueue","cleanupSubscription","subscription","_cleanup","closeSubscription","_observer","notifySubscription","onNotify","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_subscription","_subscriber","hasSeed","_this5","startNext","flatMap","_this6","subscriptions","completeIfDone","isObservable","allowArrayLike","minLen","iY","l4","qT","getDomElement","EN","bU","jm","lq","getSDKSource"],"sources":["webpack://__ember_auto_import__/./node_modules/moment/moment.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/-base.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helper-compute-36ed98e8.js","webpack://__ember_auto_import__/../../src/is.ts","webpack://__ember_auto_import__/../../src/worldwide.ts","webpack://__ember_auto_import__/../../src/logger.ts","webpack://__ember_auto_import__/../../src/debug-build.ts","webpack://__ember_auto_import__/../../src/object.ts","webpack://__ember_auto_import__/../../src/string.ts","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/index.js","webpack://__ember_auto_import__/./node_modules/@embroider/macros/src/addon/es-compat2.js","webpack://__ember_auto_import__/../../src/normalize.ts","webpack://__ember_auto_import__/../../src/misc.ts","webpack://__ember_auto_import__/./node_modules/lodash/isObject.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/stringify.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/validate.js","webpack://__ember_auto_import__/lib/rsvp/events.js","webpack://__ember_auto_import__/lib/rsvp/config.js","webpack://__ember_auto_import__/lib/rsvp/instrument.js","webpack://__ember_auto_import__/lib/rsvp/promise/resolve.js","webpack://__ember_auto_import__/lib/rsvp/-internal.js","webpack://__ember_auto_import__/lib/rsvp/then.js","webpack://__ember_auto_import__/lib/rsvp/enumerator.js","webpack://__ember_auto_import__/lib/rsvp/promise.js","webpack://__ember_auto_import__/lib/rsvp/node.js","webpack://__ember_auto_import__/lib/rsvp/promise/all.js","webpack://__ember_auto_import__/lib/rsvp/promise/race.js","webpack://__ember_auto_import__/lib/rsvp/promise/reject.js","webpack://__ember_auto_import__/lib/rsvp/all-settled.js","webpack://__ember_auto_import__/lib/rsvp/promise-hash.js","webpack://__ember_auto_import__/lib/rsvp/hash-settled.js","webpack://__ember_auto_import__/lib/rsvp/map.js","webpack://__ember_auto_import__/lib/rsvp/resolve.js","webpack://__ember_auto_import__/lib/rsvp/filter.js","webpack://__ember_auto_import__/lib/rsvp/asap.js","webpack://__ember_auto_import__/lib/rsvp.js","webpack://__ember_auto_import__/lib/rsvp/all.js","webpack://__ember_auto_import__/lib/rsvp/race.js","webpack://__ember_auto_import__/lib/rsvp/hash.js","webpack://__ember_auto_import__/lib/rsvp/rethrow.js","webpack://__ember_auto_import__/lib/rsvp/defer.js","webpack://__ember_auto_import__/lib/rsvp/reject.js","webpack://__ember_auto_import__/../../src/syncpromise.ts","webpack://__ember_auto_import__/../../src/dsn.ts","webpack://__ember_auto_import__/../../src/utils/is-fastboot.js","webpack://__ember_auto_import__/./node_modules/fast-memoize/src/index.js","webpack://__ember_auto_import__/./node_modules/lodash/_baseGetTag.js","webpack://__ember_auto_import__/./node_modules/lodash/_Symbol.js","webpack://__ember_auto_import__/../../../src/instrument/_handlers.ts","webpack://__ember_auto_import__/../../src/error.ts","webpack://__ember_auto_import__/./node_modules/ember-simple-auth-oidc/node_modules/tslib/tslib.es6.mjs","webpack://__ember_auto_import__/../../src/envelope.ts","webpack://__ember_auto_import__/../../src/requestdata.ts","webpack://__ember_auto_import__/../../src/cookie.ts","webpack://__ember_auto_import__/../../src/node.ts","webpack://__ember_auto_import__/../../src/time.ts","webpack://__ember_auto_import__/../../src/ratelimit.ts","webpack://__ember_auto_import__/./node_modules/ts-invariant/node_modules/tslib/tslib.es6.mjs","webpack://__ember_auto_import__/./invariant.ts","webpack://__ember_auto_import__/./version.ts","webpack://__ember_auto_import__/../../../src/utilities/globals/maybe.ts","webpack://__ember_auto_import__/../../../src/utilities/globals/global.ts","webpack://__ember_auto_import__/../../../src/utilities/common/makeUniqueId.ts","webpack://__ember_auto_import__/../../../src/utilities/globals/invariantWrappers.ts","webpack://__ember_auto_import__/../../../src/utilities/common/stringifyForDisplay.ts","webpack://__ember_auto_import__/../../../src/utilities/globals/index.ts","webpack://__ember_auto_import__/../../src/tracing.ts","webpack://__ember_auto_import__/../../src/eventbuilder.ts","webpack://__ember_auto_import__/../../src/url.ts","webpack://__ember_auto_import__/../../src/session-stores/base.js","webpack://__ember_auto_import__/./node_modules/mapbox-gl/dist/mapbox-gl.js","webpack://__ember_auto_import__/../../src/env.ts","webpack://__ember_auto_import__/./node_modules/moment/locale/af.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ar.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ar-dz.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ar-kw.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ar-ly.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ar-ma.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ar-ps.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ar-sa.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ar-tn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/az.js","webpack://__ember_auto_import__/./node_modules/moment/locale/be.js","webpack://__ember_auto_import__/./node_modules/moment/locale/bg.js","webpack://__ember_auto_import__/./node_modules/moment/locale/bm.js","webpack://__ember_auto_import__/./node_modules/moment/locale/bn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/bn-bd.js","webpack://__ember_auto_import__/./node_modules/moment/locale/bo.js","webpack://__ember_auto_import__/./node_modules/moment/locale/br.js","webpack://__ember_auto_import__/./node_modules/moment/locale/bs.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ca.js","webpack://__ember_auto_import__/./node_modules/moment/locale/cs.js","webpack://__ember_auto_import__/./node_modules/moment/locale/cv.js","webpack://__ember_auto_import__/./node_modules/moment/locale/cy.js","webpack://__ember_auto_import__/./node_modules/moment/locale/da.js","webpack://__ember_auto_import__/./node_modules/moment/locale/de.js","webpack://__ember_auto_import__/./node_modules/moment/locale/de-at.js","webpack://__ember_auto_import__/./node_modules/moment/locale/de-ch.js","webpack://__ember_auto_import__/./node_modules/moment/locale/dv.js","webpack://__ember_auto_import__/./node_modules/moment/locale/el.js","webpack://__ember_auto_import__/./node_modules/moment/locale/en-au.js","webpack://__ember_auto_import__/./node_modules/moment/locale/en-ca.js","webpack://__ember_auto_import__/./node_modules/moment/locale/en-gb.js","webpack://__ember_auto_import__/./node_modules/moment/locale/en-ie.js","webpack://__ember_auto_import__/./node_modules/moment/locale/en-il.js","webpack://__ember_auto_import__/./node_modules/moment/locale/en-in.js","webpack://__ember_auto_import__/./node_modules/moment/locale/en-nz.js","webpack://__ember_auto_import__/./node_modules/moment/locale/en-sg.js","webpack://__ember_auto_import__/./node_modules/moment/locale/eo.js","webpack://__ember_auto_import__/./node_modules/moment/locale/es.js","webpack://__ember_auto_import__/./node_modules/moment/locale/es-do.js","webpack://__ember_auto_import__/./node_modules/moment/locale/es-mx.js","webpack://__ember_auto_import__/./node_modules/moment/locale/es-us.js","webpack://__ember_auto_import__/./node_modules/moment/locale/et.js","webpack://__ember_auto_import__/./node_modules/moment/locale/eu.js","webpack://__ember_auto_import__/./node_modules/moment/locale/fa.js","webpack://__ember_auto_import__/./node_modules/moment/locale/fi.js","webpack://__ember_auto_import__/./node_modules/moment/locale/fil.js","webpack://__ember_auto_import__/./node_modules/moment/locale/fo.js","webpack://__ember_auto_import__/./node_modules/moment/locale/fr.js","webpack://__ember_auto_import__/./node_modules/moment/locale/fr-ca.js","webpack://__ember_auto_import__/./node_modules/moment/locale/fr-ch.js","webpack://__ember_auto_import__/./node_modules/moment/locale/fy.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ga.js","webpack://__ember_auto_import__/./node_modules/moment/locale/gd.js","webpack://__ember_auto_import__/./node_modules/moment/locale/gl.js","webpack://__ember_auto_import__/./node_modules/moment/locale/gom-deva.js","webpack://__ember_auto_import__/./node_modules/moment/locale/gom-latn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/gu.js","webpack://__ember_auto_import__/./node_modules/moment/locale/he.js","webpack://__ember_auto_import__/./node_modules/moment/locale/hi.js","webpack://__ember_auto_import__/./node_modules/moment/locale/hr.js","webpack://__ember_auto_import__/./node_modules/moment/locale/hu.js","webpack://__ember_auto_import__/./node_modules/moment/locale/hy-am.js","webpack://__ember_auto_import__/./node_modules/moment/locale/id.js","webpack://__ember_auto_import__/./node_modules/moment/locale/is.js","webpack://__ember_auto_import__/./node_modules/moment/locale/it.js","webpack://__ember_auto_import__/./node_modules/moment/locale/it-ch.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ja.js","webpack://__ember_auto_import__/./node_modules/moment/locale/jv.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ka.js","webpack://__ember_auto_import__/./node_modules/moment/locale/kk.js","webpack://__ember_auto_import__/./node_modules/moment/locale/km.js","webpack://__ember_auto_import__/./node_modules/moment/locale/kn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ko.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ku.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ku-kmr.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ky.js","webpack://__ember_auto_import__/./node_modules/moment/locale/lb.js","webpack://__ember_auto_import__/./node_modules/moment/locale/lo.js","webpack://__ember_auto_import__/./node_modules/moment/locale/lt.js","webpack://__ember_auto_import__/./node_modules/moment/locale/lv.js","webpack://__ember_auto_import__/./node_modules/moment/locale/me.js","webpack://__ember_auto_import__/./node_modules/moment/locale/mi.js","webpack://__ember_auto_import__/./node_modules/moment/locale/mk.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ml.js","webpack://__ember_auto_import__/./node_modules/moment/locale/mn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/mr.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ms.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ms-my.js","webpack://__ember_auto_import__/./node_modules/moment/locale/mt.js","webpack://__ember_auto_import__/./node_modules/moment/locale/my.js","webpack://__ember_auto_import__/./node_modules/moment/locale/nb.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ne.js","webpack://__ember_auto_import__/./node_modules/moment/locale/nl.js","webpack://__ember_auto_import__/./node_modules/moment/locale/nl-be.js","webpack://__ember_auto_import__/./node_modules/moment/locale/nn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/oc-lnc.js","webpack://__ember_auto_import__/./node_modules/moment/locale/pa-in.js","webpack://__ember_auto_import__/./node_modules/moment/locale/pl.js","webpack://__ember_auto_import__/./node_modules/moment/locale/pt.js","webpack://__ember_auto_import__/./node_modules/moment/locale/pt-br.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ro.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ru.js","webpack://__ember_auto_import__/./node_modules/moment/locale/sd.js","webpack://__ember_auto_import__/./node_modules/moment/locale/se.js","webpack://__ember_auto_import__/./node_modules/moment/locale/si.js","webpack://__ember_auto_import__/./node_modules/moment/locale/sk.js","webpack://__ember_auto_import__/./node_modules/moment/locale/sl.js","webpack://__ember_auto_import__/./node_modules/moment/locale/sq.js","webpack://__ember_auto_import__/./node_modules/moment/locale/sr.js","webpack://__ember_auto_import__/./node_modules/moment/locale/sr-cyrl.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ss.js","webpack://__ember_auto_import__/./node_modules/moment/locale/sv.js","webpack://__ember_auto_import__/./node_modules/moment/locale/sw.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ta.js","webpack://__ember_auto_import__/./node_modules/moment/locale/te.js","webpack://__ember_auto_import__/./node_modules/moment/locale/tet.js","webpack://__ember_auto_import__/./node_modules/moment/locale/tg.js","webpack://__ember_auto_import__/./node_modules/moment/locale/th.js","webpack://__ember_auto_import__/./node_modules/moment/locale/tk.js","webpack://__ember_auto_import__/./node_modules/moment/locale/tl-ph.js","webpack://__ember_auto_import__/./node_modules/moment/locale/tlh.js","webpack://__ember_auto_import__/./node_modules/moment/locale/tr.js","webpack://__ember_auto_import__/./node_modules/moment/locale/tzl.js","webpack://__ember_auto_import__/./node_modules/moment/locale/tzm.js","webpack://__ember_auto_import__/./node_modules/moment/locale/tzm-latn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ug-cn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/uk.js","webpack://__ember_auto_import__/./node_modules/moment/locale/ur.js","webpack://__ember_auto_import__/./node_modules/moment/locale/uz.js","webpack://__ember_auto_import__/./node_modules/moment/locale/uz-latn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/vi.js","webpack://__ember_auto_import__/./node_modules/moment/locale/x-pseudo.js","webpack://__ember_auto_import__/./node_modules/moment/locale/yo.js","webpack://__ember_auto_import__/./node_modules/moment/locale/zh-cn.js","webpack://__ember_auto_import__/./node_modules/moment/locale/zh-hk.js","webpack://__ember_auto_import__/./node_modules/moment/locale/zh-mo.js","webpack://__ember_auto_import__/./node_modules/moment/locale/zh-tw.js","webpack://__ember_auto_import__/./node_modules/js-quantities/build/quantities.js","webpack://__ember_auto_import__/./node_modules/js-sha256/src/sha256.js","webpack://__ember_auto_import__/./errors.js","webpack://__ember_auto_import__/./assert.js","webpack://__ember_auto_import__/./MathUtil.js","webpack://__ember_auto_import__/./Enum.js","webpack://__ember_auto_import__/./temporal/TemporalAmount.js","webpack://__ember_auto_import__/./temporal/TemporalUnit.js","webpack://__ember_auto_import__/./Duration.js","webpack://__ember_auto_import__/./YearConstants.js","webpack://__ember_auto_import__/./temporal/ChronoUnit.js","webpack://__ember_auto_import__/./temporal/TemporalField.js","webpack://__ember_auto_import__/./temporal/ValueRange.js","webpack://__ember_auto_import__/./temporal/ChronoField.js","webpack://__ember_auto_import__/./temporal/TemporalQueries.js","webpack://__ember_auto_import__/./temporal/TemporalAccessor.js","webpack://__ember_auto_import__/./temporal/TemporalQuery.js","webpack://__ember_auto_import__/./DayOfWeek.js","webpack://__ember_auto_import__/./Month.js","webpack://__ember_auto_import__/./Period.js","webpack://__ember_auto_import__/./format/ParsePosition.js","webpack://__ember_auto_import__/./format/EnumMap.js","webpack://__ember_auto_import__/./format/ResolverStyle.js","webpack://__ember_auto_import__/./temporal/Temporal.js","webpack://__ember_auto_import__/./chrono/ChronoLocalDate.js","webpack://__ember_auto_import__/./StringUtil.js","webpack://__ember_auto_import__/./ZoneId.js","webpack://__ember_auto_import__/./zone/ZoneRules.js","webpack://__ember_auto_import__/./ZoneOffset.js","webpack://__ember_auto_import__/./format/DateTimeBuilder.js","webpack://__ember_auto_import__/./format/DateTimeParseContext.js","webpack://__ember_auto_import__/./format/DateTimePrintContext.js","webpack://__ember_auto_import__/./temporal/IsoFields.js","webpack://__ember_auto_import__/./format/DecimalStyle.js","webpack://__ember_auto_import__/./format/SignStyle.js","webpack://__ember_auto_import__/./format/TextStyle.js","webpack://__ember_auto_import__/./format/parser/CharLiteralPrinterParser.js","webpack://__ember_auto_import__/./format/parser/CompositePrinterParser.js","webpack://__ember_auto_import__/./format/parser/FractionPrinterParser.js","webpack://__ember_auto_import__/./format/parser/NumberPrinterParser.js","webpack://__ember_auto_import__/./format/parser/OffsetIdPrinterParser.js","webpack://__ember_auto_import__/./format/parser/PadPrinterParserDecorator.js","webpack://__ember_auto_import__/./format/parser/SettingsParser.js","webpack://__ember_auto_import__/./format/parser/StringLiteralPrinterParser.js","webpack://__ember_auto_import__/./MonthDay.js","webpack://__ember_auto_import__/./YearMonth.js","webpack://__ember_auto_import__/./Year.js","webpack://__ember_auto_import__/./zone/ZoneRulesProvider.js","webpack://__ember_auto_import__/./ZoneRegion.js","webpack://__ember_auto_import__/./format/parser/ZoneIdPrinterParser.js","webpack://__ember_auto_import__/./format/DateTimeFormatterBuilder.js","webpack://__ember_auto_import__/./format/StringBuilder.js","webpack://__ember_auto_import__/./format/DateTimeFormatter.js","webpack://__ember_auto_import__/./temporal/TemporalAdjuster.js","webpack://__ember_auto_import__/./temporal/TemporalAdjusters.js","webpack://__ember_auto_import__/./chrono/IsoChronology.js","webpack://__ember_auto_import__/./OffsetTime.js","webpack://__ember_auto_import__/./chrono/ChronoZonedDateTime.js","webpack://__ember_auto_import__/./ZonedDateTime.js","webpack://__ember_auto_import__/./OffsetDateTime.js","webpack://__ember_auto_import__/./LocalDate.js","webpack://__ember_auto_import__/./chrono/ChronoLocalDateTime.js","webpack://__ember_auto_import__/./LocalDateTime.js","webpack://__ember_auto_import__/./LocalTime.js","webpack://__ember_auto_import__/./Instant.js","webpack://__ember_auto_import__/./Clock.js","webpack://__ember_auto_import__/./zone/ZoneOffsetTransition.js","webpack://__ember_auto_import__/./zone/SystemDefaultZoneRules.js","webpack://__ember_auto_import__/./zone/SystemDefaultZoneId.js","webpack://__ember_auto_import__/./ZoneIdFactory.js","webpack://__ember_auto_import__/./_init.js","webpack://__ember_auto_import__/./temporal/TemporalQueriesFactory.js","webpack://__ember_auto_import__/./convert.js","webpack://__ember_auto_import__/./nativeJs.js","webpack://__ember_auto_import__/./js-joda.js","webpack://__ember_auto_import__/./use.js","webpack://__ember_auto_import__/./MomentZoneRules.js","webpack://__ember_auto_import__/./MomentZoneRulesProvider.js","webpack://__ember_auto_import__/./unpack.js","webpack://__ember_auto_import__/./js-joda-timezone.js","webpack://__ember_auto_import__/./auto-plug.js","webpack://__ember_auto_import__/./plug.js","webpack://__ember_auto_import__/./system-default-zone.js","webpack://__ember_auto_import__/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://__ember_auto_import__/./node_modules/chart.js/dist/chart.esm.js","webpack://__ember_auto_import__/./utils.ts","webpack://__ember_auto_import__/./tags.ts","webpack://__ember_auto_import__/./attrs.ts","webpack://__ember_auto_import__/./regexp.ts","webpack://__ember_auto_import__/./purify.ts","webpack://__ember_auto_import__/../../src/utils/location.js","webpack://__ember_auto_import__/./node_modules/events/events.js","webpack://__ember_auto_import__/./node_modules/lodash/range.js","webpack://__ember_auto_import__/./node_modules/lodash/_createRange.js","webpack://__ember_auto_import__/./node_modules/lodash/_baseRange.js","webpack://__ember_auto_import__/./node_modules/lodash/_isIterateeCall.js","webpack://__ember_auto_import__/./node_modules/lodash/eq.js","webpack://__ember_auto_import__/./node_modules/lodash/isArrayLike.js","webpack://__ember_auto_import__/./node_modules/lodash/isFunction.js","webpack://__ember_auto_import__/./node_modules/lodash/_root.js","webpack://__ember_auto_import__/./node_modules/lodash/_freeGlobal.js","webpack://__ember_auto_import__/./node_modules/lodash/_getRawTag.js","webpack://__ember_auto_import__/./node_modules/lodash/_objectToString.js","webpack://__ember_auto_import__/./node_modules/lodash/isLength.js","webpack://__ember_auto_import__/./node_modules/lodash/_isIndex.js","webpack://__ember_auto_import__/./node_modules/lodash/toFinite.js","webpack://__ember_auto_import__/./node_modules/lodash/toNumber.js","webpack://__ember_auto_import__/./node_modules/lodash/_baseTrim.js","webpack://__ember_auto_import__/./node_modules/lodash/_trimmedEndIndex.js","webpack://__ember_auto_import__/./node_modules/lodash/isSymbol.js","webpack://__ember_auto_import__/./node_modules/lodash/isObjectLike.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/rng.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/v35.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/parse.js","webpack://__ember_auto_import__/../../src/node-stack-trace.ts","webpack://__ember_auto_import__/../../../src/instrument/globalError.ts","webpack://__ember_auto_import__/../../../src/instrument/globalUnhandledRejection.ts","webpack://__ember_auto_import__/../../src/promisebuffer.ts","webpack://__ember_auto_import__/../../src/aggregate-errors.ts","webpack://__ember_auto_import__/../../src/errors.js","webpack://__ember_auto_import__/../../src/impl/formats.js","webpack://__ember_auto_import__/../../src/impl/util.js","webpack://__ember_auto_import__/../../src/impl/english.js","webpack://__ember_auto_import__/../../src/impl/formatter.js","webpack://__ember_auto_import__/../../src/impl/invalid.js","webpack://__ember_auto_import__/../../src/zone.js","webpack://__ember_auto_import__/../../src/zones/localZone.js","webpack://__ember_auto_import__/../../src/zones/IANAZone.js","webpack://__ember_auto_import__/../../src/zones/fixedOffsetZone.js","webpack://__ember_auto_import__/../../src/zones/invalidZone.js","webpack://__ember_auto_import__/../../src/impl/zoneUtil.js","webpack://__ember_auto_import__/../../src/settings.js","webpack://__ember_auto_import__/../../src/impl/locale.js","webpack://__ember_auto_import__/../../src/impl/regexParser.js","webpack://__ember_auto_import__/../../src/duration.js","webpack://__ember_auto_import__/../../src/interval.js","webpack://__ember_auto_import__/../../src/info.js","webpack://__ember_auto_import__/../../src/impl/diff.js","webpack://__ember_auto_import__/../../src/impl/digits.js","webpack://__ember_auto_import__/../../src/impl/tokenParser.js","webpack://__ember_auto_import__/../../src/impl/conversions.js","webpack://__ember_auto_import__/../../src/datetime.js","webpack://__ember_auto_import__/../../src/luxon.js","webpack://__ember_auto_import__/../../src/utils/objects-are-equal.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat-parser/lib/src/types.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat-parser/node_modules/tslib/tslib.es6.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat-parser/lib/src/skeleton.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat-parser/lib/src/parser.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat-parser/lib/src/normalize.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat-parser/lib/index.js","webpack://__ember_auto_import__/../../../src/link/core/ApolloLink.ts","webpack://__ember_auto_import__/../../../src/link/utils/createOperation.ts","webpack://__ember_auto_import__/../../../src/link/utils/transformOperation.ts","webpack://__ember_auto_import__/../../../src/utilities/graphql/getFromAST.ts","webpack://__ember_auto_import__/../../../src/link/utils/validateOperation.ts","webpack://__ember_auto_import__/../../src/stacktrace.ts","webpack://__ember_auto_import__/../../src/browser.ts","webpack://__ember_auto_import__/../../src/eventProcessors.ts","webpack://__ember_auto_import__/../../src/constants.ts","webpack://__ember_auto_import__/../../src/session.ts","webpack://__ember_auto_import__/../../../src/utils/getRootSpan.ts","webpack://__ember_auto_import__/../../src/baggage.ts","webpack://__ember_auto_import__/../../../src/utils/spanUtils.ts","webpack://__ember_auto_import__/../../../src/tracing/dynamicSamplingContext.ts","webpack://__ember_auto_import__/../../../src/utils/applyScopeDataToEvent.ts","webpack://__ember_auto_import__/../../src/scope.ts","webpack://__ember_auto_import__/../../src/version.ts","webpack://__ember_auto_import__/../../src/hub.ts","webpack://__ember_auto_import__/../../src/memo.ts","webpack://__ember_auto_import__/../../../src/utils/prepareEvent.ts","webpack://__ember_auto_import__/../../src/exports.ts","webpack://__ember_auto_import__/../../src/integration.ts","webpack://__ember_auto_import__/../../../src/integrations/functiontostring.ts","webpack://__ember_auto_import__/../../../src/integrations/inboundfilters.ts","webpack://__ember_auto_import__/../../../src/integrations/linkederrors.ts","webpack://__ember_auto_import__/../../src/index.ts","webpack://__ember_auto_import__/../../src/metadata.ts","webpack://__ember_auto_import__/../../../src/integrations/metadata.ts","webpack://__ember_auto_import__/../../src/api.ts","webpack://__ember_auto_import__/../../../src/metrics/constants.ts","webpack://__ember_auto_import__/../../src/baseclient.ts","webpack://__ember_auto_import__/../../../src/metrics/envelope.ts","webpack://__ember_auto_import__/../../../src/metrics/utils.ts","webpack://__ember_auto_import__/../../../src/tracing/utils.ts","webpack://__ember_auto_import__/../../../src/tracing/errors.ts","webpack://__ember_auto_import__/../../src/semanticAttributes.ts","webpack://__ember_auto_import__/../../../src/tracing/span.ts","webpack://__ember_auto_import__/../../../src/tracing/transaction.ts","webpack://__ember_auto_import__/../../../src/tracing/idletransaction.ts","webpack://__ember_auto_import__/../../../src/utils/hasTracingEnabled.ts","webpack://__ember_auto_import__/../../../src/tracing/sampling.ts","webpack://__ember_auto_import__/../../../src/tracing/hubextensions.ts","webpack://__ember_auto_import__/../../../src/utils/handleCallbackErrors.ts","webpack://__ember_auto_import__/../../../src/tracing/trace.ts","webpack://__ember_auto_import__/../../../src/transports/base.ts","webpack://__ember_auto_import__/../../../src/transports/multiplexed.ts","webpack://__ember_auto_import__/../../../src/metrics/instance.ts","webpack://__ember_auto_import__/../../../src/metrics/browser-aggregator.ts","webpack://__ember_auto_import__/../../../src/metrics/integration.ts","webpack://__ember_auto_import__/../../../src/metrics/exports.ts","webpack://__ember_auto_import__/../../../src/utils/parameterize.ts","webpack://__ember_auto_import__/../../src/sdk.ts","webpack://__ember_auto_import__/../../../src/tracing/measurement.ts","webpack://__ember_auto_import__/../../../src/helpers.ts","webpack://__ember_auto_import__/../../../src/debug-build.ts","webpack://__ember_auto_import__/../../../src/eventbuilder.ts","webpack://__ember_auto_import__/../../../src/userfeedback.ts","webpack://__ember_auto_import__/../../../src/client.ts","webpack://__ember_auto_import__/../../../src/utils/sdkMetadata.ts","webpack://__ember_auto_import__/../../src/clientreport.ts","webpack://__ember_auto_import__/../../src/supports.ts","webpack://__ember_auto_import__/../../../src/transports/utils.ts","webpack://__ember_auto_import__/../../../src/transports/fetch.ts","webpack://__ember_auto_import__/../../../src/transports/xhr.ts","webpack://__ember_auto_import__/../../../src/stack-parsers.ts","webpack://__ember_auto_import__/../../../src/vendor/supportsHistory.ts","webpack://__ember_auto_import__/../../../src/instrument/history.ts","webpack://__ember_auto_import__/../../../src/instrument/console.ts","webpack://__ember_auto_import__/../../../src/instrument/dom.ts","webpack://__ember_auto_import__/../../../src/instrument/xhr.ts","webpack://__ember_auto_import__/../../../src/instrument/fetch.ts","webpack://__ember_auto_import__/../../src/severity.ts","webpack://__ember_auto_import__/../../../src/integrations/breadcrumbs.ts","webpack://__ember_auto_import__/../../../src/integrations/dedupe.ts","webpack://__ember_auto_import__/../../../src/integrations/globalhandlers.ts","webpack://__ember_auto_import__/../../../src/integrations/httpcontext.ts","webpack://__ember_auto_import__/../../../src/integrations/trycatch.ts","webpack://__ember_auto_import__/../../../src/sdk.ts","webpack://__ember_auto_import__/../../../src/buildPolyfills/_optionalChain.ts","webpack://__ember_auto_import__/../../../src/utils/isSentryRequestUrl.ts","webpack://__ember_auto_import__/../../src/isBrowser.ts","webpack://__ember_auto_import__/../../../src/common/debug-build.ts","webpack://__ember_auto_import__/../../../src/browser/types.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/lib/getNavigationEntry.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/lib/getActivationStart.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/lib/onHidden.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/lib/getVisibilityWatcher.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/lib/observe.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/getLCP.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/lib/initMetric.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/lib/generateUniqueID.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/lib/bindReporter.ts","webpack://__ember_auto_import__/../../../src/browser/instrument.ts","webpack://__ember_auto_import__/../../../src/constants.ts","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js","webpack://__ember_auto_import__/../../../src/buildPolyfills/_nullishCoalesce.ts","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/types/dist/rrweb-types.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/index.js","webpack://__ember_auto_import__/../../../src/util/timestamp.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/util/addBreadcrumbEvent.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/util/domUtils.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/util/onWindowOpen.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleClick.ts","webpack://__ember_auto_import__/../../../src/util/createBreadcrumb.ts","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb-snapshot/es/rrweb-snapshot.js","webpack://__ember_auto_import__/../../../src/coreHandlers/util/getAttributesToRecord.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleDom.ts","webpack://__ember_auto_import__/../../../src/util/createPerformanceEntries.ts","webpack://__ember_auto_import__/../../../src/util/log.ts","webpack://__ember_auto_import__/../../../src/eventBuffer/error.ts","webpack://__ember_auto_import__/../../../src/eventBuffer/EventBufferArray.ts","webpack://__ember_auto_import__/../../../src/eventBuffer/WorkerHandler.ts","webpack://__ember_auto_import__/../../../src/eventBuffer/EventBufferCompressionWorker.ts","webpack://__ember_auto_import__/../../../src/eventBuffer/EventBufferProxy.ts","webpack://__ember_auto_import__/../../../src/util/hasSessionStorage.ts","webpack://__ember_auto_import__/../../../src/util/isSampled.ts","webpack://__ember_auto_import__/../../../src/session/Session.ts","webpack://__ember_auto_import__/../../../src/session/saveSession.ts","webpack://__ember_auto_import__/../../../src/session/createSession.ts","webpack://__ember_auto_import__/../../../src/util/isExpired.ts","webpack://__ember_auto_import__/../../../src/util/isSessionExpired.ts","webpack://__ember_auto_import__/../../../src/session/shouldRefreshSession.ts","webpack://__ember_auto_import__/../../../src/session/loadOrCreateSession.ts","webpack://__ember_auto_import__/../../../src/session/fetchSession.ts","webpack://__ember_auto_import__/../../../src/util/addEvent.ts","webpack://__ember_auto_import__/../../../src/util/eventUtils.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleAfterSendEvent.ts","webpack://__ember_auto_import__/../../../src/util/createPerformanceSpans.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/util/addNetworkBreadcrumb.ts","webpack://__ember_auto_import__/../../../src/util/shouldFilterRequest.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/util/networkUtils.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/util/fetchUtils.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleScope.ts","webpack://__ember_auto_import__/../../../src/util/addGlobalListeners.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleHistory.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleNetworkBreadcrumbs.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/util/xhrUtils.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleFetch.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleXhr.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleGlobalEvent.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/util/addFeedbackBreadcrumb.ts","webpack://__ember_auto_import__/../../../src/util/isRrwebError.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/util/shouldSampleForBufferEvent.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleBeforeSendEvent.ts","webpack://__ember_auto_import__/../../../src/util/addMemoryEntry.ts","webpack://__ember_auto_import__/../../../src/util/handleRecordingEmit.ts","webpack://__ember_auto_import__/../../../src/types/rrweb.ts","webpack://__ember_auto_import__/../../../src/util/sendReplayRequest.ts","webpack://__ember_auto_import__/../../../src/util/prepareRecordingData.ts","webpack://__ember_auto_import__/../../../src/util/prepareReplayEvent.ts","webpack://__ember_auto_import__/../../../src/util/createReplayEnvelope.ts","webpack://__ember_auto_import__/../../../src/util/sendReplay.ts","webpack://__ember_auto_import__/../../../src/util/throttle.ts","webpack://__ember_auto_import__/../../../src/replay.ts","webpack://__ember_auto_import__/../../../src/util/debounce.ts","webpack://__ember_auto_import__/../../../src/session/clearSession.ts","webpack://__ember_auto_import__/../../../src/eventBuffer/index.ts","webpack://__ember_auto_import__/../../../replay-worker/build/npm/esm/index.js","webpack://__ember_auto_import__/../../../replay-worker/build/npm/esm/worker.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/performanceObserver.ts","webpack://__ember_auto_import__/../../../src/coreHandlers/handleKeyboardEvent.ts","webpack://__ember_auto_import__/../../../src/util/getPrivacyOptions.ts","webpack://__ember_auto_import__/../../../src/integration.ts","webpack://__ember_auto_import__/../../../src/util/maskAttribute.ts","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-worker/es/rrweb-worker/index.js","webpack://__ember_auto_import__/../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-worker/es/rrweb-worker/image-bitmap-data-url-worker.js","webpack://__ember_auto_import__/../../../src/canvas.ts","webpack://__ember_auto_import__/../../../src/sendFeedback.ts","webpack://__ember_auto_import__/../../../src/util/sendFeedbackRequest.ts","webpack://__ember_auto_import__/../../../src/util/prepareFeedbackEvent.ts","webpack://__ember_auto_import__/../../../src/util/mergeOptions.ts","webpack://__ember_auto_import__/../../../src/widget/Main.css.ts","webpack://__ember_auto_import__/../../../src/util/setAttributesNS.ts","webpack://__ember_auto_import__/../../../src/widget/util/createElement.ts","webpack://__ember_auto_import__/../../../src/widget/Form.ts","webpack://__ember_auto_import__/../../../src/widget/Logo.ts","webpack://__ember_auto_import__/../../../src/widget/createWidget.ts","webpack://__ember_auto_import__/../../../src/util/handleFeedbackSubmit.ts","webpack://__ember_auto_import__/../../../src/widget/SuccessMessage.ts","webpack://__ember_auto_import__/../../../src/widget/SuccessIcon.ts","webpack://__ember_auto_import__/../../../src/widget/Dialog.ts","webpack://__ember_auto_import__/../../../src/widget/SubmitButton.ts","webpack://__ember_auto_import__/../../../src/widget/Actor.ts","webpack://__ember_auto_import__/../../../src/widget/Icon.ts","webpack://__ember_auto_import__/../../../src/widget/Actor.css.ts","webpack://__ember_auto_import__/../../../src/widget/createShadowHost.ts","webpack://__ember_auto_import__/../../../src/widget/Dialog.css.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/getCLS.ts","webpack://__ember_auto_import__/../../../src/browser/web-vitals/getFID.ts","webpack://__ember_auto_import__/../../../src/browser/metrics/utils.ts","webpack://__ember_auto_import__/../../../src/browser/metrics/index.ts","webpack://__ember_auto_import__/../../../src/browser/request.ts","webpack://__ember_auto_import__/../../../src/common/fetch.ts","webpack://__ember_auto_import__/../../../src/browser/browsertracing.ts","webpack://__ember_auto_import__/../../../src/browser/router.ts","webpack://__ember_auto_import__/../../../src/browser/backgroundtab.ts","webpack://__ember_auto_import__/../../../src/transports/offline.ts","webpack://__ember_auto_import__/../../../src/profiling/utils.ts","webpack://__ember_auto_import__/../../../src/profiling/hubextensions.ts","webpack://__ember_auto_import__/../../../src/profiling/integration.ts","webpack://__ember_auto_import__/../../../src/index.ts","webpack://__ember_auto_import__/../../src/session-stores/adaptive.js","webpack://__ember_auto_import__/../../../src/link/context/index.ts","webpack://__ember_auto_import__/../../src/errors/index.ts","webpack://__ember_auto_import__/../../../src/utilities/common/objects.ts","webpack://__ember_auto_import__/../../../src/link/error/index.ts","webpack://__ember_auto_import__/../../../src/tracing/spanstatus.ts","webpack://__ember_auto_import__/../../src/sessionflusher.ts","webpack://__ember_auto_import__/../../src/checkin.ts","webpack://__ember_auto_import__/../../../src/metrics/aggregator.ts","webpack://__ember_auto_import__/../../src/server-runtime-client.ts","webpack://__ember_auto_import__/../../../src/integrations/requestdata.ts","webpack://__ember_auto_import__/../../../src/instrument/index.ts","webpack://__ember_auto_import__/../../src/path.ts","webpack://__ember_auto_import__/../../src/userIntegrations.ts","webpack://__ember_auto_import__/../../src/cache.ts","webpack://__ember_auto_import__/../../src/anr.ts","webpack://__ember_auto_import__/../../src/lru.ts","webpack://__ember_auto_import__/../../../src/buildPolyfills/_asyncNullishCoalesce.ts","webpack://__ember_auto_import__/../../../src/buildPolyfills/_asyncOptionalChain.ts","webpack://__ember_auto_import__/../../../src/buildPolyfills/_asyncOptionalChainDelete.ts","webpack://__ember_auto_import__/../../../src/buildPolyfills/_optionalChainDelete.ts","webpack://__ember_auto_import__/../../../src/vendor/escapeStringForRegex.ts","webpack://__ember_auto_import__/./node_modules/base64-js/index.js","webpack://__ember_auto_import__/./node_modules/chart.js/auto/auto.esm.js","webpack://__ember_auto_import__/./node_modules/chartjs-adapter-luxon/dist/chartjs-adapter-luxon.esm.js","webpack://__ember_auto_import__/../../src/services/cookies.ts","webpack://__ember_auto_import__/../../src/utils/serialize-cookie.ts","webpack://__ember_auto_import__/../../src/helpers/element.ts","webpack://__ember_auto_import__/../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://__ember_auto_import__/./-private/class-based/modifier-manager.ts","webpack://__ember_auto_import__/./-private/class-based/modifier.ts","webpack://__ember_auto_import__/./-private/function-based/modifier.ts","webpack://__ember_auto_import__/./-private/function-based/modifier-manager.ts","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/is-after.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/is-before.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/is-between.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/is-same-or-after.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/is-same-or-before.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/is-same.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-add.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-calendar.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-diff.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-duration.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-format.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-from-now.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-from.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-subtract.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-to-date.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-to-now.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment-to.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/moment.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/now.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/unix.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/helpers/utc.js","webpack://__ember_auto_import__/./node_modules/ember-moment/dist/services/moment.js","webpack://__ember_auto_import__/../../src/authenticators/base.js","webpack://__ember_auto_import__/../../src/internal-session.js","webpack://__ember_auto_import__/../../src/session-stores/ephemeral.js","webpack://__ember_auto_import__/../../src/session-stores/local-storage.js","webpack://__ember_auto_import__/../../src/session-stores/cookie.js","webpack://__ember_auto_import__/../../src/initializers/ember-simple-auth.js","webpack://__ember_auto_import__/../../src/initializers/setup-session.js","webpack://__ember_auto_import__/./configuration.js","webpack://__ember_auto_import__/../../src/services/session.js","webpack://__ember_auto_import__/../../src/-internals/routing.js","webpack://__ember_auto_import__/../../src/utils/inject.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat/node_modules/tslib/tslib.es6.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat/lib/src/error.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat/lib/src/formatters.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat/lib/src/core.js","webpack://__ember_auto_import__/./node_modules/intl-messageformat/lib/index.js","webpack://__ember_auto_import__/./node_modules/jwt-decode/build/cjs/index.js","webpack://__ember_auto_import__/../../src/-private/map.ts","webpack://__ember_auto_import__/../../src/-private/set.ts","webpack://__ember_auto_import__/../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js","webpack://__ember_auto_import__/../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js","webpack://__ember_auto_import__/../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js","webpack://__ember_auto_import__/../../src/-private/array.ts","webpack://__ember_auto_import__/../../src/-private/object.js","webpack://__ember_auto_import__/../../src/-private/decorator.ts","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/index.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/v1.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/regex.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/v3.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/md5.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/v4.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/native.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/v5.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/sha1.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/nil.js","webpack://__ember_auto_import__/./node_modules/uuid/dist/commonjs-browser/version.js","webpack://__ember_auto_import__/./node_modules/@ungap/structured-clone/esm/types.js","webpack://__ember_auto_import__/./node_modules/@ungap/structured-clone/esm/deserialize.js","webpack://__ember_auto_import__/./node_modules/@ungap/structured-clone/esm/serialize.js","webpack://__ember_auto_import__/./node_modules/@ungap/structured-clone/esm/index.js","webpack://__ember_auto_import__/./utils/is-object.ts","webpack://__ember_auto_import__/./-private/change.ts","webpack://__ember_auto_import__/./-private/err.ts","webpack://__ember_auto_import__/./utils/get-key-values.ts","webpack://__ember_auto_import__/./utils/is-promise.ts","webpack://__ember_auto_import__/./utils/handle-multiple-validations.ts","webpack://__ember_auto_import__/./utils/get-deep.ts","webpack://__ember_auto_import__/./utils/validator-lookup.ts","webpack://__ember_auto_import__/./-private/notifier.ts","webpack://__ember_auto_import__/./-private/evented.ts","webpack://__ember_auto_import__/./utils/has-key.ts","webpack://__ember_auto_import__/./utils/normalize-object.ts","webpack://__ember_auto_import__/./utils/has-changes.ts","webpack://__ember_auto_import__/./utils/assign.ts","webpack://__ember_auto_import__/./utils/flatten-validations.ts","webpack://__ember_auto_import__/./utils/is-changeset.ts","webpack://__ember_auto_import__/./utils/key-in-object.ts","webpack://__ember_auto_import__/./utils/array-object.ts","webpack://__ember_auto_import__/./utils/set-deep.ts","webpack://__ember_auto_import__/./utils/merge-nested.ts","webpack://__ember_auto_import__/./utils/build-old-values.ts","webpack://__ember_auto_import__/./utils/merge-deep.ts","webpack://__ember_auto_import__/./utils/object-tree-node.ts","webpack://__ember_auto_import__/./utils/object-without.ts","webpack://__ember_auto_import__/./utils/take.ts","webpack://__ember_auto_import__/./validated.ts","webpack://__ember_auto_import__/./index.ts","webpack://__ember_auto_import__/./node_modules/ember-simple-auth-oidc/node_modules/zen-observable-ts/module.js"],"sourcesContent":["//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        var flags = null,\n            parsedParts = false,\n            isNowValid = m._d && !isNaN(m._d.getTime());\n        if (isNowValid) {\n            flags = getParsingFlags(m);\n            parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            isNowValid =\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidEra &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n        }\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        } else {\n            return isNowValid;\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {\n        D: 'date',\n        dates: 'date',\n        date: 'date',\n        d: 'day',\n        days: 'day',\n        day: 'day',\n        e: 'weekday',\n        weekdays: 'weekday',\n        weekday: 'weekday',\n        E: 'isoWeekday',\n        isoweekdays: 'isoWeekday',\n        isoweekday: 'isoWeekday',\n        DDD: 'dayOfYear',\n        dayofyears: 'dayOfYear',\n        dayofyear: 'dayOfYear',\n        h: 'hour',\n        hours: 'hour',\n        hour: 'hour',\n        ms: 'millisecond',\n        milliseconds: 'millisecond',\n        millisecond: 'millisecond',\n        m: 'minute',\n        minutes: 'minute',\n        minute: 'minute',\n        M: 'month',\n        months: 'month',\n        month: 'month',\n        Q: 'quarter',\n        quarters: 'quarter',\n        quarter: 'quarter',\n        s: 'second',\n        seconds: 'second',\n        second: 'second',\n        gg: 'weekYear',\n        weekyears: 'weekYear',\n        weekyear: 'weekYear',\n        GG: 'isoWeekYear',\n        isoweekyears: 'isoWeekYear',\n        isoweekyear: 'isoWeekYear',\n        w: 'week',\n        weeks: 'week',\n        week: 'week',\n        W: 'isoWeek',\n        isoweeks: 'isoWeek',\n        isoweek: 'isoWeek',\n        y: 'year',\n        years: 'year',\n        year: 'year',\n    };\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {\n        date: 9,\n        day: 11,\n        weekday: 11,\n        isoWeekday: 11,\n        dayOfYear: 4,\n        hour: 13,\n        millisecond: 16,\n        minute: 14,\n        month: 8,\n        quarter: 7,\n        second: 15,\n        weekYear: 1,\n        isoWeekYear: 1,\n        week: 5,\n        isoWeek: 5,\n        year: 1,\n    };\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n        match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        if (!mom.isValid()) {\n            return NaN;\n        }\n\n        var d = mom._d,\n            isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n            case 'Seconds':\n                return isUTC ? d.getUTCSeconds() : d.getSeconds();\n            case 'Minutes':\n                return isUTC ? d.getUTCMinutes() : d.getMinutes();\n            case 'Hours':\n                return isUTC ? d.getUTCHours() : d.getHours();\n            case 'Date':\n                return isUTC ? d.getUTCDate() : d.getDate();\n            case 'Day':\n                return isUTC ? d.getUTCDay() : d.getDay();\n            case 'Month':\n                return isUTC ? d.getUTCMonth() : d.getMonth();\n            case 'FullYear':\n                return isUTC ? d.getUTCFullYear() : d.getFullYear();\n            default:\n                return NaN; // Just in case\n        }\n    }\n\n    function set$1(mom, unit, value) {\n        var d, isUTC, year, month, date;\n\n        if (!mom.isValid() || isNaN(value)) {\n            return;\n        }\n\n        d = mom._d;\n        isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return void (isUTC\n                    ? d.setUTCMilliseconds(value)\n                    : d.setMilliseconds(value));\n            case 'Seconds':\n                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n            case 'Minutes':\n                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n            case 'Hours':\n                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n            case 'Date':\n                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n            // case 'Day': // Not real\n            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n            // case 'Month': // Not used because we need to pass two variables\n            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n            case 'FullYear':\n                break; // See below ...\n            default:\n                return; // Just in case\n        }\n\n        year = value;\n        month = mom.month();\n        date = mom.date();\n        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n        void (isUTC\n            ? d.setUTCFullYear(year, month, date)\n            : d.setFullYear(year, month, date));\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // PARSING\n\n    addRegexToken('M', match1to2, match1to2NoLeadingZero);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        var month = value,\n            date = mom.date();\n\n        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n        void (mom._isUTC\n            ? mom._d.setUTCMonth(month, date)\n            : mom._d.setMonth(month, date));\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            shortP,\n            longP;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortP = regexEscape(this.monthsShort(mom, ''));\n            longP = regexEscape(this.months(mom, ''));\n            shortPieces.push(shortP);\n            longPieces.push(longP);\n            mixedPieces.push(longP);\n            mixedPieces.push(shortP);\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // PARSING\n\n    addRegexToken('w', match1to2, match1to2NoLeadingZero);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2, match1to2NoLeadingZero);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n              ? weekdays[m.day()]\n              : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n              ? this._weekdaysShort[m.day()]\n              : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n              ? this._weekdaysMin[m.day()]\n              : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        var day = get(this, 'Day');\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2, match1to2HasZero);\n    addRegexToken('h', match1to2, match1to2NoLeadingZero);\n    addRegexToken('k', match1to2, match1to2NoLeadingZero);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        // Ensure name is available and function returns boolean\n        return !!(name && name.match('^[^/\\\\\\\\]*$'));\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                      ? DATE\n                      : a[HOUR] < 0 ||\n                          a[HOUR] > 24 ||\n                          (a[HOUR] === 24 &&\n                              (a[MINUTE] !== 0 ||\n                                  a[SECOND] !== 0 ||\n                                  a[MILLISECOND] !== 0))\n                        ? HOUR\n                        : a[MINUTE] < 0 || a[MINUTE] > 59\n                          ? MINUTE\n                          : a[SECOND] < 0 || a[SECOND] > 59\n                            ? SECOND\n                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                              ? MILLISECOND\n                              : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n              ? 'lastWeek'\n              : diff < 0\n                ? 'lastDay'\n                : diff < 1\n                  ? 'sameDay'\n                  : diff < 2\n                    ? 'nextDay'\n                    : diff < 7\n                      ? 'nextWeek'\n                      : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            erasName,\n            erasAbbr,\n            erasNarrow,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            erasName = regexEscape(eras[i].name);\n            erasAbbr = regexEscape(eras[i].abbr);\n            erasNarrow = regexEscape(eras[i].narrow);\n\n            namePieces.push(erasName);\n            abbrPieces.push(erasAbbr);\n            narrowPieces.push(erasNarrow);\n            mixedPieces.push(erasName);\n            mixedPieces.push(erasAbbr);\n            mixedPieces.push(erasNarrow);\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday() + this.localeData()._week.dow,\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // PARSING\n\n    addRegexToken('D', match1to2, match1to2NoLeadingZero);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // PARSING\n\n    addRegexToken('m', match1to2, match1to2HasZero);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // PARSING\n\n    addRegexToken('s', match1to2, match1to2HasZero);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y'),\n        valueOf$1 = asMilliseconds;\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.30.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","import { run } from '@ember/runloop';\nimport Helper from '@ember/component/helper';\nimport { observer } from '@ember/object';\nimport { inject } from '@ember/service';\n\nvar BaseHelper = Helper.extend({\n  moment: inject(),\n  disableInterval: false,\n\n  get globalAllowEmpty() {\n    return this.moment.__config__.allowEmpty;\n  },\n\n  supportsGlobalAllowEmpty: true,\n  // eslint-disable-next-line ember/no-observers\n  localeOrTimeZoneChanged: observer('moment.locale', 'moment.timeZone', function () {\n    this.recompute();\n  }),\n\n  compute(value, {\n    interval\n  }) {\n    if (this.disableInterval) {\n      return;\n    }\n\n    this.clearTimer();\n\n    if (interval) {\n      /*\n       * NOTE: intentionally a setTimeout so tests do not block on it\n       * as the run loop queue is never clear so tests will stay locked waiting\n       * for queue to clear.\n       */\n      this.intervalTimer = setTimeout(() => {\n        run(() => this.recompute());\n      }, parseInt(interval, 10));\n    }\n  },\n\n  morphMoment(time, {\n    locale,\n    timeZone\n  }) {\n    const momentService = this.moment;\n    locale = locale || momentService.locale;\n    timeZone = timeZone || momentService.timeZone;\n\n    if (locale && time.locale) {\n      time = time.locale(locale);\n    }\n\n    if (timeZone && time.tz) {\n      time = time.tz(timeZone);\n    }\n\n    return time;\n  },\n\n  clearTimer() {\n    clearTimeout(this.intervalTimer);\n  },\n\n  destroy() {\n    this.clearTimer();\n\n    this._super(...arguments);\n  }\n\n});\n\nexport { BaseHelper as default };\n","import { isBlank } from '@ember/utils';\n\nfunction computeFn (cb) {\n  return function (params, hash) {\n    if (!params || params && params.length === 0) {\n      throw new TypeError('ember-moment: Invalid Number of arguments, expected at least 1');\n    }\n\n    const datetime = params[0];\n    let allowEmpty = hash.allowEmpty || hash['allow-empty'];\n\n    if (allowEmpty === undefined || allowEmpty === null) {\n      allowEmpty = this.globalAllowEmpty;\n    }\n\n    if (isBlank(datetime)) {\n      if (allowEmpty) {\n        return;\n      }\n      /* eslint-disable no-console */\n\n\n      console.warn(`ember-moment: an empty value (null, undefined, or \"\") was passed to ember-moment helper`);\n    }\n\n    return cb.apply(this, arguments);\n  };\n}\n\nexport { computeFn as c };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport type { ParameterizedString, PolymorphicEvent, Primitive } from '@sentry/types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\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: unknown): wat is Error {\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}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n  return objectToString.call(wat) === `[object ${className}]`;\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: unknown): boolean {\n  return isBuiltin(wat, 'ErrorEvent');\n}\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: unknown): boolean {\n  return isBuiltin(wat, 'DOMError');\n}\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: unknown): boolean {\n  return isBuiltin(wat, 'DOMException');\n}\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: unknown): wat is string {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isParameterizedString(wat: unknown): wat is ParameterizedString {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\n}\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: unknown): wat is Primitive {\n  return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record<string, unknown> {\n  return isBuiltin(wat, 'Object');\n}\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: unknown): wat is PolymorphicEvent {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\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: unknown): boolean {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\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: unknown): wat is RegExp {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike<any> {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\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: unknown): boolean {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isNaN(wat: unknown): boolean {\n  return typeof wat === 'number' && wat !== wat;\n}\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: any, base: any): boolean {\n  try {\n    return wat instanceof base;\n  } catch (_e) {\n    return false;\n  }\n}\n\ninterface VueViewModel {\n  // Vue3\n  __isVue?: boolean;\n  // Vue2\n  _isVue?: boolean;\n}\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isVueViewModel(wat: unknown): boolean {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  return !!(typeof wat === 'object' && wat !== null && ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue));\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 *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Integration } from '@sentry/types';\n\nimport type { SdkSource } from './env';\n\n/** Internal global with common properties and Sentry extensions  */\nexport interface InternalGlobal {\n  navigator?: { userAgent?: string };\n  console: Console;\n  Sentry?: {\n    Integrations?: Integration[];\n  };\n  onerror?: {\n    (event: object | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n    __SENTRY_INSTRUMENTED__?: true;\n    __SENTRY_LOADER__?: true;\n  };\n  onunhandledrejection?: {\n    (event: unknown): boolean;\n    __SENTRY_INSTRUMENTED__?: true;\n    __SENTRY_LOADER__?: true;\n  };\n  SENTRY_ENVIRONMENT?: string;\n  SENTRY_DSN?: string;\n  SENTRY_RELEASE?: {\n    id?: string;\n  };\n  SENTRY_SDK_SOURCE?: SdkSource;\n  /**\n   * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n   * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n   * file.\n   */\n  _sentryDebugIds?: Record<string, string>;\n  __SENTRY__: {\n    globalEventProcessors: any;\n    hub: any;\n    logger: any;\n    extensions?: {\n      /** Extension methods for the hub, which are bound to the current Hub instance */\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      [key: string]: Function;\n    };\n  };\n  /**\n   * Raw module metadata that is injected by bundler plugins.\n   *\n   * Keys are `error.stack` strings, values are the metadata.\n   */\n  _sentryModuleMetadata?: Record<string, any>;\n}\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj: { Math?: Math }): any | undefined {\n  return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ: InternalGlobal =\n  (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n  // eslint-disable-next-line no-restricted-globals\n  (typeof window == 'object' && isGlobalObj(window)) ||\n  (typeof self == 'object' && isGlobalObj(self)) ||\n  (typeof global == 'object' && isGlobalObj(global)) ||\n  (function (this: any) {\n    return this;\n  })() ||\n  {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nexport function getGlobalObject<T>(): T & InternalGlobal {\n  return GLOBAL_OBJ as T & InternalGlobal;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton<T>(name: keyof InternalGlobal['__SENTRY__'], creator: () => T, obj?: unknown): T {\n  const gbl = (obj || GLOBAL_OBJ) as InternalGlobal;\n  const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n  const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n  return singleton;\n}\n","import type { ConsoleLevel } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS: readonly ConsoleLevel[] = [\n  'debug',\n  'info',\n  'warn',\n  'error',\n  'log',\n  'assert',\n  'trace',\n] as const;\n\ntype LoggerMethod = (...args: unknown[]) => void;\ntype LoggerConsoleMethods = Record<ConsoleLevel, LoggerMethod>;\n\n/** This may be mutated by the console instrumentation. */\nexport const originalConsoleMethods: {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key in ConsoleLevel]?: (...args: any[]) => void;\n} = {};\n\n/** JSDoc */\ninterface Logger extends LoggerConsoleMethods {\n  disable(): void;\n  enable(): void;\n  isEnabled(): boolean;\n}\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox<T>(callback: () => T): T {\n  if (!('console' in GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = GLOBAL_OBJ.console as Console;\n  const wrappedFuncs: Partial<LoggerConsoleMethods> = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) as ConsoleLevel[];\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level] as LoggerMethod;\n    wrappedFuncs[level] = console[level] as LoggerMethod | undefined;\n    console[level] = originalConsoleMethod;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] as LoggerMethod;\n    });\n  }\n}\n\nfunction makeLogger(): Logger {\n  let enabled = false;\n  const logger: Partial<Logger> = {\n    enable: () => {\n      enabled = true;\n    },\n    disable: () => {\n      enabled = false;\n    },\n    isEnabled: () => enabled,\n  };\n\n  if (DEBUG_BUILD) {\n    CONSOLE_LEVELS.forEach(name => {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      logger[name] = (...args: any[]) => {\n        if (enabled) {\n          consoleSandbox(() => {\n            GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n          });\n        }\n      };\n    });\n  } else {\n    CONSOLE_LEVELS.forEach(name => {\n      logger[name] = () => undefined;\n    });\n  }\n\n  return logger as Logger;\n}\n\nexport const logger = makeLogger();\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { DEBUG_BUILD } from './debug-build';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { logger } from './logger';\nimport { truncate } from './string';\n\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: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n  if (!(name in source)) {\n    return;\n  }\n\n  const original = source[name] as () => any;\n  const wrapped = replacementFactory(original) as WrappedFunction;\n\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    markFunctionWrapped(wrapped, original);\n  }\n\n  source[name] = wrapped;\n}\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: object, name: string, value: unknown): void {\n  try {\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  } catch (o_O) {\n    DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n  }\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: WrappedFunction, original: WrappedFunction): void {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch (o_O) {} // eslint-disable-line no-empty\n}\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: WrappedFunction): WrappedFunction | undefined {\n  return func.__sentry_original__;\n}\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: { [key: string]: any }): string {\n  return Object.keys(object)\n    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n    .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n *  an Error.\n */\nexport function convertToPlainObject<V>(\n  value: V,\n):\n  | {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    }\n  | {\n      [ownProps: string]: unknown;\n      message: string;\n      name: string;\n      stack?: string;\n    }\n  | V {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  } else if (isEvent(value)) {\n    const newObj: {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    } = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    };\n\n    if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n      newObj.detail = value.detail;\n    }\n\n    return newObj;\n  } else {\n    return value;\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n  try {\n    return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps: { [key: string]: unknown } = {};\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj as Record<string, unknown>)[property];\n      }\n    }\n    return extractedProps;\n  } else {\n    return {};\n  }\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 */\nexport function extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength: number = 40): string {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n\n  if (!keys.length) {\n    return '[object has no keys]';\n  }\n\n  if (keys[0].length >= maxLength) {\n    return truncate(keys[0], maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const 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\n  return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nexport function dropUndefinedKeys<T>(inputValue: T): T {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map<unknown, unknown>();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys<T>(inputValue: T, memoizationMap: Map<unknown, unknown>): T {\n  if (isPojo(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: { [key: string]: any } = {};\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    for (const key of Object.keys(inputValue)) {\n      if (typeof inputValue[key] !== 'undefined') {\n        returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n      }\n    }\n\n    return returnValue as T;\n  }\n\n  if (Array.isArray(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: unknown[] = [];\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach((item: unknown) => {\n      returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n    });\n\n    return returnValue as unknown as T;\n  }\n\n  return inputValue;\n}\n\nfunction isPojo(input: unknown): input is Record<string, unknown> {\n  if (!isPlainObject(input)) {\n    return false;\n  }\n\n  try {\n    const name = (Object.getPrototypeOf(input) as { constructor: { name: string } }).constructor.name;\n    return !name || name === 'Object';\n  } catch {\n    return true;\n  }\n}\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: unknown): typeof Object {\n  let objectified;\n  switch (true) {\n    case wat === undefined || wat === null:\n      objectified = new String(wat);\n      break;\n\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\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 as any).constructor(wat);\n      break;\n\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","import { isRegExp, isString, isVueViewModel } from './is';\n\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex';\n\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: string, max: number = 0): string {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\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: string, colno: number): string {\n  let newLine = line;\n  const 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\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let 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\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\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: any[], delimiter?: string): string {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if (isVueViewModel(value)) {\n        output.push('[VueViewModel]');\n      } else {\n        output.push(String(value));\n      }\n    } catch (e) {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n  value: string,\n  pattern: RegExp | string,\n  requireExactStringMatch: boolean = false,\n): boolean {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n  testString: string,\n  patterns: Array<string | RegExp> = [],\n  requireExactStringMatch: boolean = false,\n): boolean {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n","import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\n\n//\n// Apps shouldn't need to use this, because they should pick one or the other\n// and import it directly.\n//\n// An addon that depends on ember-moment and needs moment-timezone should\n// declare a peerDep on moment-timezone and import moment-timezone directly, and\n// therefore the addon should not need to use this.\n//\n// An addon that depends on ember-moment and doesn't care about timezone\n// features should declare optional peerDeps on both moment and moment-timezone,\n// allowing the app to pick either. In this scenario, the addon may want to use\n// this to get convenient access to whichever the app picked.\n\nconst momentOrMomentTimezone = (() => {\n  if (macroCondition(dependencySatisfies('moment-timezone', '*'))) {\n    return importSync('moment-timezone').default;\n  } else if (macroCondition(dependencySatisfies('moment', '*'))) {\n    return importSync('moment').default;\n  } else {\n    throw new Error(`ember-moment was unable to detect either moment-timezone or moment. Please add one of those to your app.`);\n  }\n})();\n\nexport { momentOrMomentTimezone };\n","export default function esCompat(m) {\n  return m?.__esModule ? m : { default: m, ...m };\n}\n","import type { Primitive } from '@sentry/types';\n\nimport { isNaN, isSyntheticEvent, isVueViewModel } from './is';\nimport type { MemoFunc } from './memo';\nimport { memoBuilder } from './memo';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray<T> = { [key: string]: T };\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  object: { [key: string]: any },\n  // Default Node.js REPL depth\n  depth: number = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize: number = 100 * 1024,\n): T {\n  const normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key: string,\n  value: unknown,\n  depth: number = +Infinity,\n  maxProperties: number = +Infinity,\n  memo: MemoFunc = memoBuilder(),\n): Primitive | ObjOrArray<unknown> {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))\n  ) {\n    return value as Primitive;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. As a general rule, the\n  // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n  // have already been normalized.\n  if ((value as ObjOrArray<unknown>)['__sentry_skip_normalization__']) {\n    return value as ObjOrArray<unknown>;\n  }\n\n  // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n  // We keep a certain amount of depth.\n  // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n  const remainingDepth =\n    typeof (value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] === 'number'\n      ? ((value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] as number)\n      : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch (err) {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray<unknown>;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = convertToPlainObject(value as ObjOrArray<unknown>);\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n/**\n * @deprecated This export will be removed in v8.\n */\nexport { visit as walk };\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n  key: unknown,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value: Exclude<unknown, string | number | boolean | null>,\n): string {\n  try {\n    if (key === 'domain' && value && typeof value === 'object' && (value as { _events: unknown })._events) {\n      return '[Domain]';\n    }\n\n    if (key === 'domainEmitter') {\n      return '[DomainEmitter]';\n    }\n\n    // It's safe to use `global`, `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\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n      return '[Window]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n      return '[Document]';\n    }\n\n    if (isVueViewModel(value)) {\n      return '[VueViewModel]';\n    }\n\n    // React's SyntheticEvent thingy\n    if (isSyntheticEvent(value)) {\n      return '[SyntheticEvent]';\n    }\n\n    if (typeof value === 'number' && value !== value) {\n      return '[NaN]';\n    }\n\n    if (typeof value === 'function') {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    // Handle HTML Elements\n    if (/^HTML(\\w*)Element$/.test(objName)) {\n      return `[HTMLElement: ${objName}]`;\n    }\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n  const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n  return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n  return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nexport function normalizeUrlToBase(url: string, basePath: string): string {\n  const escapedBase = basePath\n    // Backslash to forward\n    .replace(/\\\\/g, '/')\n    // Escape RegExp special characters\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch (_Oo) {\n    // Sometime this breaks\n  }\n  return (\n    newUrl\n      .replace(/\\\\/g, '/')\n      .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n      // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n      .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n  );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Event, Exception, Mechanism, StackFrame } from '@sentry/types';\n\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n  getRandomValues(array: Uint8Array): Uint8Array;\n  randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n  msCrypto?: CryptoInternal;\n  crypto?: CryptoInternal;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n  const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n  const crypto = gbl.crypto || gbl.msCrypto;\n\n  let getRandomByte = (): number => Math.random() * 16;\n  try {\n    if (crypto && crypto.randomUUID) {\n      return crypto.randomUUID().replace(/-/g, '');\n    }\n    if (crypto && crypto.getRandomValues) {\n      getRandomByte = () => {\n        // crypto.getRandomValues might return undefined instead of the typed array\n        // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n        // However, `typedArray` is still filled in-place.\n        // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n        const typedArray = new Uint8Array(1);\n        crypto.getRandomValues(typedArray);\n        return typedArray[0];\n      };\n    }\n  } catch (_) {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n  return (([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n  return event.exception && event.exception.values ? event.exception.values[0] : undefined;\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: Event): string {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n\n  const 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/**\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: Event, value?: string, type?: string): void {\n  const exception = (event.exception = event.exception || {});\n  const values = (exception.values = exception.values || []);\n  const 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/**\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: Event, newMechanism?: Partial<Mechanism>): void {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(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/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n  major?: number;\n  minor?: number;\n  patch?: number;\n  prerelease?: string;\n  buildmetadata?: string;\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = parseInt(match[1], 10);\n  const minor = parseInt(match[2], 10);\n  const 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}\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: string[], frame: StackFrame, linesOfContext: number = 5): void {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line: string) => snipLine(line, 0));\n\n  frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line: string) => snipLine(line, 0));\n}\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: unknown): boolean {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (exception && (exception as any).__sentry_captured__) {\n    return true;\n  }\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 as { [key: string]: unknown }, '__sentry_captured__', true);\n  } catch (err) {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nexport function arrayify<T = unknown>(maybeArray: T | T[]): T[] {\n  return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nexports.unsafeStringify = unsafeStringify;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nfunction unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!(0, _validate.default)(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;","\nfunction callbacksFor(object) {\n  var callbacks = object._promiseCallbacks;\n\n  if (!callbacks) {\n    callbacks = object._promiseCallbacks = {};\n  }\n\n  return callbacks;\n}\n\n/**\n  @class EventTarget\n  @for rsvp\n  @public\n*/\nexport default {\n\n  /**\n    `EventTarget.mixin` extends an object with EventTarget methods. For\n    Example:\n     ```javascript\n    import EventTarget from 'rsvp';\n     let object = {};\n     EventTarget.mixin(object);\n     object.on('finished', function(event) {\n      // handle event\n    });\n     object.trigger('finished', { detail: value });\n    ```\n     `EventTarget.mixin` also works with prototypes:\n     ```javascript\n    import EventTarget from 'rsvp';\n     let Person = function() {};\n    EventTarget.mixin(Person.prototype);\n     let yehuda = new Person();\n    let tom = new Person();\n     yehuda.on('poke', function(event) {\n      console.log('Yehuda says OW');\n    });\n     tom.on('poke', function(event) {\n      console.log('Tom says OW');\n    });\n     yehuda.trigger('poke');\n    tom.trigger('poke');\n    ```\n     @method mixin\n    @for rsvp\n    @private\n    @param {Object} object object to extend with EventTarget methods\n  */\n  mixin: function (object) {\n    object.on = this.on;\n    object.off = this.off;\n    object.trigger = this.trigger;\n    object._promiseCallbacks = undefined;\n    return object;\n  },\n\n\n  /**\n    Registers a callback to be executed when `eventName` is triggered\n     ```javascript\n    object.on('event', function(eventInfo){\n      // handle the event\n    });\n     object.trigger('event');\n    ```\n     @method on\n    @for EventTarget\n    @private\n    @param {String} eventName name of the event to listen for\n    @param {Function} callback function to be called when the event is triggered.\n  */\n  on: function (eventName, callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('Callback must be a function');\n    }\n\n    var allCallbacks = callbacksFor(this);\n    var callbacks = allCallbacks[eventName];\n\n    if (!callbacks) {\n      callbacks = allCallbacks[eventName] = [];\n    }\n\n    if (callbacks.indexOf(callback) === -1) {\n      callbacks.push(callback);\n    }\n  },\n\n\n  /**\n    You can use `off` to stop firing a particular callback for an event:\n     ```javascript\n    function doStuff() { // do stuff! }\n    object.on('stuff', doStuff);\n     object.trigger('stuff'); // doStuff will be called\n     // Unregister ONLY the doStuff callback\n    object.off('stuff', doStuff);\n    object.trigger('stuff'); // doStuff will NOT be called\n    ```\n     If you don't pass a `callback` argument to `off`, ALL callbacks for the\n    event will not be executed when the event fires. For example:\n     ```javascript\n    let callback1 = function(){};\n    let callback2 = function(){};\n     object.on('stuff', callback1);\n    object.on('stuff', callback2);\n     object.trigger('stuff'); // callback1 and callback2 will be executed.\n     object.off('stuff');\n    object.trigger('stuff'); // callback1 and callback2 will not be executed!\n    ```\n     @method off\n    @for rsvp\n    @private\n    @param {String} eventName event to stop listening to\n    @param {Function} [callback] optional argument. If given, only the function\n    given will be removed from the event's callback queue. If no `callback`\n    argument is given, all callbacks will be removed from the event's callback\n    queue.\n  */\n  off: function (eventName, callback) {\n    var allCallbacks = callbacksFor(this);\n\n    if (!callback) {\n      allCallbacks[eventName] = [];\n      return;\n    }\n\n    var callbacks = allCallbacks[eventName];\n    var index = callbacks.indexOf(callback);\n\n    if (index !== -1) {\n      callbacks.splice(index, 1);\n    }\n  },\n\n\n  /**\n    Use `trigger` to fire custom events. For example:\n     ```javascript\n    object.on('foo', function(){\n      console.log('foo event happened!');\n    });\n    object.trigger('foo');\n    // 'foo event happened!' logged to the console\n    ```\n     You can also pass a value as a second argument to `trigger` that will be\n    passed as an argument to all event listeners for the event:\n     ```javascript\n    object.on('foo', function(value){\n      console.log(value.name);\n    });\n     object.trigger('foo', { name: 'bar' });\n    // 'bar' logged to the console\n    ```\n     @method trigger\n    @for rsvp\n    @private\n    @param {String} eventName name of the event to be triggered\n    @param {*} [options] optional value to be passed to any event handlers for\n    the given `eventName`\n  */\n  trigger: function (eventName, options, label) {\n    var allCallbacks = callbacksFor(this);\n\n    var callbacks = allCallbacks[eventName];\n    if (callbacks) {\n      // Don't cache the callbacks.length since it may grow\n      var callback = void 0;\n      for (var i = 0; i < callbacks.length; i++) {\n        callback = callbacks[i];\n        callback(options, label);\n      }\n    }\n  }\n};","import EventTarget from './events';\n\nvar config = {\n  instrument: false\n};\n\nEventTarget['mixin'](config);\n\nfunction configure(name, value) {\n  if (arguments.length === 2) {\n    config[name] = value;\n  } else {\n    return config[name];\n  }\n}\n\nexport { config, configure };","import { config } from './config';\n\nvar queue = [];\n\nfunction scheduleFlush() {\n  setTimeout(function () {\n    for (var i = 0; i < queue.length; i++) {\n      var entry = queue[i];\n\n      var payload = entry.payload;\n\n      payload.guid = payload.key + payload.id;\n      payload.childGuid = payload.key + payload.childId;\n      if (payload.error) {\n        payload.stack = payload.error.stack;\n      }\n\n      config['trigger'](entry.name, entry.payload);\n    }\n    queue.length = 0;\n  }, 50);\n}\n\nexport default function instrument(eventName, promise, child) {\n  if (1 === queue.push({\n    name: eventName,\n    payload: {\n      key: promise._guidKey,\n      id: promise._id,\n      eventName: eventName,\n      detail: promise._result,\n      childId: child && child._id,\n      label: promise._label,\n      timeStamp: Date.now(),\n      error: config[\"instrument-with-stack\"] ? new Error(promise._label) : null\n    } })) {\n    scheduleFlush();\n  }\n}","import { noop, resolve as _resolve } from '../-internal';\n\n/**\n  `Promise.resolve` returns a promise that will become resolved with the\n  passed `value`. It is shorthand for the following:\n\n  ```javascript\n  import Promise from 'rsvp';\n\n  let promise = new Promise(function(resolve, reject){\n    resolve(1);\n  });\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  import Promise from 'rsvp';\n\n  let promise = RSVP.Promise.resolve(1);\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  @method resolve\n  @for Promise\n  @static\n  @param {*} object value that the returned promise will be resolved with\n  @param {String} [label] optional string for identifying the returned promise.\n  Useful for tooling.\n  @return {Promise} a promise that will become fulfilled with the given\n  `value`\n*/\nexport default function resolve(object, label) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (object && typeof object === 'object' && object.constructor === Constructor) {\n    return object;\n  }\n\n  var promise = new Constructor(noop, label);\n  _resolve(promise, object);\n  return promise;\n}","import originalThen from './then';\nimport originalResolve from './promise/resolve';\nimport instrument from './instrument';\n\nimport { config } from './config';\nimport Promise from './promise';\n\nfunction withOwnPromise() {\n  return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction objectOrFunction(x) {\n  var type = typeof x;\n  return x !== null && (type === 'object' || type === 'function');\n}\n\nexport function noop() {}\n\nexport var PENDING = void 0;\nexport var FULFILLED = 1;\nexport var REJECTED = 2;\n\nexport var TRY_CATCH_ERROR = { error: null };\n\nexport function getThen(promise) {\n  try {\n    return promise.then;\n  } catch (error) {\n    TRY_CATCH_ERROR.error = error;\n    return TRY_CATCH_ERROR;\n  }\n}\n\nvar tryCatchCallback = void 0;\nfunction tryCatcher() {\n  try {\n    var target = tryCatchCallback;\n    tryCatchCallback = null;\n    return target.apply(this, arguments);\n  } catch (e) {\n    TRY_CATCH_ERROR.error = e;\n    return TRY_CATCH_ERROR;\n  }\n}\n\nexport function tryCatch(fn) {\n  tryCatchCallback = fn;\n  return tryCatcher;\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n  config.async(function (promise) {\n    var sealed = false;\n    var result = tryCatch(then).call(thenable, function (value) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n      if (thenable === value) {\n        fulfill(promise, value);\n      } else {\n        resolve(promise, value);\n      }\n    }, function (reason) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n\n      reject(promise, reason);\n    }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n    if (!sealed && result === TRY_CATCH_ERROR) {\n      sealed = true;\n      var error = TRY_CATCH_ERROR.error;\n      TRY_CATCH_ERROR.error = null;\n      reject(promise, error);\n    }\n  }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n  if (thenable._state === FULFILLED) {\n    fulfill(promise, thenable._result);\n  } else if (thenable._state === REJECTED) {\n    thenable._onError = null;\n    reject(promise, thenable._result);\n  } else {\n    subscribe(thenable, undefined, function (value) {\n      if (thenable === value) {\n        fulfill(promise, value);\n      } else {\n        resolve(promise, value);\n      }\n    }, function (reason) {\n      return reject(promise, reason);\n    });\n  }\n}\n\nexport function handleMaybeThenable(promise, maybeThenable, then) {\n  var isOwnThenable = maybeThenable.constructor === promise.constructor && then === originalThen && promise.constructor.resolve === originalResolve;\n\n  if (isOwnThenable) {\n    handleOwnThenable(promise, maybeThenable);\n  } else if (then === TRY_CATCH_ERROR) {\n    var error = TRY_CATCH_ERROR.error;\n    TRY_CATCH_ERROR.error = null;\n    reject(promise, error);\n  } else if (typeof then === 'function') {\n    handleForeignThenable(promise, maybeThenable, then);\n  } else {\n    fulfill(promise, maybeThenable);\n  }\n}\n\nexport function resolve(promise, value) {\n  if (promise === value) {\n    fulfill(promise, value);\n  } else if (objectOrFunction(value)) {\n    handleMaybeThenable(promise, value, getThen(value));\n  } else {\n    fulfill(promise, value);\n  }\n}\n\nexport function publishRejection(promise) {\n  if (promise._onError) {\n    promise._onError(promise._result);\n  }\n\n  publish(promise);\n}\n\nexport function fulfill(promise, value) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n\n  promise._result = value;\n  promise._state = FULFILLED;\n\n  if (promise._subscribers.length === 0) {\n    if (config.instrument) {\n      instrument('fulfilled', promise);\n    }\n  } else {\n    config.async(publish, promise);\n  }\n}\n\nexport function reject(promise, reason) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n  promise._state = REJECTED;\n  promise._result = reason;\n  config.async(publishRejection, promise);\n}\n\nexport function subscribe(parent, child, onFulfillment, onRejection) {\n  var subscribers = parent._subscribers;\n  var length = subscribers.length;\n\n  parent._onError = null;\n\n  subscribers[length] = child;\n  subscribers[length + FULFILLED] = onFulfillment;\n  subscribers[length + REJECTED] = onRejection;\n\n  if (length === 0 && parent._state) {\n    config.async(publish, parent);\n  }\n}\n\nexport function publish(promise) {\n  var subscribers = promise._subscribers;\n  var settled = promise._state;\n\n  if (config.instrument) {\n    instrument(settled === FULFILLED ? 'fulfilled' : 'rejected', promise);\n  }\n\n  if (subscribers.length === 0) {\n    return;\n  }\n\n  var child = void 0,\n      callback = void 0,\n      result = promise._result;\n\n  for (var i = 0; i < subscribers.length; i += 3) {\n    child = subscribers[i];\n    callback = subscribers[i + settled];\n\n    if (child) {\n      invokeCallback(settled, child, callback, result);\n    } else {\n      callback(result);\n    }\n  }\n\n  promise._subscribers.length = 0;\n}\n\nexport function invokeCallback(state, promise, callback, result) {\n  var hasCallback = typeof callback === 'function';\n  var value = void 0;\n\n  if (hasCallback) {\n    value = tryCatch(callback)(result);\n  } else {\n    value = result;\n  }\n\n  if (promise._state !== PENDING) {\n    // noop\n  } else if (value === promise) {\n    reject(promise, withOwnPromise());\n  } else if (value === TRY_CATCH_ERROR) {\n    var error = TRY_CATCH_ERROR.error;\n    TRY_CATCH_ERROR.error = null; // release\n    reject(promise, error);\n  } else if (hasCallback) {\n    resolve(promise, value);\n  } else if (state === FULFILLED) {\n    fulfill(promise, value);\n  } else if (state === REJECTED) {\n    reject(promise, value);\n  }\n}\n\nexport function initializePromise(promise, resolver) {\n  var resolved = false;\n  try {\n    resolver(function (value) {\n      if (resolved) {\n        return;\n      }\n      resolved = true;\n      resolve(promise, value);\n    }, function (reason) {\n      if (resolved) {\n        return;\n      }\n      resolved = true;\n      reject(promise, reason);\n    });\n  } catch (e) {\n    reject(promise, e);\n  }\n}","import { config } from './config';\nimport instrument from './instrument';\nimport { noop, subscribe, FULFILLED, REJECTED, PENDING, invokeCallback } from './-internal';\n\nexport default function then(onFulfillment, onRejection, label) {\n  var parent = this;\n  var state = parent._state;\n\n  if (state === FULFILLED && !onFulfillment || state === REJECTED && !onRejection) {\n    config.instrument && instrument('chained', parent, parent);\n    return parent;\n  }\n\n  parent._onError = null;\n\n  var child = new parent.constructor(noop, label);\n  var result = parent._result;\n\n  config.instrument && instrument('chained', parent, child);\n\n  if (state === PENDING) {\n    subscribe(parent, child, onFulfillment, onRejection);\n  } else {\n    var callback = state === FULFILLED ? onFulfillment : onRejection;\n    config.async(function () {\n      return invokeCallback(state, child, callback, result);\n    });\n  }\n\n  return child;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { noop, resolve, handleMaybeThenable, reject, fulfill, subscribe, FULFILLED, REJECTED, PENDING, getThen } from './-internal';\n\nimport { default as OwnPromise } from './promise';\nimport ownThen from './then';\nimport ownResolve from './promise/resolve';\n\nvar Enumerator = function () {\n  function Enumerator(Constructor, input, abortOnReject, label) {\n    this._instanceConstructor = Constructor;\n    this.promise = new Constructor(noop, label);\n    this._abortOnReject = abortOnReject;\n    this._isUsingOwnPromise = Constructor === OwnPromise;\n    this._isUsingOwnResolve = Constructor.resolve === ownResolve;\n\n    this._init.apply(this, arguments);\n  }\n\n  Enumerator.prototype._init = function _init(Constructor, input) {\n    var len = input.length || 0;\n    this.length = len;\n    this._remaining = len;\n    this._result = new Array(len);\n\n    this._enumerate(input);\n  };\n\n  Enumerator.prototype._enumerate = function _enumerate(input) {\n    var length = this.length;\n    var promise = this.promise;\n\n    for (var i = 0; promise._state === PENDING && i < length; i++) {\n      this._eachEntry(input[i], i, true);\n    }\n    this._checkFullfillment();\n  };\n\n  Enumerator.prototype._checkFullfillment = function _checkFullfillment() {\n    if (this._remaining === 0) {\n      var result = this._result;\n      fulfill(this.promise, result);\n      this._result = null;\n    }\n  };\n\n  Enumerator.prototype._settleMaybeThenable = function _settleMaybeThenable(entry, i, firstPass) {\n    var c = this._instanceConstructor;\n\n    if (this._isUsingOwnResolve) {\n      var then = getThen(entry);\n\n      if (then === ownThen && entry._state !== PENDING) {\n        entry._onError = null;\n        this._settledAt(entry._state, i, entry._result, firstPass);\n      } else if (typeof then !== 'function') {\n        this._settledAt(FULFILLED, i, entry, firstPass);\n      } else if (this._isUsingOwnPromise) {\n        var promise = new c(noop);\n        handleMaybeThenable(promise, entry, then);\n        this._willSettleAt(promise, i, firstPass);\n      } else {\n        this._willSettleAt(new c(function (resolve) {\n          return resolve(entry);\n        }), i, firstPass);\n      }\n    } else {\n      this._willSettleAt(c.resolve(entry), i, firstPass);\n    }\n  };\n\n  Enumerator.prototype._eachEntry = function _eachEntry(entry, i, firstPass) {\n    if (entry !== null && typeof entry === 'object') {\n      this._settleMaybeThenable(entry, i, firstPass);\n    } else {\n      this._setResultAt(FULFILLED, i, entry, firstPass);\n    }\n  };\n\n  Enumerator.prototype._settledAt = function _settledAt(state, i, value, firstPass) {\n    var promise = this.promise;\n\n    if (promise._state === PENDING) {\n      if (this._abortOnReject && state === REJECTED) {\n        reject(promise, value);\n      } else {\n        this._setResultAt(state, i, value, firstPass);\n        this._checkFullfillment();\n      }\n    }\n  };\n\n  Enumerator.prototype._setResultAt = function _setResultAt(state, i, value, firstPass) {\n    this._remaining--;\n    this._result[i] = value;\n  };\n\n  Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i, firstPass) {\n    var _this = this;\n\n    subscribe(promise, undefined, function (value) {\n      return _this._settledAt(FULFILLED, i, value, firstPass);\n    }, function (reason) {\n      return _this._settledAt(REJECTED, i, reason, firstPass);\n    });\n  };\n\n  return Enumerator;\n}();\n\nexport default Enumerator;\n\n\nexport function setSettledResult(state, i, value) {\n  this._remaining--;\n  if (state === FULFILLED) {\n    this._result[i] = {\n      state: 'fulfilled',\n      value: value\n    };\n  } else {\n    this._result[i] = {\n      state: 'rejected',\n      reason: value\n    };\n  }\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { config } from './config';\nimport instrument from './instrument';\nimport then from './then';\n\nimport { noop, initializePromise } from './-internal';\n\nimport all from './promise/all';\nimport race from './promise/race';\nimport Resolve from './promise/resolve';\nimport Reject from './promise/reject';\n\nvar guidKey = 'rsvp_' + Date.now() + '-';\nvar counter = 0;\n\nfunction needsResolver() {\n  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n  throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n  Promise objects represent the eventual result of an asynchronous operation. The\n  primary way of interacting with a promise is through its `then` method, which\n  registers callbacks to receive either a promise’s eventual value or the reason\n  why the promise cannot be fulfilled.\n\n  Terminology\n  -----------\n\n  - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n  - `thenable` is an object or function that defines a `then` method.\n  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n  - `exception` is a value that is thrown using the throw statement.\n  - `reason` is a value that indicates why a promise was rejected.\n  - `settled` the final resting state of a promise, fulfilled or rejected.\n\n  A promise can be in one of three states: pending, fulfilled, or rejected.\n\n  Promises that are fulfilled have a fulfillment value and are in the fulfilled\n  state.  Promises that are rejected have a rejection reason and are in the\n  rejected state.  A fulfillment value is never a thenable.\n\n  Promises can also be said to *resolve* a value.  If this value is also a\n  promise, then the original promise's settled state will match the value's\n  settled state.  So a promise that *resolves* a promise that rejects will\n  itself reject, and a promise that *resolves* a promise that fulfills will\n  itself fulfill.\n\n\n  Basic Usage:\n  ------------\n\n  ```js\n  let promise = new Promise(function(resolve, reject) {\n    // on success\n    resolve(value);\n\n    // on failure\n    reject(reason);\n  });\n\n  promise.then(function(value) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Advanced Usage:\n  ---------------\n\n  Promises shine when abstracting away asynchronous interactions such as\n  `XMLHttpRequest`s.\n\n  ```js\n  function getJSON(url) {\n    return new Promise(function(resolve, reject){\n      let xhr = new XMLHttpRequest();\n\n      xhr.open('GET', url);\n      xhr.onreadystatechange = handler;\n      xhr.responseType = 'json';\n      xhr.setRequestHeader('Accept', 'application/json');\n      xhr.send();\n\n      function handler() {\n        if (this.readyState === this.DONE) {\n          if (this.status === 200) {\n            resolve(this.response);\n          } else {\n            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n          }\n        }\n      };\n    });\n  }\n\n  getJSON('/posts.json').then(function(json) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Unlike callbacks, promises are great composable primitives.\n\n  ```js\n  Promise.all([\n    getJSON('/posts'),\n    getJSON('/comments')\n  ]).then(function(values){\n    values[0] // => postsJSON\n    values[1] // => commentsJSON\n\n    return values;\n  });\n  ```\n\n  @class Promise\n  @public\n  @param {function} resolver\n  @param {String} [label] optional string for labeling the promise.\n  Useful for tooling.\n  @constructor\n*/\n\nvar Promise = function () {\n  function Promise(resolver, label) {\n    this._id = counter++;\n    this._label = label;\n    this._state = undefined;\n    this._result = undefined;\n    this._subscribers = [];\n\n    config.instrument && instrument('created', this);\n\n    if (noop !== resolver) {\n      typeof resolver !== 'function' && needsResolver();\n      this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n    }\n  }\n\n  Promise.prototype._onError = function _onError(reason) {\n    var _this = this;\n\n    config.after(function () {\n      if (_this._onError) {\n        config.trigger('error', reason, _this._label);\n      }\n    });\n  };\n\n  /**\n    `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n    as the catch block of a try/catch statement.\n  \n    ```js\n    function findAuthor(){\n      throw new Error('couldn\\'t find that author');\n    }\n  \n    // synchronous\n    try {\n      findAuthor();\n    } catch(reason) {\n      // something went wrong\n    }\n  \n    // async with promises\n    findAuthor().catch(function(reason){\n      // something went wrong\n    });\n    ```\n  \n    @method catch\n    @param {Function} onRejection\n    @param {String} [label] optional string for labeling the promise.\n    Useful for tooling.\n    @return {Promise}\n  */\n\n\n  Promise.prototype.catch = function _catch(onRejection, label) {\n    return this.then(undefined, onRejection, label);\n  };\n\n  /**\n    `finally` will be invoked regardless of the promise's fate just as native\n    try/catch/finally behaves\n  \n    Synchronous example:\n  \n    ```js\n    findAuthor() {\n      if (Math.random() > 0.5) {\n        throw new Error();\n      }\n      return new Author();\n    }\n  \n    try {\n      return findAuthor(); // succeed or fail\n    } catch(error) {\n      return findOtherAuthor();\n    } finally {\n      // always runs\n      // doesn't affect the return value\n    }\n    ```\n  \n    Asynchronous example:\n  \n    ```js\n    findAuthor().catch(function(reason){\n      return findOtherAuthor();\n    }).finally(function(){\n      // author was either found, or not\n    });\n    ```\n  \n    @method finally\n    @param {Function} callback\n    @param {String} [label] optional string for labeling the promise.\n    Useful for tooling.\n    @return {Promise}\n  */\n\n\n  Promise.prototype.finally = function _finally(callback, label) {\n    var promise = this;\n    var constructor = promise.constructor;\n\n    if (typeof callback === 'function') {\n      return promise.then(function (value) {\n        return constructor.resolve(callback()).then(function () {\n          return value;\n        });\n      }, function (reason) {\n        return constructor.resolve(callback()).then(function () {\n          throw reason;\n        });\n      });\n    }\n\n    return promise.then(callback, callback);\n  };\n\n  return Promise;\n}();\n\nPromise.cast = Resolve; // deprecated\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = Resolve;\nPromise.reject = Reject;\n\nPromise.prototype._guidKey = guidKey;\n\n/**\n  The primary way of interacting with a promise is through its `then` method,\n  which registers callbacks to receive either a promise's eventual value or the\n  reason why the promise cannot be fulfilled.\n\n  ```js\n  findUser().then(function(user){\n    // user is available\n  }, function(reason){\n    // user is unavailable, and you are given the reason why\n  });\n  ```\n\n  Chaining\n  --------\n\n  The return value of `then` is itself a promise.  This second, 'downstream'\n  promise is resolved with the return value of the first promise's fulfillment\n  or rejection handler, or rejected if the handler throws an exception.\n\n  ```js\n  findUser().then(function (user) {\n    return user.name;\n  }, function (reason) {\n    return 'default name';\n  }).then(function (userName) {\n    // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n    // will be `'default name'`\n  });\n\n  findUser().then(function (user) {\n    throw new Error('Found user, but still unhappy');\n  }, function (reason) {\n    throw new Error('`findUser` rejected and we\\'re unhappy');\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n    // If `findUser` rejected, `reason` will be '`findUser` rejected and we\\'re unhappy'.\n  });\n  ```\n  If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n  ```js\n  findUser().then(function (user) {\n    throw new PedagogicalException('Upstream error');\n  }).then(function (value) {\n    // never reached\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // The `PedgagocialException` is propagated all the way down to here\n  });\n  ```\n\n  Assimilation\n  ------------\n\n  Sometimes the value you want to propagate to a downstream promise can only be\n  retrieved asynchronously. This can be achieved by returning a promise in the\n  fulfillment or rejection handler. The downstream promise will then be pending\n  until the returned promise is settled. This is called *assimilation*.\n\n  ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // The user's comments are now available\n  });\n  ```\n\n  If the assimliated promise rejects, then the downstream promise will also reject.\n\n  ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // If `findCommentsByAuthor` fulfills, we'll have the value here\n  }, function (reason) {\n    // If `findCommentsByAuthor` rejects, we'll have the reason here\n  });\n  ```\n\n  Simple Example\n  --------------\n\n  Synchronous Example\n\n  ```javascript\n  let result;\n\n  try {\n    result = findResult();\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n\n  Errback Example\n\n  ```js\n  findResult(function(result, err){\n    if (err) {\n      // failure\n    } else {\n      // success\n    }\n  });\n  ```\n\n  Promise Example;\n\n  ```javascript\n  findResult().then(function(result){\n    // success\n  }, function(reason){\n    // failure\n  });\n  ```\n\n  Advanced Example\n  --------------\n\n  Synchronous Example\n\n  ```javascript\n  let author, books;\n\n  try {\n    author = findAuthor();\n    books  = findBooksByAuthor(author);\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n\n  Errback Example\n\n  ```js\n\n  function foundBooks(books) {\n\n  }\n\n  function failure(reason) {\n\n  }\n\n  findAuthor(function(author, err){\n    if (err) {\n      failure(err);\n      // failure\n    } else {\n      try {\n        findBoooksByAuthor(author, function(books, err) {\n          if (err) {\n            failure(err);\n          } else {\n            try {\n              foundBooks(books);\n            } catch(reason) {\n              failure(reason);\n            }\n          }\n        });\n      } catch(error) {\n        failure(err);\n      }\n      // success\n    }\n  });\n  ```\n\n  Promise Example;\n\n  ```javascript\n  findAuthor().\n    then(findBooksByAuthor).\n    then(function(books){\n      // found books\n  }).catch(function(reason){\n    // something went wrong\n  });\n  ```\n\n  @method then\n  @param {Function} onFulfillment\n  @param {Function} onRejection\n  @param {String} [label] optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise}\n*/\nPromise.prototype.then = then;\n\nexport default Promise;","import Promise from './promise';\nimport { noop, resolve, reject, getThen, tryCatch, TRY_CATCH_ERROR } from './-internal';\n\nfunction makeObject(_, argumentNames) {\n  var obj = {};\n  var length = _.length;\n  var args = new Array(length);\n\n  for (var x = 0; x < length; x++) {\n    args[x] = _[x];\n  }\n\n  for (var i = 0; i < argumentNames.length; i++) {\n    var name = argumentNames[i];\n    obj[name] = args[i + 1];\n  }\n\n  return obj;\n}\n\nfunction arrayResult(_) {\n  var length = _.length;\n  var args = new Array(length - 1);\n\n  for (var i = 1; i < length; i++) {\n    args[i - 1] = _[i];\n  }\n\n  return args;\n}\n\nfunction wrapThenable(then, promise) {\n  return {\n    then: function (onFulFillment, onRejection) {\n      return then.call(promise, onFulFillment, onRejection);\n    }\n  };\n}\n\n/**\n  `denodeify` takes a 'node-style' function and returns a function that\n  will return an `Promise`. You can use `denodeify` in Node.js or the\n  browser when you'd prefer to use promises over using callbacks. For example,\n  `denodeify` transforms the following:\n\n  ```javascript\n  let fs = require('fs');\n\n  fs.readFile('myfile.txt', function(err, data){\n    if (err) return handleError(err);\n    handleData(data);\n  });\n  ```\n\n  into:\n\n  ```javascript\n  let fs = require('fs');\n  let readFile = denodeify(fs.readFile);\n\n  readFile('myfile.txt').then(handleData, handleError);\n  ```\n\n  If the node function has multiple success parameters, then `denodeify`\n  just returns the first one:\n\n  ```javascript\n  let request = denodeify(require('request'));\n\n  request('http://example.com').then(function(res) {\n    // ...\n  });\n  ```\n\n  However, if you need all success parameters, setting `denodeify`'s\n  second parameter to `true` causes it to return all success parameters\n  as an array:\n\n  ```javascript\n  let request = denodeify(require('request'), true);\n\n  request('http://example.com').then(function(result) {\n    // result[0] -> res\n    // result[1] -> body\n  });\n  ```\n\n  Or if you pass it an array with names it returns the parameters as a hash:\n\n  ```javascript\n  let request = denodeify(require('request'), ['res', 'body']);\n\n  request('http://example.com').then(function(result) {\n    // result.res\n    // result.body\n  });\n  ```\n\n  Sometimes you need to retain the `this`:\n\n  ```javascript\n  let app = require('express')();\n  let render = denodeify(app.render.bind(app));\n  ```\n\n  The denodified function inherits from the original function. It works in all\n  environments, except IE 10 and below. Consequently all properties of the original\n  function are available to you. However, any properties you change on the\n  denodeified function won't be changed on the original function. Example:\n\n  ```javascript\n  let request = denodeify(require('request')),\n      cookieJar = request.jar(); // <- Inheritance is used here\n\n  request('http://example.com', {jar: cookieJar}).then(function(res) {\n    // cookieJar.cookies holds now the cookies returned by example.com\n  });\n  ```\n\n  Using `denodeify` makes it easier to compose asynchronous operations instead\n  of using callbacks. For example, instead of:\n\n  ```javascript\n  let fs = require('fs');\n\n  fs.readFile('myfile.txt', function(err, data){\n    if (err) { ... } // Handle error\n    fs.writeFile('myfile2.txt', data, function(err){\n      if (err) { ... } // Handle error\n      console.log('done')\n    });\n  });\n  ```\n\n  you can chain the operations together using `then` from the returned promise:\n\n  ```javascript\n  let fs = require('fs');\n  let readFile = denodeify(fs.readFile);\n  let writeFile = denodeify(fs.writeFile);\n\n  readFile('myfile.txt').then(function(data){\n    return writeFile('myfile2.txt', data);\n  }).then(function(){\n    console.log('done')\n  }).catch(function(error){\n    // Handle error\n  });\n  ```\n\n  @method denodeify\n  @public\n  @static\n  @for rsvp\n  @param {Function} nodeFunc a 'node-style' function that takes a callback as\n  its last argument. The callback expects an error to be passed as its first\n  argument (if an error occurred, otherwise null), and the value from the\n  operation as its second argument ('function(err, value){ }').\n  @param {Boolean|Array} [options] An optional paramter that if set\n  to `true` causes the promise to fulfill with the callback's success arguments\n  as an array. This is useful if the node function has multiple success\n  paramters. If you set this paramter to an array with names, the promise will\n  fulfill with a hash with these names as keys and the success parameters as\n  values.\n  @return {Function} a function that wraps `nodeFunc` to return a `Promise`\n*/\nexport default function denodeify(nodeFunc, options) {\n  var fn = function () {\n    var l = arguments.length;\n    var args = new Array(l + 1);\n    var promiseInput = false;\n\n    for (var i = 0; i < l; ++i) {\n      var arg = arguments[i];\n\n      if (!promiseInput) {\n        // TODO: clean this up\n        promiseInput = needsPromiseInput(arg);\n        if (promiseInput === TRY_CATCH_ERROR) {\n          var error = TRY_CATCH_ERROR.error;\n          TRY_CATCH_ERROR.error = null;\n          var p = new Promise(noop);\n          reject(p, error);\n          return p;\n        } else if (promiseInput && promiseInput !== true) {\n          arg = wrapThenable(promiseInput, arg);\n        }\n      }\n      args[i] = arg;\n    }\n\n    var promise = new Promise(noop);\n\n    args[l] = function (err, val) {\n      if (err) {\n        reject(promise, err);\n      } else if (options === undefined) {\n        resolve(promise, val);\n      } else if (options === true) {\n        resolve(promise, arrayResult(arguments));\n      } else if (Array.isArray(options)) {\n        resolve(promise, makeObject(arguments, options));\n      } else {\n        resolve(promise, val);\n      }\n    };\n\n    if (promiseInput) {\n      return handlePromiseInput(promise, args, nodeFunc, this);\n    } else {\n      return handleValueInput(promise, args, nodeFunc, this);\n    }\n  };\n\n  fn.__proto__ = nodeFunc;\n\n  return fn;\n}\n\nfunction handleValueInput(promise, args, nodeFunc, self) {\n  var result = tryCatch(nodeFunc).apply(self, args);\n  if (result === TRY_CATCH_ERROR) {\n    var error = TRY_CATCH_ERROR.error;\n    TRY_CATCH_ERROR.error = null;\n    reject(promise, error);\n  }\n  return promise;\n}\n\nfunction handlePromiseInput(promise, args, nodeFunc, self) {\n  return Promise.all(args).then(function (args) {\n    return handleValueInput(promise, args, nodeFunc, self);\n  });\n}\n\nfunction needsPromiseInput(arg) {\n  if (arg !== null && typeof arg === 'object') {\n    if (arg.constructor === Promise) {\n      return true;\n    } else {\n      return getThen(arg);\n    }\n  } else {\n    return false;\n  }\n}","import Enumerator from '../enumerator';\n\n/**\n  `Promise.all` accepts an array of promises, and returns a new promise which\n  is fulfilled with an array of fulfillment values for the passed promises, or\n  rejected with the reason of the first passed promise to be rejected. It casts all\n  elements of the passed iterable to promises as it runs this algorithm.\n\n  Example:\n\n  ```javascript\n  import Promise, { resolve } from 'rsvp';\n\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // The array here would be [ 1, 2, 3 ];\n  });\n  ```\n\n  If any of the `promises` given to `RSVP.all` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promises's\n  rejection handler. For example:\n\n  Example:\n\n  ```javascript\n  import Promise, { resolve, reject } from 'rsvp';\n\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error(\"2\"));\n  let promise3 = reject(new Error(\"3\"));\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(error) {\n    // error.message === \"2\"\n  });\n  ```\n\n  @method all\n  @for Promise\n  @param {Array} entries array of promises\n  @param {String} [label] optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when all `promises` have been\n  fulfilled, or rejected if any of them become rejected.\n  @static\n*/\nexport default function all(entries, label) {\n  if (!Array.isArray(entries)) {\n    return this.reject(new TypeError(\"Promise.all must be called with an array\"), label);\n  }\n  return new Enumerator(this, entries, true /* abort on reject */, label).promise;\n}","import { noop, resolve, reject, subscribe, PENDING } from '../-internal';\n\n/**\n  `Promise.race` returns a new promise which is settled in the same way as the\n  first passed promise to settle.\n\n  Example:\n\n  ```javascript\n  import Promise from 'rsvp';\n\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 2');\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // result === 'promise 2' because it was resolved before promise1\n    // was resolved.\n  });\n  ```\n\n  `Promise.race` is deterministic in that only the state of the first\n  settled promise matters. For example, even if other promises given to the\n  `promises` array argument are resolved, but the first settled promise has\n  become rejected before the other promises became fulfilled, the returned\n  promise will become rejected:\n\n  ```javascript\n  import Promise from 'rsvp';\n\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      reject(new Error('promise 2'));\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // Code here never runs\n  }, function(reason){\n    // reason.message === 'promise 2' because promise 2 became rejected before\n    // promise 1 became fulfilled\n  });\n  ```\n\n  An example real-world use case is implementing timeouts:\n\n  ```javascript\n  import Promise from 'rsvp';\n\n  Promise.race([ajax('foo.json'), timeout(5000)])\n  ```\n\n  @method race\n  @for Promise\n  @static\n  @param {Array} entries array of promises to observe\n  @param {String} [label] optional string for describing the promise returned.\n  Useful for tooling.\n  @return {Promise} a promise which settles in the same way as the first passed\n  promise to settle.\n*/\nexport default function race(entries, label) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  var promise = new Constructor(noop, label);\n\n  if (!Array.isArray(entries)) {\n    reject(promise, new TypeError('Promise.race must be called with an array'));\n    return promise;\n  }\n\n  for (var i = 0; promise._state === PENDING && i < entries.length; i++) {\n    subscribe(Constructor.resolve(entries[i]), undefined, function (value) {\n      return resolve(promise, value);\n    }, function (reason) {\n      return reject(promise, reason);\n    });\n  }\n\n  return promise;\n}","import { noop, reject as _reject } from '../-internal';\n\n/**\n  `Promise.reject` returns a promise rejected with the passed `reason`.\n  It is shorthand for the following:\n\n  ```javascript\n  import Promise from 'rsvp';\n\n  let promise = new Promise(function(resolve, reject){\n    reject(new Error('WHOOPS'));\n  });\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  import Promise from 'rsvp';\n\n  let promise = Promise.reject(new Error('WHOOPS'));\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  @method reject\n  @for Promise\n  @static\n  @param {*} reason value that the returned promise will be rejected with.\n  @param {String} [label] optional string for identifying the returned promise.\n  Useful for tooling.\n  @return {Promise} a promise rejected with the given `reason`.\n*/\nexport default function reject(reason, label) {\n  /*jshint validthis:true */\n  var Constructor = this;\n  var promise = new Constructor(noop, label);\n  _reject(promise, reason);\n  return promise;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport { default as Enumerator, setSettledResult } from './enumerator';\nimport Promise from './promise';\n\n/**\n@module rsvp\n@public\n**/\n\nvar AllSettled = function (_Enumerator) {\n  _inherits(AllSettled, _Enumerator);\n\n  function AllSettled(Constructor, entries, label) {\n    return _possibleConstructorReturn(this, _Enumerator.call(this, Constructor, entries, false /* don't abort on reject */, label));\n  }\n\n  return AllSettled;\n}(Enumerator);\n\nAllSettled.prototype._setResultAt = setSettledResult;\n\n/**\n`RSVP.allSettled` is similar to `RSVP.all`, but instead of implementing\na fail-fast method, it waits until all the promises have returned and\nshows you all the results. This is useful if you want to handle multiple\npromises' failure states together as a set.\n Returns a promise that is fulfilled when all the given promises have been\nsettled. The return promise is fulfilled with an array of the states of\nthe promises passed into the `promises` array argument.\n Each state object will either indicate fulfillment or rejection, and\nprovide the corresponding value or reason. The states will take one of\nthe following formats:\n ```javascript\n{ state: 'fulfilled', value: value }\n  or\n{ state: 'rejected', reason: reason }\n```\n Example:\n ```javascript\nlet promise1 = RSVP.Promise.resolve(1);\nlet promise2 = RSVP.Promise.reject(new Error('2'));\nlet promise3 = RSVP.Promise.reject(new Error('3'));\nlet promises = [ promise1, promise2, promise3 ];\n RSVP.allSettled(promises).then(function(array){\n  // array == [\n  //   { state: 'fulfilled', value: 1 },\n  //   { state: 'rejected', reason: Error },\n  //   { state: 'rejected', reason: Error }\n  // ]\n  // Note that for the second item, reason.message will be '2', and for the\n  // third item, reason.message will be '3'.\n}, function(error) {\n  // Not run. (This block would only be called if allSettled had failed,\n  // for instance if passed an incorrect argument type.)\n});\n```\n @method allSettled\n@public\n@static\n@for rsvp\n@param {Array} entries\n@param {String} [label] - optional string that describes the promise.\nUseful for tooling.\n@return {Promise} promise that is fulfilled with an array of the settled\nstates of the constituent promises.\n*/\n\nexport default function allSettled(entries, label) {\n  if (!Array.isArray(entries)) {\n    return Promise.reject(new TypeError(\"Promise.allSettled must be called with an array\"), label);\n  }\n\n  return new AllSettled(Promise, entries, label).promise;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport Enumerator from './enumerator';\nimport { PENDING, FULFILLED, fulfill } from './-internal';\n\nvar PromiseHash = function (_Enumerator) {\n  _inherits(PromiseHash, _Enumerator);\n\n  function PromiseHash(Constructor, object) {\n    var abortOnReject = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    var label = arguments[3];\n    return _possibleConstructorReturn(this, _Enumerator.call(this, Constructor, object, abortOnReject, label));\n  }\n\n  PromiseHash.prototype._init = function _init(Constructor, object) {\n    this._result = {};\n    this._enumerate(object);\n  };\n\n  PromiseHash.prototype._enumerate = function _enumerate(input) {\n    var keys = Object.keys(input);\n\n    var length = keys.length;\n    var promise = this.promise;\n    this._remaining = length;\n\n    var key = void 0,\n        val = void 0;\n    for (var i = 0; promise._state === PENDING && i < length; i++) {\n      key = keys[i];\n      val = input[key];\n      this._eachEntry(val, key, true);\n    }\n\n    this._checkFullfillment();\n  };\n\n  return PromiseHash;\n}(Enumerator);\n\nexport default PromiseHash;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport Promise from './promise';\nimport { default as Enumerator, setSettledResult } from './enumerator';\nimport PromiseHash from './promise-hash';\n\nvar HashSettled = function (_PromiseHash) {\n  _inherits(HashSettled, _PromiseHash);\n\n  function HashSettled(Constructor, object, label) {\n    return _possibleConstructorReturn(this, _PromiseHash.call(this, Constructor, object, false, label));\n  }\n\n  return HashSettled;\n}(PromiseHash);\n\nHashSettled.prototype._setResultAt = setSettledResult;\n\n/**\n  `hashSettled` is similar to `allSettled`, but takes an object\n  instead of an array for its `promises` argument.\n\n  Unlike `all` or `hash`, which implement a fail-fast method,\n  but like `allSettled`, `hashSettled` waits until all the\n  constituent promises have returned and then shows you all the results\n  with their states and values/reasons. This is useful if you want to\n  handle multiple promises' failure states together as a set.\n\n  Returns a promise that is fulfilled when all the given promises have been\n  settled, or rejected if the passed parameters are invalid.\n\n  The returned promise is fulfilled with a hash that has the same key names as\n  the `promises` object argument. If any of the values in the object are not\n  promises, they will be copied over to the fulfilled object and marked with state\n  'fulfilled'.\n\n  Example:\n\n  ```javascript\n  import { hashSettled, resolve } from 'rsvp';\n\n  let promises = {\n    myPromise: resolve(1),\n    yourPromise: resolve(2),\n    theirPromise: resolve(3),\n    notAPromise: 4\n  };\n\n  hashSettled(promises).then(function(hash){\n    // hash here is an object that looks like:\n    // {\n    //   myPromise: { state: 'fulfilled', value: 1 },\n    //   yourPromise: { state: 'fulfilled', value: 2 },\n    //   theirPromise: { state: 'fulfilled', value: 3 },\n    //   notAPromise: { state: 'fulfilled', value: 4 }\n    // }\n  });\n  ```\n\n  If any of the `promises` given to `hash` are rejected, the state will\n  be set to 'rejected' and the reason for rejection provided.\n\n  Example:\n\n  ```javascript\n  import { hashSettled, reject, resolve } from 'rsvp';\n\n  let promises = {\n    myPromise: resolve(1),\n    rejectedPromise: reject(new Error('rejection')),\n    anotherRejectedPromise: reject(new Error('more rejection')),\n  };\n\n  hashSettled(promises).then(function(hash){\n    // hash here is an object that looks like:\n    // {\n    //   myPromise:              { state: 'fulfilled', value: 1 },\n    //   rejectedPromise:        { state: 'rejected', reason: Error },\n    //   anotherRejectedPromise: { state: 'rejected', reason: Error },\n    // }\n    // Note that for rejectedPromise, reason.message == 'rejection',\n    // and for anotherRejectedPromise, reason.message == 'more rejection'.\n  });\n  ```\n\n  An important note: `hashSettled` is intended for plain JavaScript objects that\n  are just a set of keys and values. `hashSettled` will NOT preserve prototype\n  chains.\n\n  Example:\n\n  ```javascript\n  import Promise, { hashSettled, resolve } from 'rsvp';\n\n  function MyConstructor(){\n    this.example = resolve('Example');\n  }\n\n  MyConstructor.prototype = {\n    protoProperty: Promise.resolve('Proto Property')\n  };\n\n  let myObject = new MyConstructor();\n\n  hashSettled(myObject).then(function(hash){\n    // protoProperty will not be present, instead you will just have an\n    // object that looks like:\n    // {\n    //   example: { state: 'fulfilled', value: 'Example' }\n    // }\n    //\n    // hash.hasOwnProperty('protoProperty'); // false\n    // 'undefined' === typeof hash.protoProperty\n  });\n  ```\n\n  @method hashSettled\n  @public\n  @for rsvp\n  @param {Object} object\n  @param {String} [label] optional string that describes the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when when all properties of `promises`\n  have been settled.\n  @static\n*/\n\nexport default function hashSettled(object, label) {\n  return Promise.resolve(object, label).then(function (object) {\n    if (object === null || typeof object !== 'object') {\n      throw new TypeError(\"hashSettled must be called with an object\");\n    }\n\n    return new HashSettled(Promise, object, false, label).promise;\n  });\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport Promise from './promise';\nimport { default as Enumerator } from './enumerator';\nimport { tryCatch, TRY_CATCH_ERROR, REJECTED } from './-internal';\n\nexport var MapEnumerator = function (_Enumerator) {\n  _inherits(MapEnumerator, _Enumerator);\n\n  function MapEnumerator(Constructor, entries, mapFn, label) {\n    return _possibleConstructorReturn(this, _Enumerator.call(this, Constructor, entries, true, label, mapFn));\n  }\n\n  MapEnumerator.prototype._init = function _init(Constructor, input, bool, label, mapFn) {\n    var len = input.length || 0;\n    this.length = len;\n    this._remaining = len;\n    this._result = new Array(len);\n    this._mapFn = mapFn;\n\n    this._enumerate(input);\n  };\n\n  MapEnumerator.prototype._setResultAt = function _setResultAt(state, i, value, firstPass) {\n    if (firstPass) {\n      var val = tryCatch(this._mapFn)(value, i);\n      if (val === TRY_CATCH_ERROR) {\n        this._settledAt(REJECTED, i, val.error, false);\n      } else {\n        this._eachEntry(val, i, false);\n      }\n    } else {\n      this._remaining--;\n      this._result[i] = value;\n    }\n  };\n\n  return MapEnumerator;\n}(Enumerator);\n\n/**\n `map` is similar to JavaScript's native `map` method. `mapFn` is eagerly called\n  meaning that as soon as any promise resolves its value will be passed to `mapFn`.\n  `map` returns a promise that will become fulfilled with the result of running\n  `mapFn` on the values the promises become fulfilled with.\n\n  For example:\n\n  ```javascript\n  import { map, resolve } from 'rsvp';\n\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n  let promises = [ promise1, promise2, promise3 ];\n\n  let mapFn = function(item){\n    return item + 1;\n  };\n\n  map(promises, mapFn).then(function(result){\n    // result is [ 2, 3, 4 ]\n  });\n  ```\n\n  If any of the `promises` given to `map` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promise's\n  rejection handler. For example:\n\n  ```javascript\n  import { map, reject, resolve } from 'rsvp';\n\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error('2'));\n  let promise3 = reject(new Error('3'));\n  let promises = [ promise1, promise2, promise3 ];\n\n  let mapFn = function(item){\n    return item + 1;\n  };\n\n  map(promises, mapFn).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(reason) {\n    // reason.message === '2'\n  });\n  ```\n\n  `map` will also wait if a promise is returned from `mapFn`. For example,\n  say you want to get all comments from a set of blog posts, but you need\n  the blog posts first because they contain a url to those comments.\n\n  ```javscript\n  import { map } from 'rsvp';\n\n  let mapFn = function(blogPost){\n    // getComments does some ajax and returns an Promise that is fulfilled\n    // with some comments data\n    return getComments(blogPost.comments_url);\n  };\n\n  // getBlogPosts does some ajax and returns an Promise that is fulfilled\n  // with some blog post data\n  map(getBlogPosts(), mapFn).then(function(comments){\n    // comments is the result of asking the server for the comments\n    // of all blog posts returned from getBlogPosts()\n  });\n  ```\n\n  @method map\n  @public\n  @static\n  @for rsvp\n  @param {Array} promises\n  @param {Function} mapFn function to be called on each fulfilled promise.\n  @param {String} [label] optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled with the result of calling\n  `mapFn` on each fulfilled promise or value when they become fulfilled.\n   The promise will be rejected if any of the given `promises` become rejected.\n*/\nexport default function map(promises, mapFn, label) {\n  if (typeof mapFn !== 'function') {\n    return Promise.reject(new TypeError(\"map expects a function as a second argument\"), label);\n  }\n\n  return Promise.resolve(promises, label).then(function (promises) {\n    if (!Array.isArray(promises)) {\n      throw new TypeError(\"map must be called with an array\");\n    }\n    return new MapEnumerator(Promise, promises, mapFn, label).promise;\n  });\n}","import Promise from './promise';\n\n/**\n  This is a convenient alias for `Promise.resolve`.\n\n  @method resolve\n  @public\n  @static\n  @for rsvp\n  @param {*} value value that the returned promise will be resolved with\n  @param {String} [label] optional string for identifying the returned promise.\n  Useful for tooling.\n  @return {Promise} a promise that will become fulfilled with the given\n  `value`\n*/\nexport default function resolve(value, label) {\n  return Promise.resolve(value, label);\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport Promise from './promise';\nimport { MapEnumerator } from './map';\nimport { tryCatch, fulfill, TRY_CATCH_ERROR, REJECTED } from './-internal';\n\nvar EMPTY_OBJECT = {};\n\nvar FilterEnumerator = function (_MapEnumerator) {\n  _inherits(FilterEnumerator, _MapEnumerator);\n\n  function FilterEnumerator() {\n    return _possibleConstructorReturn(this, _MapEnumerator.apply(this, arguments));\n  }\n\n  FilterEnumerator.prototype._checkFullfillment = function _checkFullfillment() {\n    if (this._remaining === 0 && this._result !== null) {\n      var result = this._result.filter(function (val) {\n        return val !== EMPTY_OBJECT;\n      });\n      fulfill(this.promise, result);\n      this._result = null;\n    }\n  };\n\n  FilterEnumerator.prototype._setResultAt = function _setResultAt(state, i, value, firstPass) {\n    if (firstPass) {\n      this._result[i] = value;\n      var val = tryCatch(this._mapFn)(value, i);\n      if (val === TRY_CATCH_ERROR) {\n        this._settledAt(REJECTED, i, val.error, false);\n      } else {\n        this._eachEntry(val, i, false);\n      }\n    } else {\n      this._remaining--;\n      if (!value) {\n        this._result[i] = EMPTY_OBJECT;\n      }\n    }\n  };\n\n  return FilterEnumerator;\n}(MapEnumerator);\n\n/**\n `filter` is similar to JavaScript's native `filter` method.\n `filterFn` is eagerly called meaning that as soon as any promise\n  resolves its value will be passed to `filterFn`. `filter` returns\n  a promise that will become fulfilled with the result of running\n  `filterFn` on the values the promises become fulfilled with.\n\n  For example:\n\n  ```javascript\n  import { filter, resolve } from 'rsvp';\n\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n\n  let promises = [promise1, promise2, promise3];\n\n  let filterFn = function(item){\n    return item > 1;\n  };\n\n  filter(promises, filterFn).then(function(result){\n    // result is [ 2, 3 ]\n  });\n  ```\n\n  If any of the `promises` given to `filter` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promise's\n  rejection handler. For example:\n\n  ```javascript\n  import { filter, reject, resolve } from 'rsvp';\n\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error('2'));\n  let promise3 = reject(new Error('3'));\n  let promises = [ promise1, promise2, promise3 ];\n\n  let filterFn = function(item){\n    return item > 1;\n  };\n\n  filter(promises, filterFn).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(reason) {\n    // reason.message === '2'\n  });\n  ```\n\n  `filter` will also wait for any promises returned from `filterFn`.\n  For instance, you may want to fetch a list of users then return a subset\n  of those users based on some asynchronous operation:\n\n  ```javascript\n  import { filter, resolve } from 'rsvp';\n\n  let alice = { name: 'alice' };\n  let bob   = { name: 'bob' };\n  let users = [ alice, bob ];\n\n  let promises = users.map(function(user){\n    return resolve(user);\n  });\n\n  let filterFn = function(user){\n    // Here, Alice has permissions to create a blog post, but Bob does not.\n    return getPrivilegesForUser(user).then(function(privs){\n      return privs.can_create_blog_post === true;\n    });\n  };\n  filter(promises, filterFn).then(function(users){\n    // true, because the server told us only Alice can create a blog post.\n    users.length === 1;\n    // false, because Alice is the only user present in `users`\n    users[0] === bob;\n  });\n  ```\n\n  @method filter\n  @public\n  @static\n  @for rsvp\n  @param {Array} promises\n  @param {Function} filterFn - function to be called on each resolved value to\n  filter the final results.\n  @param {String} [label] optional string describing the promise. Useful for\n  tooling.\n  @return {Promise}\n*/\n\nexport default function filter(promises, filterFn, label) {\n  if (typeof filterFn !== 'function') {\n    return Promise.reject(new TypeError(\"filter expects function as a second argument\"), label);\n  }\n\n  return Promise.resolve(promises, label).then(function (promises) {\n    if (!Array.isArray(promises)) {\n      throw new TypeError(\"filter must be called with an array\");\n    }\n    return new FilterEnumerator(Promise, promises, filterFn, label).promise;\n  });\n}","var len = 0;\nvar vertxNext = void 0;\nexport default function asap(callback, arg) {\n  queue[len] = callback;\n  queue[len + 1] = arg;\n  len += 2;\n  if (len === 2) {\n    // If len is 1, that means that we need to schedule an async flush.\n    // If additional callbacks are queued before the queue is flushed, they\n    // will be processed by this flush that we are scheduling.\n    scheduleFlush();\n  }\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n  var nextTick = process.nextTick;\n  // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n  // setImmediate should be used instead instead\n  var version = process.versions.node.match(/^(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+)$/);\n  if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {\n    nextTick = setImmediate;\n  }\n  return function () {\n    return nextTick(flush);\n  };\n}\n\n// vertx\nfunction useVertxTimer() {\n  if (typeof vertxNext !== 'undefined') {\n    return function () {\n      vertxNext(flush);\n    };\n  }\n  return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n  var iterations = 0;\n  var observer = new BrowserMutationObserver(flush);\n  var node = document.createTextNode('');\n  observer.observe(node, { characterData: true });\n\n  return function () {\n    return node.data = iterations = ++iterations % 2;\n  };\n}\n\n// web worker\nfunction useMessageChannel() {\n  var channel = new MessageChannel();\n  channel.port1.onmessage = flush;\n  return function () {\n    return channel.port2.postMessage(0);\n  };\n}\n\nfunction useSetTimeout() {\n  return function () {\n    return setTimeout(flush, 1);\n  };\n}\n\nvar queue = new Array(1000);\n\nfunction flush() {\n  for (var i = 0; i < len; i += 2) {\n    var callback = queue[i];\n    var arg = queue[i + 1];\n\n    callback(arg);\n\n    queue[i] = undefined;\n    queue[i + 1] = undefined;\n  }\n\n  len = 0;\n}\n\nfunction attemptVertex() {\n  try {\n    var vertx = Function('return this')().require('vertx');\n    vertxNext = vertx.runOnLoop || vertx.runOnContext;\n    return useVertxTimer();\n  } catch (e) {\n    return useSetTimeout();\n  }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n  scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n  scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n  scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n  scheduleFlush = attemptVertex();\n} else {\n  scheduleFlush = useSetTimeout();\n}","import Promise from './rsvp/promise';\nimport EventTarget from './rsvp/events';\nimport denodeify from './rsvp/node';\nimport all from './rsvp/all';\nimport allSettled from './rsvp/all-settled';\nimport race from './rsvp/race';\nimport hash from './rsvp/hash';\nimport hashSettled from './rsvp/hash-settled';\nimport rethrow from './rsvp/rethrow';\nimport defer from './rsvp/defer';\nimport { config, configure } from './rsvp/config';\nimport map from './rsvp/map';\nimport resolve from './rsvp/resolve';\nimport reject from './rsvp/reject';\nimport filter from './rsvp/filter';\nimport asap from './rsvp/asap';\n\n// defaults\nconfig.async = asap;\nconfig.after = function (cb) {\n  return setTimeout(cb, 0);\n};\nvar cast = resolve;\n\nvar async = function (callback, arg) {\n  return config.async(callback, arg);\n};\n\nfunction on() {\n  config.on.apply(config, arguments);\n}\n\nfunction off() {\n  config.off.apply(config, arguments);\n}\n\n// Set up instrumentation through `window.__PROMISE_INTRUMENTATION__`\nif (typeof window !== 'undefined' && typeof window['__PROMISE_INSTRUMENTATION__'] === 'object') {\n  var callbacks = window['__PROMISE_INSTRUMENTATION__'];\n  configure('instrument', true);\n  for (var eventName in callbacks) {\n    if (callbacks.hasOwnProperty(eventName)) {\n      on(eventName, callbacks[eventName]);\n    }\n  }\n}\n\n// the default export here is for backwards compat:\n//   https://github.com/tildeio/rsvp.js/issues/434\nexport default {\n  asap: asap,\n  cast: cast,\n  Promise: Promise,\n  EventTarget: EventTarget,\n  all: all,\n  allSettled: allSettled,\n  race: race,\n  hash: hash,\n  hashSettled: hashSettled,\n  rethrow: rethrow,\n  defer: defer,\n  denodeify: denodeify,\n  configure: configure,\n  on: on,\n  off: off,\n  resolve: resolve,\n  reject: reject,\n  map: map,\n  async: async,\n  filter: filter\n};\n\nexport { asap, cast, Promise, EventTarget, all, allSettled, race, hash, hashSettled, rethrow, defer, denodeify, configure, on, off, resolve, reject, map, async, filter };","import Promise from \"./promise\";\n\n/**\n  This is a convenient alias for `Promise.all`.\n\n  @method all\n  @public\n  @static\n  @for rsvp\n  @param {Array} array Array of promises.\n  @param {String} [label] An optional label. This is useful\n  for tooling.\n*/\nexport default function all(array, label) {\n  return Promise.all(array, label);\n}","import Promise from './promise';\n\n/**\n  This is a convenient alias for `Promise.race`.\n\n  @method race\n  @public\n  @static\n  @for rsvp\n  @param {Array} array Array of promises.\n  @param {String} [label] An optional label. This is useful\n  for tooling.\n */\nexport default function race(array, label) {\n  return Promise.race(array, label);\n}","import Promise from './promise';\nimport PromiseHash from './promise-hash';\n\n/**\n  `hash` is similar to `all`, but takes an object instead of an array\n  for its `promises` argument.\n\n  Returns a promise that is fulfilled when all the given promises have been\n  fulfilled, or rejected if any of them become rejected. The returned promise\n  is fulfilled with a hash that has the same key names as the `promises` object\n  argument. If any of the values in the object are not promises, they will\n  simply be copied over to the fulfilled object.\n\n  Example:\n\n  ```javascript\n  let promises = {\n    myPromise: resolve(1),\n    yourPromise: resolve(2),\n    theirPromise: resolve(3),\n    notAPromise: 4\n  };\n\n  hash(promises).then(function(hash){\n    // hash here is an object that looks like:\n    // {\n    //   myPromise: 1,\n    //   yourPromise: 2,\n    //   theirPromise: 3,\n    //   notAPromise: 4\n    // }\n  });\n  ```\n\n  If any of the `promises` given to `hash` are rejected, the first promise\n  that is rejected will be given as the reason to the rejection handler.\n\n  Example:\n\n  ```javascript\n  let promises = {\n    myPromise: resolve(1),\n    rejectedPromise: reject(new Error('rejectedPromise')),\n    anotherRejectedPromise: reject(new Error('anotherRejectedPromise')),\n  };\n\n  hash(promises).then(function(hash){\n    // Code here never runs because there are rejected promises!\n  }, function(reason) {\n    // reason.message === 'rejectedPromise'\n  });\n  ```\n\n  An important note: `hash` is intended for plain JavaScript objects that\n  are just a set of keys and values. `hash` will NOT preserve prototype\n  chains.\n\n  Example:\n\n  ```javascript\n  import { hash, resolve } from 'rsvp';\n  function MyConstructor(){\n    this.example = resolve('Example');\n  }\n\n  MyConstructor.prototype = {\n    protoProperty: resolve('Proto Property')\n  };\n\n  let myObject = new MyConstructor();\n\n  hash(myObject).then(function(hash){\n    // protoProperty will not be present, instead you will just have an\n    // object that looks like:\n    // {\n    //   example: 'Example'\n    // }\n    //\n    // hash.hasOwnProperty('protoProperty'); // false\n    // 'undefined' === typeof hash.protoProperty\n  });\n  ```\n\n  @method hash\n  @public\n  @static\n  @for rsvp\n  @param {Object} object\n  @param {String} [label] optional string that describes the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when all properties of `promises`\n  have been fulfilled, or rejected if any of them become rejected.\n*/\nexport default function hash(object, label) {\n  return Promise.resolve(object, label).then(function (object) {\n    if (object === null || typeof object !== 'object') {\n      throw new TypeError(\"Promise.hash must be called with an object\");\n    }\n    return new PromiseHash(Promise, object, label).promise;\n  });\n}","/**\n  `rethrow` will rethrow an error on the next turn of the JavaScript event\n  loop in order to aid debugging.\n\n  Promises A+ specifies that any exceptions that occur with a promise must be\n  caught by the promises implementation and bubbled to the last handler. For\n  this reason, it is recommended that you always specify a second rejection\n  handler function to `then`. However, `rethrow` will throw the exception\n  outside of the promise, so it bubbles up to your console if in the browser,\n  or domain/cause uncaught exception in Node. `rethrow` will also throw the\n  error again so the error can be handled by the promise per the spec.\n\n  ```javascript\n  import { rethrow } from 'rsvp';\n\n  function throws(){\n    throw new Error('Whoops!');\n  }\n\n  let promise = new Promise(function(resolve, reject){\n    throws();\n  });\n\n  promise.catch(rethrow).then(function(){\n    // Code here doesn't run because the promise became rejected due to an\n    // error!\n  }, function (err){\n    // handle the error here\n  });\n  ```\n\n  The 'Whoops' error will be thrown on the next turn of the event loop\n  and you can watch for it in your console. You can also handle it using a\n  rejection handler given to `.then` or `.catch` on the returned promise.\n\n  @method rethrow\n  @public\n  @static\n  @for rsvp\n  @param {Error} reason reason the promise became rejected.\n  @throws Error\n  @static\n*/\nexport default function rethrow(reason) {\n  setTimeout(function () {\n    throw reason;\n  });\n  throw reason;\n}","import Promise from \"./promise\";\n\n/**\n  `defer` returns an object similar to jQuery's `$.Deferred`.\n  `defer` should be used when porting over code reliant on `$.Deferred`'s\n  interface. New code should use the `Promise` constructor instead.\n\n  The object returned from `defer` is a plain object with three properties:\n\n  * promise - an `Promise`.\n  * reject - a function that causes the `promise` property on this object to\n    become rejected\n  * resolve - a function that causes the `promise` property on this object to\n    become fulfilled.\n\n  Example:\n\n   ```javascript\n   let deferred = defer();\n\n   deferred.resolve(\"Success!\");\n\n   deferred.promise.then(function(value){\n     // value here is \"Success!\"\n   });\n   ```\n\n  @method defer\n  @public\n  @static\n  @for rsvp\n  @param {String} [label] optional string for labeling the promise.\n  Useful for tooling.\n  @return {Object}\n */\n\nexport default function defer(label) {\n  var deferred = { resolve: undefined, reject: undefined };\n\n  deferred.promise = new Promise(function (resolve, reject) {\n    deferred.resolve = resolve;\n    deferred.reject = reject;\n  }, label);\n\n  return deferred;\n}","import Promise from './promise';\n\n/**\n  This is a convenient alias for `Promise.reject`.\n\n  @method reject\n  @public\n  @static\n  @for rsvp\n  @param {*} reason value that the returned promise will be rejected with.\n  @param {String} [label] optional string for identifying the returned promise.\n  Useful for tooling.\n  @return {Promise} a promise rejected with the given `reason`.\n*/\nexport default function reject(reason, label) {\n  return Promise.reject(reason, label);\n}","/* 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/** SyncPromise internal states */\nconst enum States {\n  /** Pending */\n  PENDING = 0,\n  /** Resolved / OK */\n  RESOLVED = 1,\n  /** Rejected / Error */\n  REJECTED = 2,\n}\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike<void>;\nexport function resolvedSyncPromise<T>(value: T | PromiseLike<T>): PromiseLike<T>;\n\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<T>(value?: T | PromiseLike<T>): PromiseLike<T> {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\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<T = never>(reason?: any): PromiseLike<T> {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise<T> implements PromiseLike<T> {\n  private _state: States;\n  private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n  private _value: any;\n\n  public constructor(\n    executor: (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void,\n  ) {\n    this._state = States.PENDING;\n    this._handlers = [];\n\n    try {\n      executor(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\n    }\n  }\n\n  /** JSDoc */\n  public then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n  ): PromiseLike<TResult1 | TResult2> {\n    return new SyncPromise((resolve, reject) => {\n      this._handlers.push([\n        false,\n        result => {\n          if (!onfulfilled) {\n            // TODO: ¯\\_(ツ)_/¯\n            // TODO: FIXME\n            resolve(result as any);\n          } else {\n            try {\n              resolve(onfulfilled(result));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n        reason => {\n          if (!onrejected) {\n            reject(reason);\n          } else {\n            try {\n              resolve(onrejected(reason));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n      ]);\n      this._executeHandlers();\n    });\n  }\n\n  /** JSDoc */\n  public catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n  ): PromiseLike<T | TResult> {\n    return this.then(val => val, onrejected);\n  }\n\n  /** JSDoc */\n  public finally<TResult>(onfinally?: (() => void) | null): PromiseLike<TResult> {\n    return new SyncPromise<TResult>((resolve, reject) => {\n      let val: TResult | any;\n      let isRejected: boolean;\n\n      return this.then(\n        value => {\n          isRejected = false;\n          val = value;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n        reason => {\n          isRejected = true;\n          val = reason;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n      ).then(() => {\n        if (isRejected) {\n          reject(val);\n          return;\n        }\n\n        resolve(val as unknown as any);\n      });\n    });\n  }\n\n  /** JSDoc */\n  private readonly _resolve = (value?: T | PromiseLike<T> | null) => {\n    this._setResult(States.RESOLVED, value);\n  };\n\n  /** JSDoc */\n  private readonly _reject = (reason?: any) => {\n    this._setResult(States.REJECTED, reason);\n  };\n\n  /** JSDoc */\n  private readonly _setResult = (state: States, value?: T | PromiseLike<T> | any) => {\n    if (this._state !== States.PENDING) {\n      return;\n    }\n\n    if (isThenable(value)) {\n      void (value as PromiseLike<T>).then(this._resolve, this._reject);\n      return;\n    }\n\n    this._state = state;\n    this._value = value;\n\n    this._executeHandlers();\n  };\n\n  /** JSDoc */\n  private readonly _executeHandlers = () => {\n    if (this._state === States.PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler[0]) {\n        return;\n      }\n\n      if (this._state === States.RESOLVED) {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        handler[1](this._value as unknown as any);\n      }\n\n      if (this._state === States.REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  };\n}\n\nexport { SyncPromise };\n","import type { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { consoleSandbox, logger } from './logger';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n  return protocol === 'http' || protocol === 'https';\n}\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 */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() as string;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n  if (!DEBUG_BUILD) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents: ReadonlyArray<keyof DsnComponents> = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      logger.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n","/* eslint-disable no-unused-vars */\n// @ts-check\nimport { assert } from '@ember/debug';\n\nexport default function isFastBoot(owner) {\n  assert('You must pass in an owner to isFastBoot!', owner && typeof owner.lookup === 'function');\n  const fastboot = owner.lookup('service:fastboot');\n  return fastboot ? fastboot.get('isFastBoot') : false;\n}\n","//\n// Main\n//\n\nfunction memoize (fn, options) {\n  var cache = options && options.cache\n    ? options.cache\n    : cacheDefault\n\n  var serializer = options && options.serializer\n    ? options.serializer\n    : serializerDefault\n\n  var strategy = options && options.strategy\n    ? options.strategy\n    : strategyDefault\n\n  return strategy(fn, {\n    cache: cache,\n    serializer: serializer\n  })\n}\n\n//\n// Strategy\n//\n\nfunction isPrimitive (value) {\n  return value == null || typeof value === 'number' || typeof value === 'boolean' // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\n\nfunction monadic (fn, cache, serializer, arg) {\n  var cacheKey = isPrimitive(arg) ? arg : serializer(arg)\n\n  var computedValue = cache.get(cacheKey)\n  if (typeof computedValue === 'undefined') {\n    computedValue = fn.call(this, arg)\n    cache.set(cacheKey, computedValue)\n  }\n\n  return computedValue\n}\n\nfunction variadic (fn, cache, serializer) {\n  var args = Array.prototype.slice.call(arguments, 3)\n  var cacheKey = serializer(args)\n\n  var computedValue = cache.get(cacheKey)\n  if (typeof computedValue === 'undefined') {\n    computedValue = fn.apply(this, args)\n    cache.set(cacheKey, computedValue)\n  }\n\n  return computedValue\n}\n\nfunction assemble (fn, context, strategy, cache, serialize) {\n  return strategy.bind(\n    context,\n    fn,\n    cache,\n    serialize\n  )\n}\n\nfunction strategyDefault (fn, options) {\n  var strategy = fn.length === 1 ? monadic : variadic\n\n  return assemble(\n    fn,\n    this,\n    strategy,\n    options.cache.create(),\n    options.serializer\n  )\n}\n\nfunction strategyVariadic (fn, options) {\n  var strategy = variadic\n\n  return assemble(\n    fn,\n    this,\n    strategy,\n    options.cache.create(),\n    options.serializer\n  )\n}\n\nfunction strategyMonadic (fn, options) {\n  var strategy = monadic\n\n  return assemble(\n    fn,\n    this,\n    strategy,\n    options.cache.create(),\n    options.serializer\n  )\n}\n\n//\n// Serializer\n//\n\nfunction serializerDefault () {\n  return JSON.stringify(arguments)\n}\n\n//\n// Cache\n//\n\nfunction ObjectWithoutPrototypeCache () {\n  this.cache = Object.create(null)\n}\n\nObjectWithoutPrototypeCache.prototype.has = function (key) {\n  return (key in this.cache)\n}\n\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n  return this.cache[key]\n}\n\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n  this.cache[key] = value\n}\n\nvar cacheDefault = {\n  create: function create () {\n    return new ObjectWithoutPrototypeCache()\n  }\n}\n\n//\n// API\n//\n\nmodule.exports = memoize\nmodule.exports.strategies = {\n  variadic: strategyVariadic,\n  monadic: strategyMonadic\n}\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 root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","import { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../logger';\nimport { getFunctionName } from '../stacktrace';\n\nexport type InstrumentHandlerType = 'console' | 'dom' | 'fetch' | 'history' | 'xhr' | 'error' | 'unhandledrejection';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n// We keep the handlers globally\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Add a handler function. */\nexport function addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n  Object.keys(handlers).forEach(key => {\n    handlers[key as InstrumentHandlerType] = undefined;\n  });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nexport function maybeInstrument(type: InstrumentHandlerType, instrumentFn: () => void): void {\n  if (!instrumented[type]) {\n    instrumentFn();\n    instrumented[type] = true;\n  }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nexport function triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n","import type { ConsoleLevel } from '@sentry/types';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n  /** Display name of this error instance. */\n  public name: string;\n\n  public logLevel: ConsoleLevel;\n\n  public constructor(public message: string, logLevel: ConsoleLevel = 'warn') {\n    super(message);\n\n    this.name = new.target.prototype.constructor.name;\n    // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n    // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n    // instances of `SentryError` fail `obj instanceof SentryError` checks.\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.logLevel = logLevel;\n  }\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","import type {\n  Attachment,\n  AttachmentItem,\n  BaseEnvelopeHeaders,\n  BaseEnvelopeItemHeaders,\n  DataCategory,\n  DsnComponents,\n  Envelope,\n  EnvelopeItemType,\n  Event,\n  EventEnvelopeHeaders,\n  SdkInfo,\n  SdkMetadata,\n  TextEncoderInternal,\n} from '@sentry/types';\n\nimport { dsnToString } from './dsn';\nimport { normalize } from './normalize';\nimport { dropUndefinedKeys } from './object';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function createEnvelope<E extends Envelope>(headers: E[0], items: E[1] = []): E {\n  return [headers, items] as E;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function addItemToEnvelope<E extends Envelope>(envelope: E, newItem: E[1][number]): E {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]] as unknown as E;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nexport function forEachEnvelopeItem<E extends Envelope>(\n  envelope: Envelope,\n  callback: (envelopeItem: E[1][number], envelopeItemType: E[1][number][0]['type']) => boolean | void,\n): boolean {\n  const envelopeItems = envelope[1];\n\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n\n    if (result) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nexport function envelopeContainsItemType(envelope: Envelope, types: EnvelopeItemType[]): boolean {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8.\n */\nfunction encodeUTF8(input: string, textEncoder?: TextEncoderInternal): Uint8Array {\n  const utf8 = textEncoder || new TextEncoder();\n  return utf8.encode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nexport function serializeEnvelope(envelope: Envelope, textEncoder?: TextEncoderInternal): string | Uint8Array {\n  const [envHeaders, items] = envelope;\n\n  // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n  let parts: string | Uint8Array[] = JSON.stringify(envHeaders);\n\n  function append(next: string | Uint8Array): void {\n    if (typeof parts === 'string') {\n      parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts, textEncoder), next];\n    } else {\n      parts.push(typeof next === 'string' ? encodeUTF8(next, textEncoder) : next);\n    }\n  }\n\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n\n    append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n    if (typeof payload === 'string' || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload: string;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch (e) {\n        // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.strinify()` still\n        // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n        // performance impact but in this case a performance hit is better than throwing.\n        stringifiedPayload = JSON.stringify(normalize(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n\n  return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers: Uint8Array[]): Uint8Array {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n  const merged = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const buffer of buffers) {\n    merged.set(buffer, offset);\n    offset += buffer.length;\n  }\n\n  return merged;\n}\n\nexport interface TextDecoderInternal {\n  decode(input?: Uint8Array): string;\n}\n\n/**\n * Parses an envelope\n */\nexport function parseEnvelope(\n  env: string | Uint8Array,\n  textEncoder: TextEncoderInternal,\n  textDecoder: TextDecoderInternal,\n): Envelope {\n  let buffer = typeof env === 'string' ? textEncoder.encode(env) : env;\n\n  function readBinary(length: number): Uint8Array {\n    const bin = buffer.subarray(0, length);\n    // Replace the buffer with the remaining data excluding trailing newline\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n\n  function readJson<T>(): T {\n    let i = buffer.indexOf(0xa);\n    // If we couldn't find a newline, we must have found the end of the buffer\n    if (i < 0) {\n      i = buffer.length;\n    }\n\n    return JSON.parse(textDecoder.decode(readBinary(i))) as T;\n  }\n\n  const envelopeHeader = readJson<BaseEnvelopeHeaders>();\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const items: [any, any][] = [];\n\n  while (buffer.length) {\n    const itemHeader = readJson<BaseEnvelopeItemHeaders>();\n    const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n\n  return [envelopeHeader, items];\n}\n\n/**\n * Creates attachment envelope items\n */\nexport function createAttachmentEnvelopeItem(\n  attachment: Attachment,\n  textEncoder?: TextEncoderInternal,\n): AttachmentItem {\n  const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data, textEncoder) : attachment.data;\n\n  return [\n    dropUndefinedKeys({\n      type: 'attachment',\n      length: buffer.length,\n      filename: attachment.filename,\n      content_type: attachment.contentType,\n      attachment_type: attachment.attachmentType,\n    }),\n    buffer,\n  ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP: Record<EnvelopeItemType, DataCategory> = {\n  session: 'session',\n  sessions: 'session',\n  attachment: 'attachment',\n  transaction: 'transaction',\n  event: 'error',\n  client_report: 'internal',\n  user_report: 'default',\n  profile: 'profile',\n  replay_event: 'replay',\n  replay_recording: 'replay',\n  check_in: 'monitor',\n  feedback: 'feedback',\n  // TODO: This is a temporary workaround until we have a proper data category for metrics\n  statsd: 'unknown',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nexport function envelopeItemTypeToDataCategory(type: EnvelopeItemType): DataCategory {\n  return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from from the metadata or an events */\nexport function getSdkMetadataForEnvelopeHeader(metadataOrEvent?: SdkMetadata | Event): SdkInfo | undefined {\n  if (!metadataOrEvent || !metadataOrEvent.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nexport function createEventEnvelopeHeaders(\n  event: Event,\n  sdkInfo: SdkInfo | undefined,\n  tunnel: string | undefined,\n  dsn?: DsnComponents,\n): EventEnvelopeHeaders {\n  const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n  return {\n    event_id: event.event_id as string,\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n    ...(dynamicSamplingContext && {\n      trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n    }),\n  };\n}\n","import type {\n  Event,\n  ExtractedNodeRequestData,\n  PolymorphicRequest,\n  Transaction,\n  TransactionSource,\n  WebFetchHeaders,\n  WebFetchRequest,\n} from '@sentry/types';\n\nimport { parseCookie } from './cookie';\nimport { DEBUG_BUILD } from './debug-build';\nimport { isPlainObject, isString } from './is';\nimport { logger } from './logger';\nimport { normalize } from './normalize';\nimport { stripUrlQueryAndFragment } from './url';\n\nconst DEFAULT_INCLUDES = {\n  ip: false,\n  request: true,\n  transaction: true,\n  user: true,\n};\nconst DEFAULT_REQUEST_INCLUDES = ['cookies', 'data', 'headers', 'method', 'query_string', 'url'];\nexport const DEFAULT_USER_INCLUDES = ['id', 'username', 'email'];\n\ntype InjectedNodeDeps = {\n  cookie: {\n    parse: (cookieStr: string) => Record<string, string>;\n  };\n  url: {\n    parse: (urlStr: string) => {\n      query: string | null;\n    };\n  };\n};\n\n/**\n * Options deciding what parts of the request to use when enhancing an event\n */\nexport type AddRequestDataToEventOptions = {\n  /** Flags controlling whether each type of data should be added to the event */\n  include?: {\n    ip?: boolean;\n    request?: boolean | Array<(typeof DEFAULT_REQUEST_INCLUDES)[number]>;\n    transaction?: boolean | TransactionNamingScheme;\n    user?: boolean | Array<(typeof DEFAULT_USER_INCLUDES)[number]>;\n  };\n\n  /** Injected platform-specific dependencies */\n  deps?: {\n    cookie: {\n      parse: (cookieStr: string) => Record<string, string>;\n    };\n    url: {\n      parse: (urlStr: string) => {\n        query: string | null;\n      };\n    };\n  };\n};\n\nexport type TransactionNamingScheme = 'path' | 'methodPath' | 'handler';\n\n/**\n * Sets parameterized route as transaction name e.g.: `GET /users/:id`\n * Also adds more context data on the transaction from the request\n */\nexport function addRequestDataToTransaction(\n  transaction: Transaction | undefined,\n  req: PolymorphicRequest,\n  deps?: InjectedNodeDeps,\n): void {\n  if (!transaction) return;\n  // eslint-disable-next-line deprecation/deprecation\n  if (!transaction.metadata.source || transaction.metadata.source === 'url') {\n    // Attempt to grab a parameterized route off of the request\n    const [name, source] = extractPathForTransaction(req, { path: true, method: true });\n    transaction.updateName(name);\n    // TODO: SEMANTIC_ATTRIBUTE_SENTRY_SOURCE is in core, align this once we merge utils & core\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setMetadata({ source });\n  }\n  transaction.setAttribute('url', req.originalUrl || req.url);\n  if (req.baseUrl) {\n    transaction.setAttribute('baseUrl', req.baseUrl);\n  }\n  // TODO: We need to rewrite this to a flat format?\n  // eslint-disable-next-line deprecation/deprecation\n  transaction.setData('query', extractQueryParams(req, deps));\n}\n\n/**\n * Extracts a complete and parameterized path from the request object and uses it to construct transaction name.\n * If the parameterized transaction name cannot be extracted, we fall back to the raw URL.\n *\n * Additionally, this function determines and returns the transaction name source\n *\n * eg. GET /mountpoint/user/:id\n *\n * @param req A request object\n * @param options What to include in the transaction name (method, path, or a custom route name to be\n *                used instead of the request's route)\n *\n * @returns A tuple of the fully constructed transaction name [0] and its source [1] (can be either 'route' or 'url')\n */\nexport function extractPathForTransaction(\n  req: PolymorphicRequest,\n  options: { path?: boolean; method?: boolean; customRoute?: string } = {},\n): [string, TransactionSource] {\n  const method = req.method && req.method.toUpperCase();\n\n  let path = '';\n  let source: TransactionSource = 'url';\n\n  // Check to see if there's a parameterized route we can use (as there is in Express)\n  if (options.customRoute || req.route) {\n    path = options.customRoute || `${req.baseUrl || ''}${req.route && req.route.path}`;\n    source = 'route';\n  }\n\n  // Otherwise, just take the original URL\n  else if (req.originalUrl || req.url) {\n    path = stripUrlQueryAndFragment(req.originalUrl || req.url || '');\n  }\n\n  let name = '';\n  if (options.method && method) {\n    name += method;\n  }\n  if (options.method && options.path) {\n    name += ' ';\n  }\n  if (options.path && path) {\n    name += path;\n  }\n\n  return [name, source];\n}\n\n/** JSDoc */\nfunction extractTransaction(req: PolymorphicRequest, type: boolean | TransactionNamingScheme): string {\n  switch (type) {\n    case 'path': {\n      return extractPathForTransaction(req, { path: true })[0];\n    }\n    case 'handler': {\n      return (req.route && req.route.stack && req.route.stack[0] && req.route.stack[0].name) || '<anonymous>';\n    }\n    case 'methodPath':\n    default: {\n      // if exist _reconstructedRoute return that path instead of route.path\n      const customRoute = req._reconstructedRoute ? req._reconstructedRoute : undefined;\n      return extractPathForTransaction(req, { path: true, method: true, customRoute })[0];\n    }\n  }\n}\n\n/** JSDoc */\nfunction extractUserData(\n  user: {\n    [key: string]: unknown;\n  },\n  keys: boolean | string[],\n): { [key: string]: unknown } {\n  const extractedUser: { [key: string]: unknown } = {};\n  const attributes = Array.isArray(keys) ? keys : DEFAULT_USER_INCLUDES;\n\n  attributes.forEach(key => {\n    if (user && key in user) {\n      extractedUser[key] = user[key];\n    }\n  });\n\n  return extractedUser;\n}\n\n/**\n * Normalize data from the request object, accounting for framework differences.\n *\n * @param req The request object from which to extract data\n * @param options.include An optional array of keys to include in the normalized data. Defaults to\n * DEFAULT_REQUEST_INCLUDES if not provided.\n * @param options.deps Injected, platform-specific dependencies\n * @returns An object containing normalized request data\n */\nexport function extractRequestData(\n  req: PolymorphicRequest,\n  options?: {\n    include?: string[];\n    deps?: InjectedNodeDeps;\n  },\n): ExtractedNodeRequestData {\n  const { include = DEFAULT_REQUEST_INCLUDES, deps } = options || {};\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const requestData: { [key: string]: any } = {};\n\n  // headers:\n  //   node, express, koa, nextjs: req.headers\n  const headers = (req.headers || {}) as {\n    host?: string;\n    cookie?: string;\n  };\n  // method:\n  //   node, express, koa, nextjs: req.method\n  const method = req.method;\n  // host:\n  //   express: req.hostname in > 4 and req.host in < 4\n  //   koa: req.host\n  //   node, nextjs: req.headers.host\n  // Express 4 mistakenly strips off port number from req.host / req.hostname so we can't rely on them\n  // See: https://github.com/expressjs/express/issues/3047#issuecomment-236653223\n  // Also: https://github.com/getsentry/sentry-javascript/issues/1917\n  const host = headers.host || req.hostname || req.host || '<no host>';\n  // protocol:\n  //   node, nextjs: <n/a>\n  //   express, koa: req.protocol\n  const protocol = req.protocol === 'https' || (req.socket && req.socket.encrypted) ? 'https' : 'http';\n  // url (including path and query string):\n  //   node, express: req.originalUrl\n  //   koa, nextjs: req.url\n  const originalUrl = req.originalUrl || req.url || '';\n  // absolute url\n  const absoluteUrl = originalUrl.startsWith(protocol) ? originalUrl : `${protocol}://${host}${originalUrl}`;\n  include.forEach(key => {\n    switch (key) {\n      case 'headers': {\n        requestData.headers = headers;\n\n        // Remove the Cookie header in case cookie data should not be included in the event\n        if (!include.includes('cookies')) {\n          delete (requestData.headers as { cookie?: string }).cookie;\n        }\n\n        break;\n      }\n      case 'method': {\n        requestData.method = method;\n        break;\n      }\n      case 'url': {\n        requestData.url = absoluteUrl;\n        break;\n      }\n      case 'cookies': {\n        // cookies:\n        //   node, express, koa: req.headers.cookie\n        //   vercel, sails.js, express (w/ cookie middleware), nextjs: req.cookies\n        requestData.cookies =\n          // TODO (v8 / #5257): We're only sending the empty object for backwards compatibility, so the last bit can\n          // come off in v8\n          req.cookies || (headers.cookie && parseCookie(headers.cookie)) || {};\n        break;\n      }\n      case 'query_string': {\n        // query string:\n        //   node: req.url (raw)\n        //   express, koa, nextjs: req.query\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        requestData.query_string = extractQueryParams(req, deps);\n        break;\n      }\n      case 'data': {\n        if (method === 'GET' || method === 'HEAD') {\n          break;\n        }\n        // body data:\n        //   express, koa, nextjs: req.body\n        //\n        //   when using node by itself, you have to read the incoming stream(see\n        //   https://nodejs.dev/learn/get-http-request-body-data-using-nodejs); if a user is doing that, we can't know\n        //   where they're going to store the final result, so they'll have to capture this data themselves\n        if (req.body !== undefined) {\n          requestData.data = isString(req.body) ? req.body : JSON.stringify(normalize(req.body));\n        }\n        break;\n      }\n      default: {\n        if ({}.hasOwnProperty.call(req, key)) {\n          requestData[key] = (req as { [key: string]: unknown })[key];\n        }\n      }\n    }\n  });\n\n  return requestData;\n}\n\n/**\n * Add data from the given request to the given event\n *\n * @param event The event to which the request data will be added\n * @param req Request object\n * @param options.include Flags to control what data is included\n * @param options.deps Injected platform-specific dependencies\n * @returns The mutated `Event` object\n */\nexport function addRequestDataToEvent(\n  event: Event,\n  req: PolymorphicRequest,\n  options?: AddRequestDataToEventOptions,\n): Event {\n  const include = {\n    ...DEFAULT_INCLUDES,\n    ...(options && options.include),\n  };\n\n  if (include.request) {\n    const extractedRequestData = Array.isArray(include.request)\n      ? extractRequestData(req, { include: include.request, deps: options && options.deps })\n      : extractRequestData(req, { deps: options && options.deps });\n\n    event.request = {\n      ...event.request,\n      ...extractedRequestData,\n    };\n  }\n\n  if (include.user) {\n    const extractedUser = req.user && isPlainObject(req.user) ? extractUserData(req.user, include.user) : {};\n\n    if (Object.keys(extractedUser).length) {\n      event.user = {\n        ...event.user,\n        ...extractedUser,\n      };\n    }\n  }\n\n  // client ip:\n  //   node, nextjs: req.socket.remoteAddress\n  //   express, koa: req.ip\n  if (include.ip) {\n    const ip = req.ip || (req.socket && req.socket.remoteAddress);\n    if (ip) {\n      event.user = {\n        ...event.user,\n        ip_address: ip,\n      };\n    }\n  }\n\n  if (include.transaction && !event.transaction) {\n    // TODO do we even need this anymore?\n    // TODO make this work for nextjs\n    event.transaction = extractTransaction(req, include.transaction);\n  }\n\n  return event;\n}\n\nfunction extractQueryParams(\n  req: PolymorphicRequest,\n  deps?: InjectedNodeDeps,\n): string | Record<string, unknown> | undefined {\n  // url (including path and query string):\n  //   node, express: req.originalUrl\n  //   koa, nextjs: req.url\n  let originalUrl = req.originalUrl || req.url || '';\n\n  if (!originalUrl) {\n    return;\n  }\n\n  // The `URL` constructor can't handle internal URLs of the form `/some/path/here`, so stick a dummy protocol and\n  // hostname on the beginning. Since the point here is just to grab the query string, it doesn't matter what we use.\n  if (originalUrl.startsWith('/')) {\n    originalUrl = `http://dogs.are.great${originalUrl}`;\n  }\n\n  try {\n    return (\n      req.query ||\n      (typeof URL !== 'undefined' && new URL(originalUrl).search.slice(1)) ||\n      // In Node 8, `URL` isn't in the global scope, so we have to use the built-in module from Node\n      (deps && deps.url && deps.url.parse(originalUrl).query) ||\n      undefined\n    );\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Transforms a `Headers` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into a simple key-value dict.\n * The header keys will be lower case: e.g. A \"Content-Type\" header will be stored as \"content-type\".\n */\n// TODO(v8): Make this function return undefined when the extraction fails.\nexport function winterCGHeadersToDict(winterCGHeaders: WebFetchHeaders): Record<string, string> {\n  const headers: Record<string, string> = {};\n  try {\n    winterCGHeaders.forEach((value, key) => {\n      if (typeof value === 'string') {\n        // We check that value is a string even though it might be redundant to make sure prototype pollution is not possible.\n        headers[key] = value;\n      }\n    });\n  } catch (e) {\n    DEBUG_BUILD &&\n      logger.warn('Sentry failed extracting headers from a request object. If you see this, please file an issue.');\n  }\n\n  return headers;\n}\n\n/**\n * Converts a `Request` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into the format that the `RequestData` integration understands.\n */\nexport function winterCGRequestToRequestData(req: WebFetchRequest): PolymorphicRequest {\n  const headers = winterCGHeadersToDict(req.headers);\n  return {\n    method: req.method,\n    url: req.url,\n    headers,\n  };\n}\n","/**\n * This code was originally copied from the 'cookie` module at v0.5.0 and was simplified for our use case.\n * https://github.com/jshttp/cookie/blob/a0c84147aab6266bdb3996cf4062e93907c0b0fc/index.js\n * It had the following license:\n *\n * (The MIT License)\n *\n * Copyright (c) 2012-2014 Roman Shtylman <shtylman@gmail.com>\n * Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Parses a cookie string\n */\nexport function parseCookie(str: string): Record<string, string> {\n  const obj: Record<string, string> = {};\n  let index = 0;\n\n  while (index < str.length) {\n    const eqIdx = str.indexOf('=', index);\n\n    // no more cookie pairs\n    if (eqIdx === -1) {\n      break;\n    }\n\n    let endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = str.length;\n    } else if (endIdx < eqIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    const key = str.slice(index, eqIdx).trim();\n\n    // only assign once\n    if (undefined === obj[key]) {\n      let val = str.slice(eqIdx + 1, endIdx).trim();\n\n      // quoted values\n      if (val.charCodeAt(0) === 0x22) {\n        val = val.slice(1, -1);\n      }\n\n      try {\n        obj[key] = val.indexOf('%') !== -1 ? decodeURIComponent(val) : val;\n      } catch (e) {\n        obj[key] = val;\n      }\n    }\n\n    index = endIdx + 1;\n  }\n\n  return obj;\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 */\n\nimport { isBrowserBundle } from './env';\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n  // explicitly check for browser bundles as those can be optimized statically\n  // by terser/rollup.\n  return (\n    !isBrowserBundle() &&\n    Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n  );\n}\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: any, request: string): any {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return mod.require(request);\n}\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<T>(moduleName: string): T | undefined {\n  let mod: T | undefined;\n\n  try {\n    mod = dynamicRequire(module, moduleName);\n  } catch (e) {\n    // no-empty\n  }\n\n  try {\n    const { cwd } = dynamicRequire(module, 'process');\n    mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) as T;\n  } catch (e) {\n    // no-empty\n  }\n\n  return mod;\n}\n","import { GLOBAL_OBJ } from './worldwide';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n  /**\n   * The millisecond timestamp at which measurement began, measured in Unix time.\n   */\n  timeOrigin: number;\n  /**\n   * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n   */\n  now(): number;\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nexport function dateTimestampInSeconds(): number {\n  return Date.now() / ONE_SECOND_IN_MS;\n}\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 createUnixTimestampInSecondsFunc(): () => number {\n  const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & { performance?: Performance };\n  if (!performance || !performance.now) {\n    return dateTimestampInSeconds;\n  }\n\n  // Some browser and environments don't have a timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  const approxStartingTimeOrigin = Date.now() - performance.now();\n  const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n  };\n}\n\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 * 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 const timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Re-exported with an old name for backwards-compatibility.\n * TODO (v8): Remove this\n *\n * @deprecated Use `timestampInSeconds` instead.\n */\nexport const timestampWithMs = timestampInSeconds;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport let _browserPerformanceTimeOriginMode: string;\n\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 const browserPerformanceTimeOrigin = ((): number | undefined => {\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\n  const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n  if (!performance || !performance.now) {\n    _browserPerformanceTimeOriginMode = 'none';\n    return undefined;\n  }\n\n  const threshold = 3600 * 1000;\n  const performanceNow = performance.now();\n  const dateNow = Date.now();\n\n  // if timeOrigin isn't available set delta to threshold so it isn't used\n  const timeOriginDelta = performance.timeOrigin\n    ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n    : threshold;\n  const timeOriginIsReliable = timeOriginDelta < threshold;\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  const navigationStart = performance.timing && performance.timing.navigationStart;\n  const hasNavigationStart = typeof navigationStart === 'number';\n  // if navigationStart isn't available set delta to threshold so it isn't used\n  const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n  const navigationStartIsReliable = navigationStartDelta < threshold;\n\n  if (timeOriginIsReliable || navigationStartIsReliable) {\n    // Use the more reliable time origin\n    if (timeOriginDelta <= navigationStartDelta) {\n      _browserPerformanceTimeOriginMode = 'timeOrigin';\n      return performance.timeOrigin;\n    } else {\n      _browserPerformanceTimeOriginMode = 'navigationStart';\n      return navigationStart;\n    }\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","import type { TransportMakeRequestResponse } from '@sentry/types';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record<string, number>;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, category: string): number {\n  return limits[category] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, category: string, now: number = Date.now()): boolean {\n  return disabledUntil(limits, category) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n  limits: RateLimits,\n  { statusCode, headers }: TransportMakeRequestResponse,\n  now: number = Date.now(),\n): RateLimits {\n  const updatedRateLimits: RateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n  const retryAfterHeader = headers && headers['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\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 seconds\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     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories] = limit.split(':', 2);\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          updatedRateLimits[category] = now + delay;\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","const genericMessage = \"Invariant Violation\";\nconst {\n  setPrototypeOf = function (obj: any, proto: any) {\n    obj.__proto__ = proto;\n    return obj;\n  },\n} = Object as any;\n\nexport class InvariantError extends Error {\n  framesToPop = 1;\n  name = genericMessage;\n  constructor(message: string | number = genericMessage) {\n    super(\n      typeof message === \"number\"\n        ? `${genericMessage}: ${message} (see https://github.com/apollographql/invariant-packages)`\n        : message\n    );\n    setPrototypeOf(this, InvariantError.prototype);\n  }\n}\n\nexport function invariant(\n  condition: any,\n  message?: string | number,\n): asserts condition {\n  if (!condition) {\n    throw new InvariantError(message);\n  }\n}\n\nconst verbosityLevels = [\"debug\", \"log\", \"warn\", \"error\", \"silent\"] as const;\nexport type VerbosityLevel = (typeof verbosityLevels)[number];\nexport type ConsoleMethodName = Exclude<VerbosityLevel, \"silent\">;\nlet verbosityLevel = verbosityLevels.indexOf(\"log\");\n\nfunction wrapConsoleMethod<M extends ConsoleMethodName>(name: M) {\n  return function () {\n    if (verbosityLevels.indexOf(name) >= verbosityLevel) {\n      // Default to console.log if this host environment happens not to provide\n      // all the console.* methods we need.\n      const method = console[name] || console.log;\n      return method.apply(console, arguments as any);\n    }\n  } as (typeof console)[M];\n}\n\nexport namespace invariant {\n  export const debug = wrapConsoleMethod(\"debug\");\n  export const log = wrapConsoleMethod(\"log\");\n  export const warn = wrapConsoleMethod(\"warn\");\n  export const error = wrapConsoleMethod(\"error\");\n}\n\nexport function setVerbosity(level: VerbosityLevel): VerbosityLevel {\n  const old = verbosityLevels[verbosityLevel];\n  verbosityLevel = Math.max(0, verbosityLevels.indexOf(level));\n  return old;\n}\n\nexport default invariant;\n","export const version = \"local\";\n","export function maybe<T>(thunk: () => T): T | undefined {\n  try {\n    return thunk();\n  } catch {}\n}\n","import { maybe } from \"./maybe.js\";\n\ndeclare global {\n  const __DEV__: boolean; // will be removed in `dist` by the `postprocessDist` script\n  interface Window {\n    __DEV__?: boolean;\n  }\n}\n\nexport default (maybe(() => globalThis) ||\n  maybe(() => window) ||\n  maybe(() => self) ||\n  maybe(() => global) ||\n  // We don't expect the Function constructor ever to be invoked at runtime, as\n  // long as at least one of globalThis, window, self, or global is defined, so\n  // we are under no obligation to make it easy for static analysis tools to\n  // detect syntactic usage of the Function constructor. If you think you can\n  // improve your static analysis to detect this obfuscation, think again. This\n  // is an arms race you cannot win, at least not in JavaScript.\n  maybe(function () {\n    return maybe.constructor(\"return this\")();\n  })) as typeof globalThis & Window;\n","const prefixCounts = new Map<string, number>();\n\n// These IDs won't be globally unique, but they will be unique within this\n// process, thanks to the counter, and unguessable thanks to the random suffix.\nexport function makeUniqueId(prefix: string) {\n  const count = prefixCounts.get(prefix) || 1;\n  prefixCounts.set(prefix, count + 1);\n  return `${prefix}:${count}:${Math.random().toString(36).slice(2)}`;\n}\n","import { invariant as originalInvariant, InvariantError } from \"ts-invariant\";\nimport { version } from \"../../version.js\";\nimport global from \"./global.js\";\nimport type { ErrorCodes } from \"../../invariantErrorCodes.js\";\nimport { stringifyForDisplay } from \"../common/stringifyForDisplay.js\";\n\nfunction wrap(fn: (msg?: string, ...args: any[]) => void) {\n  return function (message?: string | number, ...args: any[]) {\n    if (typeof message === \"number\") {\n      const arg0 = message;\n      message = getHandledErrorMsg(arg0);\n      if (!message) {\n        message = getFallbackErrorMsg(arg0, args);\n        args = [];\n      }\n    }\n    fn(...[message].concat(args));\n  };\n}\n\ntype LogFunction = {\n  /**\n   * Logs a `$level` message if the user used `ts-invariant`'s `setVerbosity` to set\n   * a verbosity level of `$level` or lower. (defaults to `\"log\"`).\n   *\n   * The user will either be presented with a link to the documentation for the message,\n   * or they can use the `loadDevMessages` to add the message strings to the bundle.\n   * The documentation will display the message without argument substitution.\n   * Instead, the arguments will be printed on the console after the link.\n   *\n   * `message` can only be a string, a concatenation of strings, or a ternary statement\n   * that results in a string. This will be enforced on build, where the message will\n   * be replaced with a message number.\n   *\n   * String substitutions like %s, %o, %d or %f are supported.\n   */\n  (message?: any, ...optionalParams: unknown[]): void;\n};\n\ntype WrappedInvariant = {\n  /**\n   * Throws and InvariantError with the given message if the condition is false.\n   *\n   * `message` can only be a string, a concatenation of strings, or a ternary statement\n   * that results in a string. This will be enforced on build, where the message will\n   * be replaced with a message number.\n   *\n   * The user will either be presented with a link to the documentation for the message,\n   * or they can use the `loadErrorMessages` to add the message strings to the bundle.\n   * The documentation will display the message with the arguments substituted.\n   *\n   * String substitutions with %s are supported and will also return\n   * pretty-stringified objects.\n   * Excess `optionalParams` will be swallowed.\n   */\n  (\n    condition: any,\n    message?: string | number,\n    ...optionalParams: unknown[]\n  ): asserts condition;\n\n  debug: LogFunction;\n  log: LogFunction;\n  warn: LogFunction;\n  error: LogFunction;\n};\nconst invariant: WrappedInvariant = Object.assign(\n  function invariant(\n    condition: any,\n    message?: string | number,\n    ...args: unknown[]\n  ): asserts condition {\n    if (!condition) {\n      originalInvariant(\n        condition,\n        getHandledErrorMsg(message, args) || getFallbackErrorMsg(message, args)\n      );\n    }\n  },\n  {\n    debug: wrap(originalInvariant.debug),\n    log: wrap(originalInvariant.log),\n    warn: wrap(originalInvariant.warn),\n    error: wrap(originalInvariant.error),\n  }\n);\n\n/**\n * Returns an InvariantError.\n *\n * `message` can only be a string, a concatenation of strings, or a ternary statement\n * that results in a string. This will be enforced on build, where the message will\n * be replaced with a message number.\n * String substitutions with %s are supported and will also return\n * pretty-stringified objects.\n * Excess `optionalParams` will be swallowed.\n */\nfunction newInvariantError(\n  message?: string | number,\n  ...optionalParams: unknown[]\n) {\n  return new InvariantError(\n    getHandledErrorMsg(message, optionalParams) ||\n      getFallbackErrorMsg(message, optionalParams)\n  );\n}\n\nconst ApolloErrorMessageHandler = Symbol.for(\n  \"ApolloErrorMessageHandler_\" + version\n);\ndeclare global {\n  interface Window {\n    [ApolloErrorMessageHandler]?: {\n      (message: string | number, args: string[]): string | undefined;\n    } & ErrorCodes;\n  }\n}\n\nfunction stringify(arg: any) {\n  if (typeof arg == \"string\") {\n    return arg;\n  }\n\n  try {\n    return stringifyForDisplay(arg, 2).slice(0, 1000);\n  } catch {\n    return \"<non-serializable>\";\n  }\n}\n\nfunction getHandledErrorMsg(\n  message?: string | number,\n  messageArgs: unknown[] = []\n) {\n  if (!message) return;\n  return (\n    global[ApolloErrorMessageHandler] &&\n    global[ApolloErrorMessageHandler](message, messageArgs.map(stringify))\n  );\n}\n\nfunction getFallbackErrorMsg(\n  message?: string | number,\n  messageArgs: unknown[] = []\n) {\n  if (!message) return;\n  return `An error occurred! For more details, see the full error text at https://go.apollo.dev/c/err#${encodeURIComponent(\n    JSON.stringify({\n      version,\n      message,\n      args: messageArgs.map(stringify),\n    })\n  )}`;\n}\n\nexport {\n  invariant,\n  InvariantError,\n  newInvariantError,\n  ApolloErrorMessageHandler,\n};\n","import { makeUniqueId } from \"./makeUniqueId.js\";\n\nexport function stringifyForDisplay(value: any, space = 0): string {\n  const undefId = makeUniqueId(\"stringifyForDisplay\");\n  return JSON.stringify(\n    value,\n    (key, value) => {\n      return value === void 0 ? undefId : value;\n    },\n    space\n  )\n    .split(JSON.stringify(undefId))\n    .join(\"<undefined>\");\n}\n","import {\n  invariant,\n  newInvariantError,\n  InvariantError,\n} from \"./invariantWrappers.js\";\n\nexport { maybe } from \"./maybe.js\";\nexport { default as global } from \"./global.js\";\nexport { invariant, newInvariantError, InvariantError };\n\n/**\n * @deprecated we do not use this internally anymore,\n * it is just exported for backwards compatibility\n */\n// this file is extempt from automatic `__DEV__` replacement\n// so we have to write it out here\n// @ts-ignore\nexport const DEV = globalThis.__DEV__ !== false;\nexport { DEV as __DEV__ };\n","import type { DynamicSamplingContext, PropagationContext, TraceparentData } from '@sentry/types';\n\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { uuid4 } from './misc';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nexport const TRACEPARENT_REGEXP = new RegExp(\n  '^[ \\\\t]*' + // whitespace\n    '([0-9a-f]{32})?' + // trace_id\n    '-?([0-9a-f]{16})?' + // span_id\n    '-?([01])?' + // sampled\n    '[ \\\\t]*$', // whitespace\n);\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?: string): TraceparentData | undefined {\n  if (!traceparent) {\n    return undefined;\n  }\n\n  const matches = traceparent.match(TRACEPARENT_REGEXP);\n  if (!matches) {\n    return undefined;\n  }\n\n  let parentSampled: boolean | undefined;\n  if (matches[3] === '1') {\n    parentSampled = true;\n  } else if (matches[3] === '0') {\n    parentSampled = false;\n  }\n\n  return {\n    traceId: matches[1],\n    parentSampled,\n    parentSpanId: matches[2],\n  };\n}\n\n/**\n * Create tracing context from incoming headers.\n */\nexport function tracingContextFromHeaders(\n  sentryTrace: Parameters<typeof extractTraceparentData>[0],\n  baggage: Parameters<typeof baggageHeaderToDynamicSamplingContext>[0],\n): {\n  traceparentData: ReturnType<typeof extractTraceparentData>;\n  dynamicSamplingContext: ReturnType<typeof baggageHeaderToDynamicSamplingContext>;\n  propagationContext: PropagationContext;\n} {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n  const propagationContext: PropagationContext = {\n    traceId: traceId || uuid4(),\n    spanId: uuid4().substring(16),\n    sampled: parentSampled,\n  };\n\n  if (parentSpanId) {\n    propagationContext.parentSpanId = parentSpanId;\n  }\n\n  if (dynamicSamplingContext) {\n    propagationContext.dsc = dynamicSamplingContext as DynamicSamplingContext;\n  }\n\n  return {\n    traceparentData,\n    dynamicSamplingContext,\n    propagationContext,\n  };\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nexport function generateSentryTraceHeader(\n  traceId: string = uuid4(),\n  spanId: string = uuid4().substring(16),\n  sampled?: boolean,\n): string {\n  let sampledString = '';\n  if (sampled !== undefined) {\n    sampledString = sampled ? '-1' : '-0';\n  }\n  return `${traceId}-${spanId}${sampledString}`;\n}\n","import type {\n  Client,\n  Event,\n  EventHint,\n  Exception,\n  Extras,\n  Hub,\n  Mechanism,\n  ParameterizedString,\n  Severity,\n  SeverityLevel,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\n\nimport { isError, isParameterizedString, isPlainObject } from './is';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc';\nimport { normalizeToSize } from './normalize';\nimport { extractExceptionKeysForMessage } from './object';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nexport function parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n  return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nexport function exceptionFromError(stackParser: StackParser, error: Error): Exception {\n  const exception: Exception = {\n    type: error.name || error.constructor.name,\n    value: error.message,\n  };\n\n  const frames = parseStackFrames(stackParser, error);\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  return exception;\n}\n\nfunction getMessageForObject(exception: object): string {\n  if ('name' in exception && typeof exception.name === 'string') {\n    let message = `'${exception.name}' captured as exception`;\n\n    if ('message' in exception && typeof exception.message === 'string') {\n      message += ` with message '${exception.message}'`;\n    }\n\n    return message;\n  } else if ('message' in exception && typeof exception.message === 'string') {\n    return exception.message;\n  } else {\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    return `Object captured as exception with keys: ${extractExceptionKeysForMessage(\n      exception as Record<string, unknown>,\n    )}`;\n  }\n}\n\n/**\n * Builds and Event from a Exception\n *\n * TODO(v8): Remove getHub fallback\n * @hidden\n */\nexport function eventFromUnknownInput(\n  getHubOrClient: (() => Hub) | Client | undefined,\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n): Event {\n  const client =\n    typeof getHubOrClient === 'function'\n      ? // eslint-disable-next-line deprecation/deprecation\n        getHubOrClient().getClient()\n      : getHubOrClient;\n\n  let ex: unknown = exception;\n  const providedMechanism: Mechanism | undefined =\n    hint && hint.data && (hint.data as { mechanism: Mechanism }).mechanism;\n  const mechanism: Mechanism = providedMechanism || {\n    handled: true,\n    type: 'generic',\n  };\n\n  let extras: Extras | undefined;\n\n  if (!isError(exception)) {\n    if (isPlainObject(exception)) {\n      const normalizeDepth = client && client.getOptions().normalizeDepth;\n      extras = { ['__serialized__']: normalizeToSize(exception as Record<string, unknown>, normalizeDepth) };\n\n      const message = getMessageForObject(exception);\n      ex = (hint && hint.syntheticException) || new Error(message);\n      (ex as Error).message = message;\n    } else {\n      // This handles when someone does: `throw \"something awesome\";`\n      // We use synthesized Error here so we can extract a (rough) stack trace.\n      ex = (hint && hint.syntheticException) || new Error(exception as string);\n      (ex as Error).message = exception as string;\n    }\n    mechanism.synthetic = true;\n  }\n\n  const event: Event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex as Error)],\n    },\n  };\n\n  if (extras) {\n    event.extra = extras;\n  }\n\n  addExceptionTypeValue(event, undefined, undefined);\n  addExceptionMechanism(event, mechanism);\n\n  return {\n    ...event,\n    event_id: hint && hint.event_id,\n  };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: ParameterizedString,\n  // eslint-disable-next-line deprecation/deprecation\n  level: Severity | SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {\n    event_id: hint && hint.event_id,\n    level,\n  };\n\n  if (attachStacktrace && hint && hint.syntheticException) {\n    const frames = parseStackFrames(stackParser, hint.syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [\n          {\n            value: message,\n            stacktrace: { frames },\n          },\n        ],\n      };\n    }\n  }\n\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n","type PartialURL = {\n  host?: string;\n  path?: string;\n  protocol?: string;\n  relative?: string;\n  search?: string;\n  hash?: string;\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: string): PartialURL {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\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: string): string {\n  // eslint-disable-next-line no-useless-escape\n  return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nexport function getNumberOfUrlSegments(url: string): number {\n  // split at '/' or at '\\/' to split regex urls correctly\n  return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span description\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlString(url: PartialURL): string {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    (host &&\n      host\n        // Always filter out authority\n        .replace(/^.*@/, '[filtered]:[filtered]@')\n        // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n        // TODO: Use new URL global if it exists\n        .replace(/(:80)$/, '')\n        .replace(/(:443)$/, '')) ||\n    '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n","import RSVP from 'rsvp';\nimport EmberObject from '@ember/object';\nimport Evented from '@ember/object/evented';\n\n/**\n  The base class for all session stores. __This serves as a starting point for\n  implementing custom session stores and must not be used directly.__\n\n  Session Stores persist the session's state so that it survives a page reload\n  and is synchronized across multiple tabs or windows of the same application.\n\n  @class BaseStore\n  @extends Ember.Object\n  @uses Ember.Evented\n  @public\n*/\nexport default EmberObject.extend(Evented, {\n  /**\n    Triggered when the session store's data changes due to an external event,\n    e.g., from another tab or window of the same application. The session\n    handles that event, passes the updated data to its authenticator's\n    {@linkplain BaseAuthenticator.restore} method and\n    handles the result of that invocation accordingly.\n\n    @memberof BaseStore\n    @event sessionDataUpdated\n    @param {Object} data The updated session data\n    @public\n  */\n\n  /**\n    Persists the `data`. This replaces all currently stored data.\n\n    `BaseStores`'s implementation always returns a rejecting promise. __This\n    method must be overridden in subclasses__.\n\n    @memberof BaseStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {Ember.RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist() {\n    return RSVP.reject();\n  },\n\n  /**\n    Returns all data currently stored as a plain object.\n\n    `BaseStores`'s implementation always returns a rejecting promise. __This\n    method must be overridden in subclasses__.\n\n    @memberof BaseStore\n    @method restore\n    @return {Ember.RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    return RSVP.reject();\n  },\n\n  /**\n    Clears the store.\n\n    `BaseStores`'s implementation always returns a rejecting promise. __This\n    method must be overridden in subclasses__.\n\n    @memberof BaseStore\n    @method clear\n    @return {Ember.RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    return RSVP.reject();\n  },\n});\n","/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v1.13.3/LICENSE.txt */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\ntypeof define === 'function' && define.amd ? define(factory) :\n(global = global || self, global.mapboxgl = factory());\n}(this, (function () { 'use strict';\n\n/* eslint-disable */\n\nvar shared, worker, mapboxgl;\n// define gets called three times: one for each chunk. we rely on the order\n// they're imported to know which is which\nfunction define(_, chunk) {\nif (!shared) {\n    shared = chunk;\n} else if (!worker) {\n    worker = chunk;\n} else {\n    var workerBundleString = 'var sharedChunk = {}; (' + shared + ')(sharedChunk); (' + worker + ')(sharedChunk);'\n\n    var sharedChunk = {};\n    shared(sharedChunk);\n    mapboxgl = chunk(sharedChunk);\n    if (typeof window !== 'undefined') {\n        mapboxgl.workerUrl = window.URL.createObjectURL(new Blob([workerBundleString], { type: 'text/javascript' }));\n    }\n}\n}\n\n\ndefine([\"exports\"],(function(t){\"use strict\";function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=n;function n(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n;}n.prototype.sampleCurveX=function(t){return ((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY=function(t){return ((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX=function(t){return (3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX=function(t,e){var r,n,i,a,o;for(void 0===e&&(e=1e-6),i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)<e)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i-=a/s;}if((i=t)<(r=0))return r;if(i>(n=1))return n;for(;r<n;){if(a=this.sampleCurveX(i),Math.abs(a-t)<e)return i;t>a?r=i:n=i,i=.5*(n-r)+r;}return i},n.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var i=a;function a(t,e){this.x=t,this.y=e;}a.prototype={clone:function(){return new a(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[2]*this.x+t[3]*this.y;return this.x=t[0]*this.x+t[1]*this.y,this.y=e,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=r*this.x+e*this.y;return this.x=e*this.x-r*this.y,this.y=n,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),i=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=e.x+r*(this.x-e.x)-n*(this.y-e.y),this.y=i,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},a.convert=function(t){return t instanceof a?t:Array.isArray(t)?new a(t[0],t[1]):t};var o=\"undefined\"!=typeof self?self:{},s=Math.pow(2,53)-1;function u(t,e,n,i){var a=new r(t,e,n,i);return function(t){return a.solve(t)}}var l=u(.25,.1,.25,1);function p(t,e,r){return Math.min(r,Math.max(e,t))}function c(t,e,r){var n=r-e,i=((t-e)%n+n)%n+e;return i===e?r:i}function h(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o];}return t}var f=1;function y(){return f++}function d(){return function t(e){return e?(e^16*Math.random()>>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function m(t){return !!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function v(t,e){t.forEach((function(t){e[t]&&(e[t]=e[t].bind(e));}));}function g(t,e){return -1!==t.indexOf(e,t.length-e.length)}function x(t,e,r){var n={};for(var i in t)n[i]=e.call(r||this,t[i],i,t);return n}function b(t,e,r){var n={};for(var i in t)e.call(r||this,t[i],i,t)&&(n[i]=t[i]);return n}function w(t){return Array.isArray(t)?t.map(w):\"object\"==typeof t&&t?x(t,w):t}var _={};function A(t){_[t]||(\"undefined\"!=typeof console&&console.warn(t),_[t]=!0);}function S(t,e,r){return (r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function k(t){for(var e=0,r=0,n=t.length,i=n-1,a=void 0,o=void 0;r<n;i=r++)e+=((o=t[i]).x-(a=t[r]).x)*(a.y+o.y);return e}function I(){return \"undefined\"!=typeof WorkerGlobalScope&&\"undefined\"!=typeof self&&self instanceof WorkerGlobalScope}function z(t){var e={};if(t.replace(/(?:^|(?:\\s*\\,\\s*))([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)(?:\\=(?:([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)|(?:\\\"((?:[^\"\\\\]|\\\\.)*)\\\")))?/g,(function(t,r,n,i){var a=n||i;return e[r]=!a||a.toLowerCase(),\"\"})),e[\"max-age\"]){var r=parseInt(e[\"max-age\"],10);isNaN(r)?delete e[\"max-age\"]:e[\"max-age\"]=r;}return e}var C=null;function E(t){if(null==C){var e=t.navigator?t.navigator.userAgent:null;C=!!t.safari||!(!e||!(/\\b(iPad|iPhone|iPod)\\b/.test(e)||e.match(\"Safari\")&&!e.match(\"Chrome\")));}return C}function P(t){try{var e=o[t];return e.setItem(\"_mapbox_test_\",1),e.removeItem(\"_mapbox_test_\"),!0}catch(t){return !1}}var M,B,T,V,F=o.performance&&o.performance.now?o.performance.now.bind(o.performance):Date.now.bind(Date),D=o.requestAnimationFrame||o.mozRequestAnimationFrame||o.webkitRequestAnimationFrame||o.msRequestAnimationFrame,L=o.cancelAnimationFrame||o.mozCancelAnimationFrame||o.webkitCancelAnimationFrame||o.msCancelAnimationFrame,O={now:F,frame:function(t){var e=D(t);return {cancel:function(){return L(e)}}},getImageData:function(t,e){void 0===e&&(e=0);var r=o.document.createElement(\"canvas\"),n=r.getContext(\"2d\");if(!n)throw new Error(\"failed to create canvas 2d context\");return r.width=t.width,r.height=t.height,n.drawImage(t,0,0,t.width,t.height),n.getImageData(-e,-e,t.width+2*e,t.height+2*e)},resolveURL:function(t){return M||(M=o.document.createElement(\"a\")),M.href=t,M.href},hardwareConcurrency:o.navigator&&o.navigator.hardwareConcurrency||4,get devicePixelRatio(){return o.devicePixelRatio},get prefersReducedMotion(){return !!o.matchMedia&&(null==B&&(B=o.matchMedia(\"(prefers-reduced-motion: reduce)\")),B.matches)}},R={API_URL:\"https://api.mapbox.com\",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf(\"https://api.mapbox.cn\")?\"https://events.mapbox.cn/events/v2\":0===this.API_URL.indexOf(\"https://api.mapbox.com\")?\"https://events.mapbox.com/events/v2\":null:null},FEEDBACK_URL:\"https://apps.mapbox.com/feedback\",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},U={supported:!1,testSupport:function(t){!j&&V&&(q?N(t):T=t);}},j=!1,q=!1;function N(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,V),t.isContextLost())return;U.supported=!0;}catch(t){}t.deleteTexture(e),j=!0;}o.document&&((V=o.document.createElement(\"img\")).onload=function(){T&&N(T),T=null,q=!0;},V.onerror=function(){j=!0,T=null;},V.src=\"data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=\");var K=\"01\",G=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken();};function Z(t){return 0===t.indexOf(\"mapbox:\")}G.prototype._createSkuToken=function(){var t=function(){for(var t=\"\",e=0;e<10;e++)t+=\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"[Math.floor(62*Math.random())];return {token:[\"1\",K,t].join(\"\"),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt;},G.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},G.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},G.prototype.normalizeStyleURL=function(t,e){if(!Z(t))return t;var r=Y(t);return r.path=\"/styles/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},G.prototype.normalizeGlyphsURL=function(t,e){if(!Z(t))return t;var r=Y(t);return r.path=\"/fonts/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},G.prototype.normalizeSourceURL=function(t,e){if(!Z(t))return t;var r=Y(t);return r.path=\"/v4/\"+r.authority+\".json\",r.params.push(\"secure\"),this._makeAPIURL(r,this._customAccessToken||e)},G.prototype.normalizeSpriteURL=function(t,e,r,n){var i=Y(t);return Z(t)?(i.path=\"/styles/v1\"+i.path+\"/sprite\"+e+r,this._makeAPIURL(i,this._customAccessToken||n)):(i.path+=\"\"+e+r,$(i))},G.prototype.normalizeTileURL=function(t,e){if(this._isSkuTokenExpired()&&this._createSkuToken(),t&&!Z(t))return t;var r=Y(t);r.path=r.path.replace(/(\\.(png|jpg)\\d*)(?=$)/,(O.devicePixelRatio>=2||512===e?\"@2x\":\"\")+(U.supported?\".webp\":\"$1\")),r.path=r.path.replace(/^.+\\/v4\\//,\"/\"),r.path=\"/v4\"+r.path;var n=this._customAccessToken||function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e].match(/^access_token=(.*)$/);if(n)return n[1]}return null}(r.params)||R.ACCESS_TOKEN;return R.REQUIRE_ACCESS_TOKEN&&n&&this._skuToken&&r.params.push(\"sku=\"+this._skuToken),this._makeAPIURL(r,n)},G.prototype.canonicalizeTileURL=function(t,e){var r=Y(t);if(!r.path.match(/(^\\/v4\\/)/)||!r.path.match(/\\.[\\w]+$/))return t;var n=\"mapbox://tiles/\";n+=r.path.replace(\"/v4/\",\"\");var i=r.params;return e&&(i=i.filter((function(t){return !t.match(/^access_token=/)}))),i.length&&(n+=\"?\"+i.join(\"&\")),n},G.prototype.canonicalizeTileset=function(t,e){for(var r=!!e&&Z(e),n=[],i=0,a=t.tiles||[];i<a.length;i+=1){var o=a[i];J(o)?n.push(this.canonicalizeTileURL(o,r)):n.push(o);}return n},G.prototype._makeAPIURL=function(t,e){var r=\"See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\",n=Y(R.API_URL);if(t.protocol=n.protocol,t.authority=n.authority,\"http\"===t.protocol){var i=t.params.indexOf(\"secure\");i>=0&&t.params.splice(i,1);}if(\"/\"!==n.path&&(t.path=\"\"+n.path+t.path),!R.REQUIRE_ACCESS_TOKEN)return $(t);if(!(e=e||R.ACCESS_TOKEN))throw new Error(\"An API access token is required to use Mapbox GL. \"+r);if(\"s\"===e[0])throw new Error(\"Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). \"+r);return t.params=t.params.filter((function(t){return -1===t.indexOf(\"access_token\")})),t.params.push(\"access_token=\"+e),$(t)};var X=/^((https?:)?\\/\\/)?([^\\/]+\\.)?mapbox\\.c(n|om)(\\/|\\?|$)/i;function J(t){return X.test(t)}var H=/^(\\w+):\\/\\/([^/?]*)(\\/[^?]+)?\\??(.+)?/;function Y(t){var e=t.match(H);if(!e)throw new Error(\"Unable to parse URL object\");return {protocol:e[1],authority:e[2],path:e[3]||\"/\",params:e[4]?e[4].split(\"&\"):[]}}function $(t){var e=t.params.length?\"?\"+t.params.join(\"&\"):\"\";return t.protocol+\"://\"+t.authority+t.path+e}function W(t){if(!t)return null;var e=t.split(\".\");if(!e||3!==e.length)return null;try{return JSON.parse(decodeURIComponent(o.atob(e[1]).split(\"\").map((function(t){return \"%\"+(\"00\"+t.charCodeAt(0).toString(16)).slice(-2)})).join(\"\")))}catch(t){return null}}var Q=function(t){this.type=t,this.anonId=null,this.eventData={},this.queue=[],this.pendingRequest=null;};Q.prototype.getStorageKey=function(t){var e,r=W(R.ACCESS_TOKEN);return e=r&&r.u?o.btoa(encodeURIComponent(r.u).replace(/%([0-9A-F]{2})/g,(function(t,e){return String.fromCharCode(Number(\"0x\"+e))}))):R.ACCESS_TOKEN||\"\",t?\"mapbox.eventData.\"+t+\":\"+e:\"mapbox.eventData:\"+e},Q.prototype.fetchEventData=function(){var t=P(\"localStorage\"),e=this.getStorageKey(),r=this.getStorageKey(\"uuid\");if(t)try{var n=o.localStorage.getItem(e);n&&(this.eventData=JSON.parse(n));var i=o.localStorage.getItem(r);i&&(this.anonId=i);}catch(t){A(\"Unable to read from LocalStorage\");}},Q.prototype.saveEventData=function(){var t=P(\"localStorage\"),e=this.getStorageKey(),r=this.getStorageKey(\"uuid\");if(t)try{o.localStorage.setItem(r,this.anonId),Object.keys(this.eventData).length>=1&&o.localStorage.setItem(e,JSON.stringify(this.eventData));}catch(t){A(\"Unable to write to LocalStorage\");}},Q.prototype.processRequests=function(t){},Q.prototype.postEvent=function(t,e,r,n){var i=this;if(R.EVENTS_URL){var a=Y(R.EVENTS_URL);a.params.push(\"access_token=\"+(n||R.ACCESS_TOKEN||\"\"));var o={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:\"mapbox-gl-js\",sdkVersion:\"1.13.3\",skuId:K,userId:this.anonId},s=e?h(o,e):o,u={url:$(a),headers:{\"Content-Type\":\"text/plain\"},body:JSON.stringify([s])};this.pendingRequest=wt(u,(function(t){i.pendingRequest=null,r(t),i.saveEventData(),i.processRequests(n);}));}},Q.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e);};var tt,et,rt=function(t){function e(){t.call(this,\"map.load\"),this.success={},this.skuToken=\"\";}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.postMapLoadEvent=function(t,e,r,n){this.skuToken=r;var i=!(!n&&!R.ACCESS_TOKEN),a=Array.isArray(t)&&t.some((function(t){return Z(t)||J(t)}));R.EVENTS_URL&&i&&a&&this.queueRequest({id:e,timestamp:Date.now()},n);},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var r=this.queue.shift(),n=r.id,i=r.timestamp;n&&this.success[n]||(this.anonId||this.fetchEventData(),m(this.anonId)||(this.anonId=d()),this.postEvent(i,{skuToken:this.skuToken},(function(t){t||n&&(e.success[n]=!0);}),t));}},e}(Q),nt=new(function(t){function e(e){t.call(this,\"appUserTurnstile\"),this._customAccessToken=e;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.postTurnstileEvent=function(t,e){R.EVENTS_URL&&R.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return Z(t)||J(t)}))&&this.queueRequest(Date.now(),e);},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var r=W(R.ACCESS_TOKEN),n=r?r.u:R.ACCESS_TOKEN,i=n!==this.eventData.tokenU;m(this.anonId)||(this.anonId=d(),i=!0);var a=this.queue.shift();if(this.eventData.lastSuccess){var o=new Date(this.eventData.lastSuccess),s=new Date(a),u=(a-this.eventData.lastSuccess)/864e5;i=i||u>=1||u<-1||o.getDate()!==s.getDate();}else i=!0;if(!i)return this.processRequests();this.postEvent(a,{\"enabled.telemetry\":!1},(function(t){t||(e.eventData.lastSuccess=a,e.eventData.tokenU=n);}),t);}},e}(Q)),it=nt.postTurnstileEvent.bind(nt),at=new rt,ot=at.postMapLoadEvent.bind(at),st=500,ut=50;function lt(){o.caches&&!tt&&(tt=o.caches.open(\"mapbox-tiles\"));}function pt(t){var e=t.indexOf(\"?\");return e<0?t:t.slice(0,e)}var ct,ht=1/0;function ft(){return null==ct&&(ct=o.OffscreenCanvas&&new o.OffscreenCanvas(1,1).getContext(\"2d\")&&\"function\"==typeof o.createImageBitmap),ct}var yt={Unknown:\"Unknown\",Style:\"Style\",Source:\"Source\",Tile:\"Tile\",Glyphs:\"Glyphs\",SpriteImage:\"SpriteImage\",SpriteJSON:\"SpriteJSON\",Image:\"Image\"};\"function\"==typeof Object.freeze&&Object.freeze(yt);var dt=function(t){function e(e,r,n){401===r&&J(n)&&(e+=\": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\"),t.call(this,e),this.status=r,this.url=n,this.name=this.constructor.name,this.message=e;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.toString=function(){return this.name+\": \"+this.message+\" (\"+this.status+\"): \"+this.url},e}(Error),mt=I()?function(){return self.worker&&self.worker.referrer}:function(){return (\"blob:\"===o.location.protocol?o.parent:o).location.href};var vt,gt,xt=function(t,e){if(!(/^file:/.test(r=t.url)||/^file:/.test(mt())&&!/^\\w+:/.test(r))){if(o.fetch&&o.Request&&o.AbortController&&o.Request.prototype.hasOwnProperty(\"signal\"))return function(t,e){var r,n=new o.AbortController,i=new o.Request(t.url,{method:t.method||\"GET\",body:t.body,credentials:t.credentials,headers:t.headers,referrer:mt(),signal:n.signal}),a=!1,s=!1,u=(r=i.url).indexOf(\"sku=\")>0&&J(r);\"json\"===t.type&&i.headers.set(\"Accept\",\"application/json\");var l=function(r,n,a){if(!s){if(r&&\"SecurityError\"!==r.message&&A(r),n&&a)return p(n);var l=Date.now();o.fetch(i).then((function(r){if(r.ok){var n=u?r.clone():null;return p(r,n,l)}return e(new dt(r.statusText,r.status,t.url))})).catch((function(t){20!==t.code&&e(new Error(t.message));}));}},p=function(r,n,u){(\"arrayBuffer\"===t.type?r.arrayBuffer():\"json\"===t.type?r.json():r.text()).then((function(t){s||(n&&u&&function(t,e,r){if(lt(),tt){var n={status:e.status,statusText:e.statusText,headers:new o.Headers};e.headers.forEach((function(t,e){return n.headers.set(e,t)}));var i=z(e.headers.get(\"Cache-Control\")||\"\");i[\"no-store\"]||(i[\"max-age\"]&&n.headers.set(\"Expires\",new Date(r+1e3*i[\"max-age\"]).toUTCString()),new Date(n.headers.get(\"Expires\")).getTime()-r<42e4||function(t,e){if(void 0===et)try{new Response(new ReadableStream),et=!0;}catch(t){et=!1;}et?e(t.body):t.blob().then(e);}(e,(function(e){var r=new o.Response(e,n);lt(),tt&&tt.then((function(e){return e.put(pt(t.url),r)})).catch((function(t){return A(t.message)}));})));}}(i,n,u),a=!0,e(null,t,r.headers.get(\"Cache-Control\"),r.headers.get(\"Expires\")));})).catch((function(t){s||e(new Error(t.message));}));};return u?function(t,e){if(lt(),!tt)return e(null);var r=pt(t.url);tt.then((function(t){t.match(r).then((function(n){var i=function(t){if(!t)return !1;var e=new Date(t.headers.get(\"Expires\")||0),r=z(t.headers.get(\"Cache-Control\")||\"\");return e>Date.now()&&!r[\"no-cache\"]}(n);t.delete(r),i&&t.put(r,n.clone()),e(null,n,i);})).catch(e);})).catch(e);}(i,l):l(null,null),{cancel:function(){s=!0,a||n.abort();}}}(t,e);if(I()&&self.worker&&self.worker.actor)return self.worker.actor.send(\"getResource\",t,e,void 0,!0)}var r;return function(t,e){var r=new o.XMLHttpRequest;for(var n in r.open(t.method||\"GET\",t.url,!0),\"arrayBuffer\"===t.type&&(r.responseType=\"arraybuffer\"),t.headers)r.setRequestHeader(n,t.headers[n]);return \"json\"===t.type&&(r.responseType=\"text\",r.setRequestHeader(\"Accept\",\"application/json\")),r.withCredentials=\"include\"===t.credentials,r.onerror=function(){e(new Error(r.statusText));},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var n=r.response;if(\"json\"===t.type)try{n=JSON.parse(r.response);}catch(t){return e(t)}e(null,n,r.getResponseHeader(\"Cache-Control\"),r.getResponseHeader(\"Expires\"));}else e(new dt(r.statusText,r.status,t.url));},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},bt=function(t,e){return xt(h(t,{type:\"arrayBuffer\"}),e)},wt=function(t,e){return xt(h(t,{method:\"POST\"}),e)},_t=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=\";vt=[],gt=0;var At=function(t,e){if(U.supported&&(t.headers||(t.headers={}),t.headers.accept=\"image/webp,*/*\"),gt>=R.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0;}};return vt.push(r),r}gt++;var n=!1,i=function(){if(!n)for(n=!0,gt--;vt.length&&gt<R.MAX_PARALLEL_IMAGE_REQUESTS;){var t=vt.shift();t.cancelled||(t.cancel=At(t.requestParameters,t.callback).cancel);}},a=bt(t,(function(t,r,n,a){i(),t?e(t):r&&(ft()?function(t,e){var r=new o.Blob([new Uint8Array(t)],{type:\"image/png\"});o.createImageBitmap(r).then((function(t){e(null,t);})).catch((function(t){e(new Error(\"Could not load image because of \"+t.message+\". Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\"));}));}(r,e):function(t,e,r,n){var i=new o.Image,a=o.URL;i.onload=function(){e(null,i),a.revokeObjectURL(i.src),i.onload=null,o.requestAnimationFrame((function(){i.src=_t;}));},i.onerror=function(){return e(new Error(\"Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\"))};var s=new o.Blob([new Uint8Array(t)],{type:\"image/png\"});i.cacheControl=r,i.expires=n,i.src=t.byteLength?a.createObjectURL(s):_t;}(r,e,n,a));}));return {cancel:function(){a.cancel(),i();}}};function St(t,e,r){r[t]&&-1!==r[t].indexOf(e)||(r[t]=r[t]||[],r[t].push(e));}function kt(t,e,r){if(r&&r[t]){var n=r[t].indexOf(e);-1!==n&&r[t].splice(n,1);}}var It=function(t,e){void 0===e&&(e={}),h(this,e),this.type=t;},zt=function(t){function e(e,r){void 0===r&&(r={}),t.call(this,\"error\",h({error:e},r));}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(It),Ct=function(){};Ct.prototype.on=function(t,e){return this._listeners=this._listeners||{},St(t,e,this._listeners),this},Ct.prototype.off=function(t,e){return kt(t,e,this._listeners),kt(t,e,this._oneTimeListeners),this},Ct.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},St(t,e,this._oneTimeListeners),this},Ct.prototype.fire=function(t,e){\"string\"==typeof t&&(t=new It(t,e||{}));var r=t.type;if(this.listens(r)){t.target=this;for(var n=0,i=this._listeners&&this._listeners[r]?this._listeners[r].slice():[];n<i.length;n+=1)i[n].call(this,t);for(var a=0,o=this._oneTimeListeners&&this._oneTimeListeners[r]?this._oneTimeListeners[r].slice():[];a<o.length;a+=1){var s=o[a];kt(r,s,this._oneTimeListeners),s.call(this,t);}var u=this._eventedParent;u&&(h(t,\"function\"==typeof this._eventedParentData?this._eventedParentData():this._eventedParentData),u.fire(t));}else t instanceof zt&&console.error(t.error);return this},Ct.prototype.listens=function(t){return this._listeners&&this._listeners[t]&&this._listeners[t].length>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},Ct.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var Et={$version:8,$root:{version:{required:!0,type:\"enum\",values:[8]},name:{type:\"string\"},metadata:{type:\"*\"},center:{type:\"array\",value:\"number\"},zoom:{type:\"number\"},bearing:{type:\"number\",default:0,period:360,units:\"degrees\"},pitch:{type:\"number\",default:0,units:\"degrees\"},light:{type:\"light\"},sources:{required:!0,type:\"sources\"},sprite:{type:\"string\"},glyphs:{type:\"string\"},transition:{type:\"transition\"},layers:{required:!0,type:\"array\",value:\"layer\"}},sources:{\"*\":{type:\"source\"}},source:[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],source_vector:{type:{required:!0,type:\"enum\",values:{vector:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},attribution:{type:\"string\"},promoteId:{type:\"promoteId\"},volatile:{type:\"boolean\",default:!1},\"*\":{type:\"*\"}},source_raster:{type:{required:!0,type:\"enum\",values:{raster:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},attribution:{type:\"string\"},volatile:{type:\"boolean\",default:!1},\"*\":{type:\"*\"}},source_raster_dem:{type:{required:!0,type:\"enum\",values:{\"raster-dem\":{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},attribution:{type:\"string\"},encoding:{type:\"enum\",values:{terrarium:{},mapbox:{}},default:\"mapbox\"},volatile:{type:\"boolean\",default:!1},\"*\":{type:\"*\"}},source_geojson:{type:{required:!0,type:\"enum\",values:{geojson:{}}},data:{type:\"*\"},maxzoom:{type:\"number\",default:18},attribution:{type:\"string\"},buffer:{type:\"number\",default:128,maximum:512,minimum:0},filter:{type:\"*\"},tolerance:{type:\"number\",default:.375},cluster:{type:\"boolean\",default:!1},clusterRadius:{type:\"number\",default:50,minimum:0},clusterMaxZoom:{type:\"number\"},clusterMinPoints:{type:\"number\"},clusterProperties:{type:\"*\"},lineMetrics:{type:\"boolean\",default:!1},generateId:{type:\"boolean\",default:!1},promoteId:{type:\"promoteId\"}},source_video:{type:{required:!0,type:\"enum\",values:{video:{}}},urls:{required:!0,type:\"array\",value:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},source_image:{type:{required:!0,type:\"enum\",values:{image:{}}},url:{required:!0,type:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},layer:{id:{type:\"string\",required:!0},type:{type:\"enum\",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},\"fill-extrusion\":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:\"*\"},source:{type:\"string\"},\"source-layer\":{type:\"string\"},minzoom:{type:\"number\",minimum:0,maximum:24},maxzoom:{type:\"number\",minimum:0,maximum:24},filter:{type:\"filter\"},layout:{type:\"layout\"},paint:{type:\"paint\"}},layout:[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\"],layout_background:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_fill:{\"fill-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_circle:{\"circle-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_heatmap:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_line:{\"line-cap\":{type:\"enum\",values:{butt:{},round:{},square:{}},default:\"butt\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-join\":{type:\"enum\",values:{bevel:{},round:{},miter:{}},default:\"miter\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{type:\"number\",default:2,requires:[{\"line-join\":\"miter\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{type:\"number\",default:1.05,requires:[{\"line-join\":\"round\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_symbol:{\"symbol-placement\":{type:\"enum\",values:{point:{},line:{},\"line-center\":{}},default:\"point\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{type:\"number\",default:250,minimum:1,units:\"pixels\",requires:[{\"symbol-placement\":\"line\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{type:\"boolean\",default:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{type:\"enum\",values:{auto:{},\"viewport-y\":{},source:{}},default:\"auto\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{type:\"boolean\",default:!1,requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{type:\"number\",default:1,minimum:0,units:\"factor of the original icon size\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{type:\"enum\",values:{none:{},width:{},height:{},both:{}},default:\"none\",requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{type:\"array\",value:\"number\",length:4,default:[0,0,0,0],units:\"pixels\",requires:[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{type:\"resolvedImage\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{type:\"boolean\",default:!1,requires:[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{type:\"array\",value:\"number\",length:2,default:[0,0],requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{type:\"formatted\",default:\"\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{type:\"array\",value:\"string\",default:[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{type:\"number\",default:16,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{type:\"number\",default:10,minimum:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{type:\"number\",default:1.2,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-letter-spacing\":{type:\"number\",default:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{type:\"enum\",values:{auto:{},left:{},center:{},right:{}},default:\"center\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{type:\"number\",units:\"ems\",default:0,requires:[\"text-field\"],\"property-type\":\"data-driven\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{type:\"array\",value:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"text-field\",{\"!\":\"text-variable-anchor\"}],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{type:\"number\",default:45,units:\"degrees\",requires:[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{type:\"array\",value:\"enum\",values:{horizontal:{},vertical:{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{type:\"boolean\",default:!0,requires:[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{type:\"enum\",values:{none:{},uppercase:{},lowercase:{}},default:\"none\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{type:\"array\",value:\"number\",units:\"ems\",length:2,default:[0,0],requires:[\"text-field\",{\"!\":\"text-radial-offset\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{type:\"boolean\",default:!1,requires:[\"text-field\",\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_raster:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_hillshade:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},filter:{type:\"array\",value:\"*\"},filter_operator:{type:\"enum\",values:{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},in:{},\"!in\":{},all:{},any:{},none:{},has:{},\"!has\":{},within:{}}},geometry_type:{type:\"enum\",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:\"expression\"},stops:{type:\"array\",value:\"function_stop\"},base:{type:\"number\",default:1,minimum:0},property:{type:\"string\",default:\"$zoom\"},type:{type:\"enum\",values:{identity:{},exponential:{},interval:{},categorical:{}},default:\"exponential\"},colorSpace:{type:\"enum\",values:{rgb:{},lab:{},hcl:{}},default:\"rgb\"},default:{type:\"*\",required:!1}},function_stop:{type:\"array\",minimum:0,maximum:24,value:[\"number\",\"color\"],length:2},expression:{type:\"array\",value:\"*\",minimum:1},light:{anchor:{type:\"enum\",default:\"viewport\",values:{map:{},viewport:{}},\"property-type\":\"data-constant\",transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]}},position:{type:\"array\",default:[1.15,210,30],length:3,value:\"number\",\"property-type\":\"data-constant\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]}},color:{type:\"color\",\"property-type\":\"data-constant\",default:\"#ffffff\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},intensity:{type:\"number\",\"property-type\":\"data-constant\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0}},paint:[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\"],paint_fill:{\"fill-antialias\":{type:\"boolean\",default:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{type:\"color\",transition:!0,requires:[{\"!\":\"fill-pattern\"},{\"fill-antialias\":!0}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-extrusion-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-extrusion-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"fill-extrusion-height\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,requires:[\"fill-extrusion-height\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{type:\"boolean\",default:!0,transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_line:{\"line-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"line-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{type:\"number\",default:1,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{type:\"number\",default:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{type:\"array\",value:\"number\",minimum:0,transition:!0,units:\"line widths\",requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"line-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"line-gradient\":{type:\"color\",transition:!1,requires:[{\"!\":\"line-dasharray\"},{\"!\":\"line-pattern\"},{source:\"geojson\",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[\"line-progress\"]},\"property-type\":\"color-ramp\"}},paint_circle:{\"circle-radius\":{type:\"number\",default:5,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{type:\"number\",default:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"circle-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},paint_heatmap:{\"heatmap-radius\":{type:\"number\",default:30,minimum:1,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{type:\"number\",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{type:\"number\",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{type:\"color\",default:[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",.1,\"royalblue\",.3,\"cyan\",.5,\"lime\",.7,\"yellow\",1,\"red\"],transition:!1,expression:{interpolated:!0,parameters:[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_symbol:{\"icon-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"icon-image\",\"icon-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{type:\"color\",default:\"#000000\",transition:!0,overridable:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"text-field\",\"text-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_raster:{\"raster-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{type:\"number\",default:0,period:360,transition:!0,units:\"degrees\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{type:\"number\",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{type:\"number\",default:300,minimum:0,transition:!1,units:\"milliseconds\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_hillshade:{\"hillshade-illumination-direction\":{type:\"number\",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{type:\"number\",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{type:\"color\",default:\"#FFFFFF\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_background:{\"background-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"background-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"background-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},transition:{duration:{type:\"number\",default:300,minimum:0,units:\"milliseconds\"},delay:{type:\"number\",default:0,minimum:0,units:\"milliseconds\"}},\"property-type\":{\"data-driven\":{type:\"property-type\"},\"cross-faded\":{type:\"property-type\"},\"cross-faded-data-driven\":{type:\"property-type\"},\"color-ramp\":{type:\"property-type\"},\"data-constant\":{type:\"property-type\"},constant:{type:\"property-type\"}},promoteId:{\"*\":{type:\"string\"}}},Pt=function(t,e,r,n){this.message=(t?t+\": \":\"\")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__);};function Mt(t){var e=t.value;return e?[new Pt(t.key,e,\"constants have been deprecated as of v8\")]:[]}function Bt(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o];}return t}function Tt(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}function Vt(t){if(Array.isArray(t))return t.map(Vt);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){var e={};for(var r in t)e[r]=Vt(t[r]);return e}return Tt(t)}var Ft=function(t){function e(e,r){t.call(this,r),this.message=r,this.key=e;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(Error),Dt=function(t,e){void 0===e&&(e=[]),this.parent=t,this.bindings={};for(var r=0,n=e;r<n.length;r+=1){var i=n[r];this.bindings[i[0]]=i[1];}};Dt.prototype.concat=function(t){return new Dt(this,t)},Dt.prototype.get=function(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+\" not found in scope.\")},Dt.prototype.has=function(t){return !!this.bindings[t]||!!this.parent&&this.parent.has(t)};var Lt={kind:\"null\"},Ot={kind:\"number\"},Rt={kind:\"string\"},Ut={kind:\"boolean\"},jt={kind:\"color\"},qt={kind:\"object\"},Nt={kind:\"value\"},Kt={kind:\"collator\"},Gt={kind:\"formatted\"},Zt={kind:\"resolvedImage\"};function Xt(t,e){return {kind:\"array\",itemType:t,N:e}}function Jt(t){if(\"array\"===t.kind){var e=Jt(t.itemType);return \"number\"==typeof t.N?\"array<\"+e+\", \"+t.N+\">\":\"value\"===t.itemType.kind?\"array\":\"array<\"+e+\">\"}return t.kind}var Ht=[Lt,Ot,Rt,Ut,jt,Gt,qt,Xt(Nt),Zt];function Yt(t,e){if(\"error\"===e.kind)return null;if(\"array\"===t.kind){if(\"array\"===e.kind&&(0===e.N&&\"value\"===e.itemType.kind||!Yt(t.itemType,e.itemType))&&(\"number\"!=typeof t.N||t.N===e.N))return null}else {if(t.kind===e.kind)return null;if(\"value\"===t.kind)for(var r=0,n=Ht;r<n.length;r+=1)if(!Yt(n[r],e))return null}return \"Expected \"+Jt(t)+\" but found \"+Jt(e)+\" instead.\"}function $t(t,e){return e.some((function(e){return e.kind===t.kind}))}function Wt(t,e){return e.some((function(e){return \"null\"===e?null===t:\"array\"===e?Array.isArray(t):\"object\"===e?t&&!Array.isArray(t)&&\"object\"==typeof t:e===typeof t}))}var Qt=e((function(t,e){var r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function n(t){return (t=Math.round(t))<0?0:t>255?255:t}function i(t){return n(\"%\"===t[t.length-1]?parseFloat(t)/100*255:parseInt(t))}function a(t){return (e=\"%\"===t[t.length-1]?parseFloat(t)/100:parseFloat(t))<0?0:e>1?1:e;var e;}function o(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,s=t.replace(/ /g,\"\").toLowerCase();if(s in r)return r[s].slice();if(\"#\"===s[0])return 4===s.length?(e=parseInt(s.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===s.length&&(e=parseInt(s.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var u=s.indexOf(\"(\"),l=s.indexOf(\")\");if(-1!==u&&l+1===s.length){var p=s.substr(0,u),c=s.substr(u+1,l-(u+1)).split(\",\"),h=1;switch(p){case\"rgba\":if(4!==c.length)return null;h=a(c.pop());case\"rgb\":return 3!==c.length?null:[i(c[0]),i(c[1]),i(c[2]),h];case\"hsla\":if(4!==c.length)return null;h=a(c.pop());case\"hsl\":if(3!==c.length)return null;var f=(parseFloat(c[0])%360+360)%360/360,y=a(c[1]),d=a(c[2]),m=d<=.5?d*(y+1):d+y-d*y,v=2*d-m;return [n(255*o(v,m,f+1/3)),n(255*o(v,m,f)),n(255*o(v,m,f-1/3)),h];default:return null}}return null};}catch(t){}})).parseCSSColor,te=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n;};te.parse=function(t){if(t){if(t instanceof te)return t;if(\"string\"==typeof t){var e=Qt(t);if(e)return new te(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},te.prototype.toString=function(){var t=this.toArray(),e=t[1],r=t[2],n=t[3];return \"rgba(\"+Math.round(t[0])+\",\"+Math.round(e)+\",\"+Math.round(r)+\",\"+n+\")\"},te.prototype.toArray=function(){var t=this.a;return 0===t?[0,0,0,0]:[255*this.r/t,255*this.g/t,255*this.b/t,t]},te.black=new te(0,0,0,1),te.white=new te(1,1,1,1),te.transparent=new te(0,0,0,0),te.red=new te(1,0,0,1);var ee=function(t,e,r){this.sensitivity=t?e?\"variant\":\"case\":e?\"accent\":\"base\",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:\"search\"});};ee.prototype.compare=function(t,e){return this.collator.compare(t,e)},ee.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var re=function(t,e,r,n,i){this.text=t,this.image=e,this.scale=r,this.fontStack=n,this.textColor=i;},ne=function(t){this.sections=t;};ne.fromString=function(t){return new ne([new re(t,null,null,null,null)])},ne.prototype.isEmpty=function(){return 0===this.sections.length||!this.sections.some((function(t){return 0!==t.text.length||t.image&&0!==t.image.name.length}))},ne.factory=function(t){return t instanceof ne?t:ne.fromString(t)},ne.prototype.toString=function(){return 0===this.sections.length?\"\":this.sections.map((function(t){return t.text})).join(\"\")},ne.prototype.serialize=function(){for(var t=[\"format\"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];if(n.image)t.push([\"image\",n.image.name]);else {t.push(n.text);var i={};n.fontStack&&(i[\"text-font\"]=[\"literal\",n.fontStack.split(\",\")]),n.scale&&(i[\"font-scale\"]=n.scale),n.textColor&&(i[\"text-color\"]=[\"rgba\"].concat(n.textColor.toArray())),t.push(i);}}return t};var ie=function(t){this.name=t.name,this.available=t.available;};function ae(t,e,r,n){return \"number\"==typeof t&&t>=0&&t<=255&&\"number\"==typeof e&&e>=0&&e<=255&&\"number\"==typeof r&&r>=0&&r<=255?void 0===n||\"number\"==typeof n&&n>=0&&n<=1?null:\"Invalid rgba value [\"+[t,e,r,n].join(\", \")+\"]: 'a' must be between 0 and 1.\":\"Invalid rgba value [\"+(\"number\"==typeof n?[t,e,r,n]:[t,e,r]).join(\", \")+\"]: 'r', 'g', and 'b' must be between 0 and 255.\"}function oe(t){if(null===t)return !0;if(\"string\"==typeof t)return !0;if(\"boolean\"==typeof t)return !0;if(\"number\"==typeof t)return !0;if(t instanceof te)return !0;if(t instanceof ee)return !0;if(t instanceof ne)return !0;if(t instanceof ie)return !0;if(Array.isArray(t)){for(var e=0,r=t;e<r.length;e+=1)if(!oe(r[e]))return !1;return !0}if(\"object\"==typeof t){for(var n in t)if(!oe(t[n]))return !1;return !0}return !1}function se(t){if(null===t)return Lt;if(\"string\"==typeof t)return Rt;if(\"boolean\"==typeof t)return Ut;if(\"number\"==typeof t)return Ot;if(t instanceof te)return jt;if(t instanceof ee)return Kt;if(t instanceof ne)return Gt;if(t instanceof ie)return Zt;if(Array.isArray(t)){for(var e,r=t.length,n=0,i=t;n<i.length;n+=1){var a=se(i[n]);if(e){if(e===a)continue;e=Nt;break}e=a;}return Xt(e||Nt,r)}return qt}function ue(t){var e=typeof t;return null===t?\"\":\"string\"===e||\"number\"===e||\"boolean\"===e?String(t):t instanceof te||t instanceof ne||t instanceof ie?t.toString():JSON.stringify(t)}ie.prototype.toString=function(){return this.name},ie.fromString=function(t){return t?new ie({name:t,available:!1}):null},ie.prototype.serialize=function(){return [\"image\",this.name]};var le=function(t,e){this.type=t,this.value=e;};le.parse=function(t,e){if(2!==t.length)return e.error(\"'literal' expression requires exactly one argument, but found \"+(t.length-1)+\" instead.\");if(!oe(t[1]))return e.error(\"invalid value\");var r=t[1],n=se(r),i=e.expectedType;return \"array\"!==n.kind||0!==n.N||!i||\"array\"!==i.kind||\"number\"==typeof i.N&&0!==i.N||(n=i),new le(n,r)},le.prototype.evaluate=function(){return this.value},le.prototype.eachChild=function(){},le.prototype.outputDefined=function(){return !0},le.prototype.serialize=function(){return \"array\"===this.type.kind||\"object\"===this.type.kind?[\"literal\",this.value]:this.value instanceof te?[\"rgba\"].concat(this.value.toArray()):this.value instanceof ne?this.value.serialize():this.value};var pe=function(t){this.name=\"ExpressionEvaluationError\",this.message=t;};pe.prototype.toJSON=function(){return this.message};var ce={string:Rt,number:Ot,boolean:Ut,object:qt},he=function(t,e){this.type=t,this.args=e;};he.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r,n=1,i=t[0];if(\"array\"===i){var a,o;if(t.length>2){var s=t[1];if(\"string\"!=typeof s||!(s in ce)||\"object\"===s)return e.error('The item type argument of \"array\" must be one of string, number, boolean',1);a=ce[s],n++;}else a=Nt;if(t.length>3){if(null!==t[2]&&(\"number\"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to \"array\" must be a positive integer literal',2);o=t[2],n++;}r=Xt(a,o);}else r=ce[i];for(var u=[];n<t.length;n++){var l=e.parse(t[n],n,Nt);if(!l)return null;u.push(l);}return new he(r,u)},he.prototype.evaluate=function(t){for(var e=0;e<this.args.length;e++){var r=this.args[e].evaluate(t);if(!Yt(this.type,se(r)))return r;if(e===this.args.length-1)throw new pe(\"Expected value to be of type \"+Jt(this.type)+\", but found \"+Jt(se(r))+\" instead.\")}return null},he.prototype.eachChild=function(t){this.args.forEach(t);},he.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},he.prototype.serialize=function(){var t=this.type,e=[t.kind];if(\"array\"===t.kind){var r=t.itemType;if(\"string\"===r.kind||\"number\"===r.kind||\"boolean\"===r.kind){e.push(r.kind);var n=t.N;(\"number\"==typeof n||this.args.length>1)&&e.push(n);}}return e.concat(this.args.map((function(t){return t.serialize()})))};var fe=function(t){this.type=Gt,this.sections=t;};fe.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r=t[1];if(!Array.isArray(r)&&\"object\"==typeof r)return e.error(\"First argument must be an image or text section.\");for(var n=[],i=!1,a=1;a<=t.length-1;++a){var o=t[a];if(i&&\"object\"==typeof o&&!Array.isArray(o)){i=!1;var s=null;if(o[\"font-scale\"]&&!(s=e.parse(o[\"font-scale\"],1,Ot)))return null;var u=null;if(o[\"text-font\"]&&!(u=e.parse(o[\"text-font\"],1,Xt(Rt))))return null;var l=null;if(o[\"text-color\"]&&!(l=e.parse(o[\"text-color\"],1,jt)))return null;var p=n[n.length-1];p.scale=s,p.font=u,p.textColor=l;}else {var c=e.parse(t[a],1,Nt);if(!c)return null;var h=c.type.kind;if(\"string\"!==h&&\"value\"!==h&&\"null\"!==h&&\"resolvedImage\"!==h)return e.error(\"Formatted text type must be 'string', 'value', 'image' or 'null'.\");i=!0,n.push({content:c,scale:null,font:null,textColor:null});}}return new fe(n)},fe.prototype.evaluate=function(t){return new ne(this.sections.map((function(e){var r=e.content.evaluate(t);return se(r)===Zt?new re(\"\",r,null,null,null):new re(ue(r),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(\",\"):null,e.textColor?e.textColor.evaluate(t):null)})))},fe.prototype.eachChild=function(t){for(var e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t(n.content),n.scale&&t(n.scale),n.font&&t(n.font),n.textColor&&t(n.textColor);}},fe.prototype.outputDefined=function(){return !1},fe.prototype.serialize=function(){for(var t=[\"format\"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.content.serialize());var i={};n.scale&&(i[\"font-scale\"]=n.scale.serialize()),n.font&&(i[\"text-font\"]=n.font.serialize()),n.textColor&&(i[\"text-color\"]=n.textColor.serialize()),t.push(i);}return t};var ye=function(t){this.type=Zt,this.input=t;};ye.parse=function(t,e){if(2!==t.length)return e.error(\"Expected two arguments.\");var r=e.parse(t[1],1,Rt);return r?new ye(r):e.error(\"No image name provided.\")},ye.prototype.evaluate=function(t){var e=this.input.evaluate(t),r=ie.fromString(e);return r&&t.availableImages&&(r.available=t.availableImages.indexOf(e)>-1),r},ye.prototype.eachChild=function(t){t(this.input);},ye.prototype.outputDefined=function(){return !1},ye.prototype.serialize=function(){return [\"image\",this.input.serialize()]};var de={\"to-boolean\":Ut,\"to-color\":jt,\"to-number\":Ot,\"to-string\":Rt},me=function(t,e){this.type=t,this.args=e;};me.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r=t[0];if((\"to-boolean\"===r||\"to-string\"===r)&&2!==t.length)return e.error(\"Expected one argument.\");for(var n=de[r],i=[],a=1;a<t.length;a++){var o=e.parse(t[a],a,Nt);if(!o)return null;i.push(o);}return new me(n,i)},me.prototype.evaluate=function(t){if(\"boolean\"===this.type.kind)return Boolean(this.args[0].evaluate(t));if(\"color\"===this.type.kind){for(var e,r,n=0,i=this.args;n<i.length;n+=1){if(r=null,(e=i[n].evaluate(t))instanceof te)return e;if(\"string\"==typeof e){var a=t.parseColor(e);if(a)return a}else if(Array.isArray(e)&&!(r=e.length<3||e.length>4?\"Invalid rbga value \"+JSON.stringify(e)+\": expected an array containing either three or four numeric values.\":ae(e[0],e[1],e[2],e[3])))return new te(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new pe(r||\"Could not parse color from value '\"+(\"string\"==typeof e?e:String(JSON.stringify(e)))+\"'\")}if(\"number\"===this.type.kind){for(var o=null,s=0,u=this.args;s<u.length;s+=1){if(null===(o=u[s].evaluate(t)))return 0;var l=Number(o);if(!isNaN(l))return l}throw new pe(\"Could not convert \"+JSON.stringify(o)+\" to number.\")}return \"formatted\"===this.type.kind?ne.fromString(ue(this.args[0].evaluate(t))):\"resolvedImage\"===this.type.kind?ie.fromString(ue(this.args[0].evaluate(t))):ue(this.args[0].evaluate(t))},me.prototype.eachChild=function(t){this.args.forEach(t);},me.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},me.prototype.serialize=function(){if(\"formatted\"===this.type.kind)return new fe([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if(\"resolvedImage\"===this.type.kind)return new ye(this.args[0]).serialize();var t=[\"to-\"+this.type.kind];return this.eachChild((function(e){t.push(e.serialize());})),t};var ve=[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"],ge=function(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null;};ge.prototype.id=function(){return this.feature&&\"id\"in this.feature?this.feature.id:null},ge.prototype.geometryType=function(){return this.feature?\"number\"==typeof this.feature.type?ve[this.feature.type]:this.feature.type:null},ge.prototype.geometry=function(){return this.feature&&\"geometry\"in this.feature?this.feature.geometry:null},ge.prototype.canonicalID=function(){return this.canonical},ge.prototype.properties=function(){return this.feature&&this.feature.properties||{}},ge.prototype.parseColor=function(t){var e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=te.parse(t)),e};var xe=function(t,e,r,n){this.name=t,this.type=e,this._evaluate=r,this.args=n;};xe.prototype.evaluate=function(t){return this._evaluate(t,this.args)},xe.prototype.eachChild=function(t){this.args.forEach(t);},xe.prototype.outputDefined=function(){return !1},xe.prototype.serialize=function(){return [this.name].concat(this.args.map((function(t){return t.serialize()})))},xe.parse=function(t,e){var r,n=t[0],i=xe.definitions[n];if(!i)return e.error('Unknown expression \"'+n+'\". If you wanted a literal array, use [\"literal\", [...]].',0);for(var a=Array.isArray(i)?i[0]:i.type,o=Array.isArray(i)?[[i[1],i[2]]]:i.overloads,s=o.filter((function(e){var r=e[0];return !Array.isArray(r)||r.length===t.length-1})),u=null,l=0,p=s;l<p.length;l+=1){var c=p[l],h=c[0],f=c[1];u=new je(e.registry,e.path,null,e.scope);for(var y=[],d=!1,m=1;m<t.length;m++){var v=t[m],g=Array.isArray(h)?h[m-1]:h.type,x=u.parse(v,1+y.length,g);if(!x){d=!0;break}y.push(x);}if(!d)if(Array.isArray(h)&&h.length!==y.length)u.error(\"Expected \"+h.length+\" arguments, but found \"+y.length+\" instead.\");else {for(var b=0;b<y.length;b++){var w=Array.isArray(h)?h[b]:h.type,_=y[b];u.concat(b+1).checkSubtype(w,_.type);}if(0===u.errors.length)return new xe(n,a,f,y)}}if(1===s.length)(r=e.errors).push.apply(r,u.errors);else {for(var A=(s.length?s:o).map((function(t){var e;return e=t[0],Array.isArray(e)?\"(\"+e.map(Jt).join(\", \")+\")\":\"(\"+Jt(e.type)+\"...)\"})).join(\" | \"),S=[],k=1;k<t.length;k++){var I=e.parse(t[k],1+S.length);if(!I)return null;S.push(Jt(I.type));}e.error(\"Expected arguments of type \"+A+\", but found (\"+S.join(\", \")+\") instead.\");}return null},xe.register=function(t,e){for(var r in xe.definitions=e,e)t[r]=xe;};var be=function(t,e,r){this.type=Kt,this.locale=r,this.caseSensitive=t,this.diacriticSensitive=e;};function we(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.min(t[1],e[1]),t[2]=Math.max(t[2],e[0]),t[3]=Math.max(t[3],e[1]);}function _e(t,e){return !(t[0]<=e[0]||t[2]>=e[2]||t[1]<=e[1]||t[3]>=e[3])}function Ae(t,e){var r=(180+t[0])/360,n=(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t[1]*Math.PI/360)))/360,i=Math.pow(2,e.z);return [Math.round(r*i*8192),Math.round(n*i*8192)]}function Se(t,e,r){return e[1]>t[1]!=r[1]>t[1]&&t[0]<(r[0]-e[0])*(t[1]-e[1])/(r[1]-e[1])+e[0]}function ke(t,e){for(var r,n,i,a,o,s,u,l=!1,p=0,c=e.length;p<c;p++)for(var h=e[p],f=0,y=h.length;f<y-1;f++){if((a=(r=t)[0]-(n=h[f])[0])*(u=r[1]-(i=h[f+1])[1])-(s=r[0]-i[0])*(o=r[1]-n[1])==0&&a*s<=0&&o*u<=0)return !1;Se(t,h[f],h[f+1])&&(l=!l);}return l}function Ie(t,e){for(var r=0;r<e.length;r++)if(ke(t,e[r]))return !0;return !1}function ze(t,e,r,n){var i=n[0]-r[0],a=n[1]-r[1],o=(t[0]-r[0])*a-i*(t[1]-r[1]),s=(e[0]-r[0])*a-i*(e[1]-r[1]);return o>0&&s<0||o<0&&s>0}function Ce(t,e,r){for(var n=0,i=r;n<i.length;n+=1)for(var a=i[n],o=0;o<a.length-1;++o)if(0!=(c=[(p=a[o+1])[0]-(l=a[o])[0],p[1]-l[1]])[0]*(h=[(u=e)[0]-(s=t)[0],u[1]-s[1]])[1]-c[1]*h[0]&&ze(s,u,l,p)&&ze(l,p,s,u))return !0;var s,u,l,p,c,h;return !1}function Ee(t,e){for(var r=0;r<t.length;++r)if(!ke(t[r],e))return !1;for(var n=0;n<t.length-1;++n)if(Ce(t[n],t[n+1],e))return !1;return !0}function Pe(t,e){for(var r=0;r<e.length;r++)if(Ee(t,e[r]))return !0;return !1}function Me(t,e,r){for(var n=[],i=0;i<t.length;i++){for(var a=[],o=0;o<t[i].length;o++){var s=Ae(t[i][o],r);we(e,s),a.push(s);}n.push(a);}return n}function Be(t,e,r){for(var n=[],i=0;i<t.length;i++){var a=Me(t[i],e,r);n.push(a);}return n}function Te(t,e,r,n){if(t[0]<r[0]||t[0]>r[2]){var i=.5*n,a=t[0]-r[0]>i?-n:r[0]-t[0]>i?n:0;0===a&&(a=t[0]-r[2]>i?-n:r[2]-t[0]>i?n:0),t[0]+=a;}we(e,t);}function Ve(t,e,r,n){for(var i=8192*Math.pow(2,n.z),a=[8192*n.x,8192*n.y],o=[],s=0,u=t;s<u.length;s+=1)for(var l=0,p=u[s];l<p.length;l+=1){var c=p[l],h=[c.x+a[0],c.y+a[1]];Te(h,e,r,i),o.push(h);}return o}function Fe(t,e,r,n){for(var i,a=8192*Math.pow(2,n.z),o=[8192*n.x,8192*n.y],s=[],u=0,l=t;u<l.length;u+=1){for(var p=[],c=0,h=l[u];c<h.length;c+=1){var f=h[c],y=[f.x+o[0],f.y+o[1]];we(e,y),p.push(y);}s.push(p);}if(e[2]-e[0]<=a/2){(i=e)[0]=i[1]=1/0,i[2]=i[3]=-1/0;for(var d=0,m=s;d<m.length;d+=1)for(var v=0,g=m[d];v<g.length;v+=1)Te(g[v],e,r,a);}return s}be.parse=function(t,e){if(2!==t.length)return e.error(\"Expected one argument.\");var r=t[1];if(\"object\"!=typeof r||Array.isArray(r))return e.error(\"Collator options argument must be an object.\");var n=e.parse(void 0!==r[\"case-sensitive\"]&&r[\"case-sensitive\"],1,Ut);if(!n)return null;var i=e.parse(void 0!==r[\"diacritic-sensitive\"]&&r[\"diacritic-sensitive\"],1,Ut);if(!i)return null;var a=null;return r.locale&&!(a=e.parse(r.locale,1,Rt))?null:new be(n,i,a)},be.prototype.evaluate=function(t){return new ee(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},be.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale);},be.prototype.outputDefined=function(){return !1},be.prototype.serialize=function(){var t={};return t[\"case-sensitive\"]=this.caseSensitive.serialize(),t[\"diacritic-sensitive\"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),[\"collator\",t]};var De=function(t,e){this.type=Ut,this.geojson=t,this.geometries=e;};function Le(t){if(t instanceof xe){if(\"get\"===t.name&&1===t.args.length)return !1;if(\"feature-state\"===t.name)return !1;if(\"has\"===t.name&&1===t.args.length)return !1;if(\"properties\"===t.name||\"geometry-type\"===t.name||\"id\"===t.name)return !1;if(/^filter-/.test(t.name))return !1}if(t instanceof De)return !1;var e=!0;return t.eachChild((function(t){e&&!Le(t)&&(e=!1);})),e}function Oe(t){if(t instanceof xe&&\"feature-state\"===t.name)return !1;var e=!0;return t.eachChild((function(t){e&&!Oe(t)&&(e=!1);})),e}function Re(t,e){if(t instanceof xe&&e.indexOf(t.name)>=0)return !1;var r=!0;return t.eachChild((function(t){r&&!Re(t,e)&&(r=!1);})),r}De.parse=function(t,e){if(2!==t.length)return e.error(\"'within' expression requires exactly one argument, but found \"+(t.length-1)+\" instead.\");if(oe(t[1])){var r=t[1];if(\"FeatureCollection\"===r.type)for(var n=0;n<r.features.length;++n){var i=r.features[n].geometry.type;if(\"Polygon\"===i||\"MultiPolygon\"===i)return new De(r,r.features[n].geometry)}else if(\"Feature\"===r.type){var a=r.geometry.type;if(\"Polygon\"===a||\"MultiPolygon\"===a)return new De(r,r.geometry)}else if(\"Polygon\"===r.type||\"MultiPolygon\"===r.type)return new De(r,r)}return e.error(\"'within' expression requires valid geojson object that contains polygon geometry type.\")},De.prototype.evaluate=function(t){if(null!=t.geometry()&&null!=t.canonicalID()){if(\"Point\"===t.geometryType())return function(t,e){var r=[1/0,1/0,-1/0,-1/0],n=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if(\"Polygon\"===e.type){var a=Me(e.coordinates,n,i),o=Ve(t.geometry(),r,n,i);if(!_e(r,n))return !1;for(var s=0,u=o;s<u.length;s+=1)if(!ke(u[s],a))return !1}if(\"MultiPolygon\"===e.type){var l=Be(e.coordinates,n,i),p=Ve(t.geometry(),r,n,i);if(!_e(r,n))return !1;for(var c=0,h=p;c<h.length;c+=1)if(!Ie(h[c],l))return !1}return !0}(t,this.geometries);if(\"LineString\"===t.geometryType())return function(t,e){var r=[1/0,1/0,-1/0,-1/0],n=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if(\"Polygon\"===e.type){var a=Me(e.coordinates,n,i),o=Fe(t.geometry(),r,n,i);if(!_e(r,n))return !1;for(var s=0,u=o;s<u.length;s+=1)if(!Ee(u[s],a))return !1}if(\"MultiPolygon\"===e.type){var l=Be(e.coordinates,n,i),p=Fe(t.geometry(),r,n,i);if(!_e(r,n))return !1;for(var c=0,h=p;c<h.length;c+=1)if(!Pe(h[c],l))return !1}return !0}(t,this.geometries)}return !1},De.prototype.eachChild=function(){},De.prototype.outputDefined=function(){return !0},De.prototype.serialize=function(){return [\"within\",this.geojson]};var Ue=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e;};Ue.parse=function(t,e){if(2!==t.length||\"string\"!=typeof t[1])return e.error(\"'var' expression requires exactly one string literal argument.\");var r=t[1];return e.scope.has(r)?new Ue(r,e.scope.get(r)):e.error('Unknown variable \"'+r+'\". Make sure \"'+r+'\" has been bound in an enclosing \"let\" expression before using it.',1)},Ue.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},Ue.prototype.eachChild=function(){},Ue.prototype.outputDefined=function(){return !1},Ue.prototype.serialize=function(){return [\"var\",this.name]};var je=function(t,e,r,n,i){void 0===e&&(e=[]),void 0===n&&(n=new Dt),void 0===i&&(i=[]),this.registry=t,this.path=e,this.key=e.map((function(t){return \"[\"+t+\"]\"})).join(\"\"),this.scope=n,this.errors=i,this.expectedType=r;};function qe(t,e){for(var r,n=t.length-1,i=0,a=n,o=0;i<=a;)if((r=t[o=Math.floor((i+a)/2)])<=e){if(o===n||e<t[o+1])return o;i=o+1;}else {if(!(r>e))throw new pe(\"Input is not a number.\");a=o-1;}return 0}je.prototype.parse=function(t,e,r,n,i){return void 0===i&&(i={}),e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)},je.prototype._parse=function(t,e){function r(t,e,r){return \"assert\"===r?new he(e,[t]):\"coerce\"===r?new me(e,[t]):t}if(null!==t&&\"string\"!=typeof t&&\"boolean\"!=typeof t&&\"number\"!=typeof t||(t=[\"literal\",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].');var n=t[0];if(\"string\"!=typeof n)return this.error(\"Expression name must be a string, but found \"+typeof n+' instead. If you wanted a literal array, use [\"literal\", [...]].',0),null;var i=this.registry[n];if(i){var a=i.parse(t,this);if(!a)return null;if(this.expectedType){var o=this.expectedType,s=a.type;if(\"string\"!==o.kind&&\"number\"!==o.kind&&\"boolean\"!==o.kind&&\"object\"!==o.kind&&\"array\"!==o.kind||\"value\"!==s.kind)if(\"color\"!==o.kind&&\"formatted\"!==o.kind&&\"resolvedImage\"!==o.kind||\"value\"!==s.kind&&\"string\"!==s.kind){if(this.checkSubtype(o,s))return null}else a=r(a,o,e.typeAnnotation||\"coerce\");else a=r(a,o,e.typeAnnotation||\"assert\");}if(!(a instanceof le)&&\"resolvedImage\"!==a.type.kind&&function t(e){if(e instanceof Ue)return t(e.boundExpression);if(e instanceof xe&&\"error\"===e.name)return !1;if(e instanceof be)return !1;if(e instanceof De)return !1;var r=e instanceof me||e instanceof he,n=!0;return e.eachChild((function(e){n=r?n&&t(e):n&&e instanceof le;})),!!n&&Le(e)&&Re(e,[\"zoom\",\"heatmap-density\",\"line-progress\",\"accumulated\",\"is-supported-script\"])}(a)){var u=new ge;try{a=new le(a.type,a.evaluate(u));}catch(t){return this.error(t.message),null}}return a}return this.error('Unknown expression \"'+n+'\". If you wanted a literal array, use [\"literal\", [...]].',0)}return this.error(void 0===t?\"'undefined' value invalid. Use null instead.\":\"object\"==typeof t?'Bare objects invalid. Use [\"literal\", {...}] instead.':\"Expected an array, but found \"+typeof t+\" instead.\")},je.prototype.concat=function(t,e,r){var n=\"number\"==typeof t?this.path.concat(t):this.path,i=r?this.scope.concat(r):this.scope;return new je(this.registry,n,e||null,i,this.errors)},je.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=\"\"+this.key+e.map((function(t){return \"[\"+t+\"]\"})).join(\"\");this.errors.push(new Ft(n,t));},je.prototype.checkSubtype=function(t,e){var r=Yt(t,e);return r&&this.error(r),r};var Ne=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,i=r;n<i.length;n+=1){var a=i[n],o=a[1];this.labels.push(a[0]),this.outputs.push(o);}};function Ke(t,e,r){return t*(1-r)+e*r}Ne.parse=function(t,e){if(t.length-1<4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!=0)return e.error(\"Expected an even number of arguments.\");var r=e.parse(t[1],1,Ot);if(!r)return null;var n=[],i=null;e.expectedType&&\"value\"!==e.expectedType.kind&&(i=e.expectedType);for(var a=1;a<t.length;a+=2){var o=1===a?-1/0:t[a],s=t[a+1],u=a,l=a+1;if(\"number\"!=typeof o)return e.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',u);if(n.length&&n[n.length-1][0]>=o)return e.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.',u);var p=e.parse(s,l,i);if(!p)return null;i=i||p.type,n.push([o,p]);}return new Ne(i,r,n)},Ne.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;return n>=e[i-1]?r[i-1].evaluate(t):r[qe(e,n)].evaluate(t)},Ne.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e]);},Ne.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},Ne.prototype.serialize=function(){for(var t=[\"step\",this.input.serialize()],e=0;e<this.labels.length;e++)e>0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var Ge=Object.freeze({__proto__:null,number:Ke,color:function(t,e,r){return new te(Ke(t.r,e.r,r),Ke(t.g,e.g,r),Ke(t.b,e.b,r),Ke(t.a,e.a,r))},array:function(t,e,r){return t.map((function(t,n){return Ke(t,e[n],r)}))}}),Ze=6/29*3*(6/29),Xe=Math.PI/180,Je=180/Math.PI;function He(t){return t>.008856451679035631?Math.pow(t,1/3):t/Ze+4/29}function Ye(t){return t>6/29?t*t*t:Ze*(t-4/29)}function $e(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function We(t){return (t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Qe(t){var e=We(t.r),r=We(t.g),n=We(t.b),i=He((.4124564*e+.3575761*r+.1804375*n)/.95047),a=He((.2126729*e+.7151522*r+.072175*n)/1);return {l:116*a-16,a:500*(i-a),b:200*(a-He((.0193339*e+.119192*r+.9503041*n)/1.08883)),alpha:t.a}}function tr(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=1*Ye(e),r=.95047*Ye(r),n=1.08883*Ye(n),new te($e(3.2404542*r-1.5371385*e-.4985314*n),$e(-.969266*r+1.8760108*e+.041556*n),$e(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function er(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}var rr={forward:Qe,reverse:tr,interpolate:function(t,e,r){return {l:Ke(t.l,e.l,r),a:Ke(t.a,e.a,r),b:Ke(t.b,e.b,r),alpha:Ke(t.alpha,e.alpha,r)}}},nr={forward:function(t){var e=Qe(t),r=e.l,n=e.a,i=e.b,a=Math.atan2(i,n)*Je;return {h:a<0?a+360:a,c:Math.sqrt(n*n+i*i),l:r,alpha:t.a}},reverse:function(t){var e=t.h*Xe,r=t.c;return tr({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return {h:er(t.h,e.h,r),c:Ke(t.c,e.c,r),l:Ke(t.l,e.l,r),alpha:Ke(t.alpha,e.alpha,r)}}},ir=Object.freeze({__proto__:null,lab:rr,hcl:nr}),ar=function(t,e,r,n,i){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var a=0,o=i;a<o.length;a+=1){var s=o[a],u=s[1];this.labels.push(s[0]),this.outputs.push(u);}};function or(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}ar.interpolationFactor=function(t,e,n,i){var a=0;if(\"exponential\"===t.name)a=or(e,t.base,n,i);else if(\"linear\"===t.name)a=or(e,1,n,i);else if(\"cubic-bezier\"===t.name){var o=t.controlPoints;a=new r(o[0],o[1],o[2],o[3]).solve(or(e,1,n,i));}return a},ar.parse=function(t,e){var r=t[0],n=t[1],i=t[2],a=t.slice(3);if(!Array.isArray(n)||0===n.length)return e.error(\"Expected an interpolation type expression.\",1);if(\"linear\"===n[0])n={name:\"linear\"};else if(\"exponential\"===n[0]){var o=n[1];if(\"number\"!=typeof o)return e.error(\"Exponential interpolation requires a numeric base.\",1,1);n={name:\"exponential\",base:o};}else {if(\"cubic-bezier\"!==n[0])return e.error(\"Unknown interpolation type \"+String(n[0]),1,0);var s=n.slice(1);if(4!==s.length||s.some((function(t){return \"number\"!=typeof t||t<0||t>1})))return e.error(\"Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.\",1);n={name:\"cubic-bezier\",controlPoints:s};}if(t.length-1<4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!=0)return e.error(\"Expected an even number of arguments.\");if(!(i=e.parse(i,2,Ot)))return null;var u=[],l=null;\"interpolate-hcl\"===r||\"interpolate-lab\"===r?l=jt:e.expectedType&&\"value\"!==e.expectedType.kind&&(l=e.expectedType);for(var p=0;p<a.length;p+=2){var c=a[p],h=a[p+1],f=p+3,y=p+4;if(\"number\"!=typeof c)return e.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',f);if(u.length&&u[u.length-1][0]>=c)return e.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.',f);var d=e.parse(h,y,l);if(!d)return null;l=l||d.type,u.push([c,d]);}return \"number\"===l.kind||\"color\"===l.kind||\"array\"===l.kind&&\"number\"===l.itemType.kind&&\"number\"==typeof l.N?new ar(l,r,n,i,u):e.error(\"Type \"+Jt(l)+\" is not interpolatable.\")},ar.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);var a=qe(e,n),o=ar.interpolationFactor(this.interpolation,n,e[a],e[a+1]),s=r[a].evaluate(t),u=r[a+1].evaluate(t);return \"interpolate\"===this.operator?Ge[this.type.kind.toLowerCase()](s,u,o):\"interpolate-hcl\"===this.operator?nr.reverse(nr.interpolate(nr.forward(s),nr.forward(u),o)):rr.reverse(rr.interpolate(rr.forward(s),rr.forward(u),o))},ar.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e]);},ar.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},ar.prototype.serialize=function(){var t;t=\"linear\"===this.interpolation.name?[\"linear\"]:\"exponential\"===this.interpolation.name?1===this.interpolation.base?[\"linear\"]:[\"exponential\",this.interpolation.base]:[\"cubic-bezier\"].concat(this.interpolation.controlPoints);for(var e=[this.operator,t,this.input.serialize()],r=0;r<this.labels.length;r++)e.push(this.labels[r],this.outputs[r].serialize());return e};var sr=function(t,e){this.type=t,this.args=e;};sr.parse=function(t,e){if(t.length<2)return e.error(\"Expectected at least one argument.\");var r=null,n=e.expectedType;n&&\"value\"!==n.kind&&(r=n);for(var i=[],a=0,o=t.slice(1);a<o.length;a+=1){var s=e.parse(o[a],1+i.length,r,void 0,{typeAnnotation:\"omit\"});if(!s)return null;r=r||s.type,i.push(s);}var u=n&&i.some((function(t){return Yt(n,t.type)}));return new sr(u?Nt:r,i)},sr.prototype.evaluate=function(t){for(var e,r=null,n=0,i=0,a=this.args;i<a.length&&(n++,(r=a[i].evaluate(t))&&r instanceof ie&&!r.available&&(e||(e=r.name),r=null,n===this.args.length&&(r=e)),null===r);i+=1);return r},sr.prototype.eachChild=function(t){this.args.forEach(t);},sr.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},sr.prototype.serialize=function(){var t=[\"coalesce\"];return this.eachChild((function(e){t.push(e.serialize());})),t};var ur=function(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e;};ur.prototype.evaluate=function(t){return this.result.evaluate(t)},ur.prototype.eachChild=function(t){for(var e=0,r=this.bindings;e<r.length;e+=1)t(r[e][1]);t(this.result);},ur.parse=function(t,e){if(t.length<4)return e.error(\"Expected at least 3 arguments, but found \"+(t.length-1)+\" instead.\");for(var r=[],n=1;n<t.length-1;n+=2){var i=t[n];if(\"string\"!=typeof i)return e.error(\"Expected string, but found \"+typeof i+\" instead.\",n);if(/[^a-zA-Z0-9_]/.test(i))return e.error(\"Variable names must contain only alphanumeric characters or '_'.\",n);var a=e.parse(t[n+1],n+1);if(!a)return null;r.push([i,a]);}var o=e.parse(t[t.length-1],t.length-1,e.expectedType,r);return o?new ur(r,o):null},ur.prototype.outputDefined=function(){return this.result.outputDefined()},ur.prototype.serialize=function(){for(var t=[\"let\"],e=0,r=this.bindings;e<r.length;e+=1){var n=r[e];t.push(n[0],n[1].serialize());}return t.push(this.result.serialize()),t};var lr=function(t,e,r){this.type=t,this.index=e,this.input=r;};lr.parse=function(t,e){if(3!==t.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Ot),n=e.parse(t[2],2,Xt(e.expectedType||Nt));return r&&n?new lr(n.type.itemType,r,n):null},lr.prototype.evaluate=function(t){var e=this.index.evaluate(t),r=this.input.evaluate(t);if(e<0)throw new pe(\"Array index out of bounds: \"+e+\" < 0.\");if(e>=r.length)throw new pe(\"Array index out of bounds: \"+e+\" > \"+(r.length-1)+\".\");if(e!==Math.floor(e))throw new pe(\"Array index must be an integer, but found \"+e+\" instead.\");return r[e]},lr.prototype.eachChild=function(t){t(this.index),t(this.input);},lr.prototype.outputDefined=function(){return !1},lr.prototype.serialize=function(){return [\"at\",this.index.serialize(),this.input.serialize()]};var pr=function(t,e){this.type=Ut,this.needle=t,this.haystack=e;};pr.parse=function(t,e){if(3!==t.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Nt),n=e.parse(t[2],2,Nt);return r&&n?$t(r.type,[Ut,Rt,Ot,Lt,Nt])?new pr(r,n):e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Jt(r.type)+\" instead\"):null},pr.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!r)return !1;if(!Wt(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new pe(\"Expected first argument to be of type boolean, string, number or null, but found \"+Jt(se(e))+\" instead.\");if(!Wt(r,[\"string\",\"array\"]))throw new pe(\"Expected second argument to be of type array or string, but found \"+Jt(se(r))+\" instead.\");return r.indexOf(e)>=0},pr.prototype.eachChild=function(t){t(this.needle),t(this.haystack);},pr.prototype.outputDefined=function(){return !0},pr.prototype.serialize=function(){return [\"in\",this.needle.serialize(),this.haystack.serialize()]};var cr=function(t,e,r){this.type=Ot,this.needle=t,this.haystack=e,this.fromIndex=r;};cr.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Nt),n=e.parse(t[2],2,Nt);if(!r||!n)return null;if(!$t(r.type,[Ut,Rt,Ot,Lt,Nt]))return e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Jt(r.type)+\" instead\");if(4===t.length){var i=e.parse(t[3],3,Ot);return i?new cr(r,n,i):null}return new cr(r,n)},cr.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!Wt(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new pe(\"Expected first argument to be of type boolean, string, number or null, but found \"+Jt(se(e))+\" instead.\");if(!Wt(r,[\"string\",\"array\"]))throw new pe(\"Expected second argument to be of type array or string, but found \"+Jt(se(r))+\" instead.\");if(this.fromIndex){var n=this.fromIndex.evaluate(t);return r.indexOf(e,n)}return r.indexOf(e)},cr.prototype.eachChild=function(t){t(this.needle),t(this.haystack),this.fromIndex&&t(this.fromIndex);},cr.prototype.outputDefined=function(){return !1},cr.prototype.serialize=function(){if(null!=this.fromIndex&&void 0!==this.fromIndex){var t=this.fromIndex.serialize();return [\"index-of\",this.needle.serialize(),this.haystack.serialize(),t]}return [\"index-of\",this.needle.serialize(),this.haystack.serialize()]};var hr=function(t,e,r,n,i,a){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=i,this.otherwise=a;};hr.parse=function(t,e){if(t.length<5)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!=1)return e.error(\"Expected an even number of arguments.\");var r,n;e.expectedType&&\"value\"!==e.expectedType.kind&&(n=e.expectedType);for(var i={},a=[],o=2;o<t.length-1;o+=2){var s=t[o],u=t[o+1];Array.isArray(s)||(s=[s]);var l=e.concat(o);if(0===s.length)return l.error(\"Expected at least one branch label.\");for(var p=0,c=s;p<c.length;p+=1){var h=c[p];if(\"number\"!=typeof h&&\"string\"!=typeof h)return l.error(\"Branch labels must be numbers or strings.\");if(\"number\"==typeof h&&Math.abs(h)>Number.MAX_SAFE_INTEGER)return l.error(\"Branch labels must be integers no larger than \"+Number.MAX_SAFE_INTEGER+\".\");if(\"number\"==typeof h&&Math.floor(h)!==h)return l.error(\"Numeric branch labels must be integer values.\");if(r){if(l.checkSubtype(r,se(h)))return null}else r=se(h);if(void 0!==i[String(h)])return l.error(\"Branch labels must be unique.\");i[String(h)]=a.length;}var f=e.parse(u,o,n);if(!f)return null;n=n||f.type,a.push(f);}var y=e.parse(t[1],1,Nt);if(!y)return null;var d=e.parse(t[t.length-1],t.length-1,n);return d?\"value\"!==y.type.kind&&e.concat(1).checkSubtype(r,y.type)?null:new hr(r,n,y,i,a,d):null},hr.prototype.evaluate=function(t){var e=this.input.evaluate(t);return (se(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},hr.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise);},hr.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))&&this.otherwise.outputDefined()},hr.prototype.serialize=function(){for(var t=this,e=[\"match\",this.input.serialize()],r=[],n={},i=0,a=Object.keys(this.cases).sort();i<a.length;i+=1){var o=a[i];void 0===(c=n[this.cases[o]])?(n[this.cases[o]]=r.length,r.push([this.cases[o],[o]])):r[c][1].push(o);}for(var s=function(e){return \"number\"===t.inputType.kind?Number(e):e},u=0,l=r;u<l.length;u+=1){var p=l[u],c=p[0],h=p[1];e.push(1===h.length?s(h[0]):h.map(s)),e.push(this.outputs[outputIndex$1].serialize());}return e.push(this.otherwise.serialize()),e};var fr=function(t,e,r){this.type=t,this.branches=e,this.otherwise=r;};fr.parse=function(t,e){if(t.length<4)return e.error(\"Expected at least 3 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!=0)return e.error(\"Expected an odd number of arguments.\");var r;e.expectedType&&\"value\"!==e.expectedType.kind&&(r=e.expectedType);for(var n=[],i=1;i<t.length-1;i+=2){var a=e.parse(t[i],i,Ut);if(!a)return null;var o=e.parse(t[i+1],i+1,r);if(!o)return null;n.push([a,o]),r=r||o.type;}var s=e.parse(t[t.length-1],t.length-1,r);return s?new fr(r,n,s):null},fr.prototype.evaluate=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[1];if(n[0].evaluate(t))return i.evaluate(t)}return this.otherwise.evaluate(t)},fr.prototype.eachChild=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[1];t(n[0]),t(i);}t(this.otherwise);},fr.prototype.outputDefined=function(){return this.branches.every((function(t){return t[1].outputDefined()}))&&this.otherwise.outputDefined()},fr.prototype.serialize=function(){var t=[\"case\"];return this.eachChild((function(e){t.push(e.serialize());})),t};var yr=function(t,e,r,n){this.type=t,this.input=e,this.beginIndex=r,this.endIndex=n;};function dr(t,e){return \"==\"===t||\"!=\"===t?\"boolean\"===e.kind||\"string\"===e.kind||\"number\"===e.kind||\"null\"===e.kind||\"value\"===e.kind:\"string\"===e.kind||\"number\"===e.kind||\"value\"===e.kind}function mr(t,e,r,n){return 0===n.compare(e,r)}function vr(t,e,r){var n=\"==\"!==t&&\"!=\"!==t;return function(){function i(t,e,r){this.type=Ut,this.lhs=t,this.rhs=e,this.collator=r,this.hasUntypedArgument=\"value\"===t.type.kind||\"value\"===e.type.kind;}return i.parse=function(t,e){if(3!==t.length&&4!==t.length)return e.error(\"Expected two or three arguments.\");var r=t[0],a=e.parse(t[1],1,Nt);if(!a)return null;if(!dr(r,a.type))return e.concat(1).error('\"'+r+\"\\\" comparisons are not supported for type '\"+Jt(a.type)+\"'.\");var o=e.parse(t[2],2,Nt);if(!o)return null;if(!dr(r,o.type))return e.concat(2).error('\"'+r+\"\\\" comparisons are not supported for type '\"+Jt(o.type)+\"'.\");if(a.type.kind!==o.type.kind&&\"value\"!==a.type.kind&&\"value\"!==o.type.kind)return e.error(\"Cannot compare types '\"+Jt(a.type)+\"' and '\"+Jt(o.type)+\"'.\");n&&(\"value\"===a.type.kind&&\"value\"!==o.type.kind?a=new he(o.type,[a]):\"value\"!==a.type.kind&&\"value\"===o.type.kind&&(o=new he(a.type,[o])));var s=null;if(4===t.length){if(\"string\"!==a.type.kind&&\"string\"!==o.type.kind&&\"value\"!==a.type.kind&&\"value\"!==o.type.kind)return e.error(\"Cannot use collator to compare non-string types.\");if(!(s=e.parse(t[3],3,Kt)))return null}return new i(a,o,s)},i.prototype.evaluate=function(i){var a=this.lhs.evaluate(i),o=this.rhs.evaluate(i);if(n&&this.hasUntypedArgument){var s=se(a),u=se(o);if(s.kind!==u.kind||\"string\"!==s.kind&&\"number\"!==s.kind)throw new pe('Expected arguments for \"'+t+'\" to be (string, string) or (number, number), but found ('+s.kind+\", \"+u.kind+\") instead.\")}if(this.collator&&!n&&this.hasUntypedArgument){var l=se(a),p=se(o);if(\"string\"!==l.kind||\"string\"!==p.kind)return e(i,a,o)}return this.collator?r(i,a,o,this.collator.evaluate(i)):e(i,a,o)},i.prototype.eachChild=function(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator);},i.prototype.outputDefined=function(){return !0},i.prototype.serialize=function(){var e=[t];return this.eachChild((function(t){e.push(t.serialize());})),e},i}()}yr.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Nt),n=e.parse(t[2],2,Ot);if(!r||!n)return null;if(!$t(r.type,[Xt(Nt),Rt,Nt]))return e.error(\"Expected first argument to be of type array or string, but found \"+Jt(r.type)+\" instead\");if(4===t.length){var i=e.parse(t[3],3,Ot);return i?new yr(r.type,r,n,i):null}return new yr(r.type,r,n)},yr.prototype.evaluate=function(t){var e=this.input.evaluate(t),r=this.beginIndex.evaluate(t);if(!Wt(e,[\"string\",\"array\"]))throw new pe(\"Expected first argument to be of type array or string, but found \"+Jt(se(e))+\" instead.\");if(this.endIndex){var n=this.endIndex.evaluate(t);return e.slice(r,n)}return e.slice(r)},yr.prototype.eachChild=function(t){t(this.input),t(this.beginIndex),this.endIndex&&t(this.endIndex);},yr.prototype.outputDefined=function(){return !1},yr.prototype.serialize=function(){if(null!=this.endIndex&&void 0!==this.endIndex){var t=this.endIndex.serialize();return [\"slice\",this.input.serialize(),this.beginIndex.serialize(),t]}return [\"slice\",this.input.serialize(),this.beginIndex.serialize()]};var gr=vr(\"==\",(function(t,e,r){return e===r}),mr),xr=vr(\"!=\",(function(t,e,r){return e!==r}),(function(t,e,r,n){return !mr(0,e,r,n)})),br=vr(\"<\",(function(t,e,r){return e<r}),(function(t,e,r,n){return n.compare(e,r)<0})),wr=vr(\">\",(function(t,e,r){return e>r}),(function(t,e,r,n){return n.compare(e,r)>0})),_r=vr(\"<=\",(function(t,e,r){return e<=r}),(function(t,e,r,n){return n.compare(e,r)<=0})),Ar=vr(\">=\",(function(t,e,r){return e>=r}),(function(t,e,r,n){return n.compare(e,r)>=0})),Sr=function(t,e,r,n,i){this.type=Rt,this.number=t,this.locale=e,this.currency=r,this.minFractionDigits=n,this.maxFractionDigits=i;};Sr.parse=function(t,e){if(3!==t.length)return e.error(\"Expected two arguments.\");var r=e.parse(t[1],1,Ot);if(!r)return null;var n=t[2];if(\"object\"!=typeof n||Array.isArray(n))return e.error(\"NumberFormat options argument must be an object.\");var i=null;if(n.locale&&!(i=e.parse(n.locale,1,Rt)))return null;var a=null;if(n.currency&&!(a=e.parse(n.currency,1,Rt)))return null;var o=null;if(n[\"min-fraction-digits\"]&&!(o=e.parse(n[\"min-fraction-digits\"],1,Ot)))return null;var s=null;return n[\"max-fraction-digits\"]&&!(s=e.parse(n[\"max-fraction-digits\"],1,Ot))?null:new Sr(r,i,a,o,s)},Sr.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?\"currency\":\"decimal\",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},Sr.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits);},Sr.prototype.outputDefined=function(){return !1},Sr.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t[\"min-fraction-digits\"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t[\"max-fraction-digits\"]=this.maxFractionDigits.serialize()),[\"number-format\",this.number.serialize(),t]};var kr=function(t){this.type=Ot,this.input=t;};kr.parse=function(t,e){if(2!==t.length)return e.error(\"Expected 1 argument, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1);return r?\"array\"!==r.type.kind&&\"string\"!==r.type.kind&&\"value\"!==r.type.kind?e.error(\"Expected argument of type string or array, but found \"+Jt(r.type)+\" instead.\"):new kr(r):null},kr.prototype.evaluate=function(t){var e=this.input.evaluate(t);if(\"string\"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new pe(\"Expected value to be of type string or array, but found \"+Jt(se(e))+\" instead.\")},kr.prototype.eachChild=function(t){t(this.input);},kr.prototype.outputDefined=function(){return !1},kr.prototype.serialize=function(){var t=[\"length\"];return this.eachChild((function(e){t.push(e.serialize());})),t};var Ir={\"==\":gr,\"!=\":xr,\">\":wr,\"<\":br,\">=\":Ar,\"<=\":_r,array:he,at:lr,boolean:he,case:fr,coalesce:sr,collator:be,format:fe,image:ye,in:pr,\"index-of\":cr,interpolate:ar,\"interpolate-hcl\":ar,\"interpolate-lab\":ar,length:kr,let:ur,literal:le,match:hr,number:he,\"number-format\":Sr,object:he,slice:yr,step:Ne,string:he,\"to-boolean\":me,\"to-color\":me,\"to-number\":me,\"to-string\":me,var:Ue,within:De};function zr(t,e){var r=e[0],n=e[1],i=e[2],a=e[3];r=r.evaluate(t),n=n.evaluate(t),i=i.evaluate(t);var o=a?a.evaluate(t):1,s=ae(r,n,i,o);if(s)throw new pe(s);return new te(r/255*o,n/255*o,i/255*o,o)}function Cr(t,e){return t in e}function Er(t,e){var r=e[t];return void 0===r?null:r}function Pr(t){return {type:t}}function Mr(t){return {result:\"success\",value:t}}function Br(t){return {result:\"error\",value:t}}function Tr(t){return \"data-driven\"===t[\"property-type\"]||\"cross-faded-data-driven\"===t[\"property-type\"]}function Vr(t){return !!t.expression&&t.expression.parameters.indexOf(\"zoom\")>-1}function Fr(t){return !!t.expression&&t.expression.interpolated}function Dr(t){return t instanceof Number?\"number\":t instanceof String?\"string\":t instanceof Boolean?\"boolean\":Array.isArray(t)?\"array\":null===t?\"null\":typeof t}function Lr(t){return \"object\"==typeof t&&null!==t&&!Array.isArray(t)}function Or(t){return t}function Rr(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function Ur(t,e,r,n,i){return Rr(typeof r===i?n[r]:void 0,t.default,e.default)}function jr(t,e,r){if(\"number\"!==Dr(r))return Rr(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var i=qe(t.stops.map((function(t){return t[0]})),r);return t.stops[i][1]}function qr(t,e,r){var n=void 0!==t.base?t.base:1;if(\"number\"!==Dr(r))return Rr(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];var a=qe(t.stops.map((function(t){return t[0]})),r),o=function(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(r,n,t.stops[a][0],t.stops[a+1][0]),s=t.stops[a][1],u=t.stops[a+1][1],l=Ge[e.type]||Or;if(t.colorSpace&&\"rgb\"!==t.colorSpace){var p=ir[t.colorSpace];l=function(t,e){return p.reverse(p.interpolate(p.forward(t),p.forward(e),o))};}return \"function\"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=u.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return l(r,n,o)}}:l(s,u,o)}function Nr(t,e,r){return \"color\"===e.type?r=te.parse(r):\"formatted\"===e.type?r=ne.fromString(r.toString()):\"resolvedImage\"===e.type?r=ie.fromString(r.toString()):Dr(r)===e.type||\"enum\"===e.type&&e.values[r]||(r=void 0),Rr(r,t.default,e.default)}xe.register(Ir,{error:[{kind:\"error\"},[Rt],function(t,e){throw new pe(e[0].evaluate(t))}],typeof:[Rt,[Nt],function(t,e){return Jt(se(e[0].evaluate(t)))}],\"to-rgba\":[Xt(Ot,4),[jt],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[jt,[Ot,Ot,Ot],zr],rgba:[jt,[Ot,Ot,Ot,Ot],zr],has:{type:Ut,overloads:[[[Rt],function(t,e){return Cr(e[0].evaluate(t),t.properties())}],[[Rt,qt],function(t,e){var r=e[1];return Cr(e[0].evaluate(t),r.evaluate(t))}]]},get:{type:Nt,overloads:[[[Rt],function(t,e){return Er(e[0].evaluate(t),t.properties())}],[[Rt,qt],function(t,e){var r=e[1];return Er(e[0].evaluate(t),r.evaluate(t))}]]},\"feature-state\":[Nt,[Rt],function(t,e){return Er(e[0].evaluate(t),t.featureState||{})}],properties:[qt,[],function(t){return t.properties()}],\"geometry-type\":[Rt,[],function(t){return t.geometryType()}],id:[Nt,[],function(t){return t.id()}],zoom:[Ot,[],function(t){return t.globals.zoom}],\"heatmap-density\":[Ot,[],function(t){return t.globals.heatmapDensity||0}],\"line-progress\":[Ot,[],function(t){return t.globals.lineProgress||0}],accumulated:[Nt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],\"+\":[Ot,Pr(Ot),function(t,e){for(var r=0,n=0,i=e;n<i.length;n+=1)r+=i[n].evaluate(t);return r}],\"*\":[Ot,Pr(Ot),function(t,e){for(var r=1,n=0,i=e;n<i.length;n+=1)r*=i[n].evaluate(t);return r}],\"-\":{type:Ot,overloads:[[[Ot,Ot],function(t,e){var r=e[1];return e[0].evaluate(t)-r.evaluate(t)}],[[Ot],function(t,e){return -e[0].evaluate(t)}]]},\"/\":[Ot,[Ot,Ot],function(t,e){var r=e[1];return e[0].evaluate(t)/r.evaluate(t)}],\"%\":[Ot,[Ot,Ot],function(t,e){var r=e[1];return e[0].evaluate(t)%r.evaluate(t)}],ln2:[Ot,[],function(){return Math.LN2}],pi:[Ot,[],function(){return Math.PI}],e:[Ot,[],function(){return Math.E}],\"^\":[Ot,[Ot,Ot],function(t,e){var r=e[1];return Math.pow(e[0].evaluate(t),r.evaluate(t))}],sqrt:[Ot,[Ot],function(t,e){return Math.sqrt(e[0].evaluate(t))}],log10:[Ot,[Ot],function(t,e){return Math.log(e[0].evaluate(t))/Math.LN10}],ln:[Ot,[Ot],function(t,e){return Math.log(e[0].evaluate(t))}],log2:[Ot,[Ot],function(t,e){return Math.log(e[0].evaluate(t))/Math.LN2}],sin:[Ot,[Ot],function(t,e){return Math.sin(e[0].evaluate(t))}],cos:[Ot,[Ot],function(t,e){return Math.cos(e[0].evaluate(t))}],tan:[Ot,[Ot],function(t,e){return Math.tan(e[0].evaluate(t))}],asin:[Ot,[Ot],function(t,e){return Math.asin(e[0].evaluate(t))}],acos:[Ot,[Ot],function(t,e){return Math.acos(e[0].evaluate(t))}],atan:[Ot,[Ot],function(t,e){return Math.atan(e[0].evaluate(t))}],min:[Ot,Pr(Ot),function(t,e){return Math.min.apply(Math,e.map((function(e){return e.evaluate(t)})))}],max:[Ot,Pr(Ot),function(t,e){return Math.max.apply(Math,e.map((function(e){return e.evaluate(t)})))}],abs:[Ot,[Ot],function(t,e){return Math.abs(e[0].evaluate(t))}],round:[Ot,[Ot],function(t,e){var r=e[0].evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[Ot,[Ot],function(t,e){return Math.floor(e[0].evaluate(t))}],ceil:[Ot,[Ot],function(t,e){return Math.ceil(e[0].evaluate(t))}],\"filter-==\":[Ut,[Rt,Nt],function(t,e){var r=e[0],n=e[1];return t.properties()[r.value]===n.value}],\"filter-id-==\":[Ut,[Nt],function(t,e){var r=e[0];return t.id()===r.value}],\"filter-type-==\":[Ut,[Rt],function(t,e){var r=e[0];return t.geometryType()===r.value}],\"filter-<\":[Ut,[Rt,Nt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<a}],\"filter-id-<\":[Ut,[Nt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<i}],\"filter->\":[Ut,[Rt,Nt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>a}],\"filter-id->\":[Ut,[Nt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>i}],\"filter-<=\":[Ut,[Rt,Nt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<=a}],\"filter-id-<=\":[Ut,[Nt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<=i}],\"filter->=\":[Ut,[Rt,Nt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>=a}],\"filter-id->=\":[Ut,[Nt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>=i}],\"filter-has\":[Ut,[Nt],function(t,e){return e[0].value in t.properties()}],\"filter-has-id\":[Ut,[],function(t){return null!==t.id()&&void 0!==t.id()}],\"filter-type-in\":[Ut,[Xt(Rt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],\"filter-id-in\":[Ut,[Xt(Nt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],\"filter-in-small\":[Ut,[Rt,Xt(Nt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],\"filter-in-large\":[Ut,[Rt,Xt(Nt)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var i=r+n>>1;if(e[i]===t)return !0;e[i]>t?n=i-1:r=i+1;}return !1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:Ut,overloads:[[[Ut,Ut],function(t,e){var r=e[1];return e[0].evaluate(t)&&r.evaluate(t)}],[Pr(Ut),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(!n[r].evaluate(t))return !1;return !0}]]},any:{type:Ut,overloads:[[[Ut,Ut],function(t,e){var r=e[1];return e[0].evaluate(t)||r.evaluate(t)}],[Pr(Ut),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(n[r].evaluate(t))return !0;return !1}]]},\"!\":[Ut,[Ut],function(t,e){return !e[0].evaluate(t)}],\"is-supported-script\":[Ut,[Rt],function(t,e){var r=t.globals&&t.globals.isSupportedScript;return !r||r(e[0].evaluate(t))}],upcase:[Rt,[Rt],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[Rt,[Rt],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[Rt,Pr(Nt),function(t,e){return e.map((function(e){return ue(e.evaluate(t))})).join(\"\")}],\"resolved-locale\":[Rt,[Kt],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var Kr=function(t,e){this.expression=t,this._warningHistory={},this._evaluator=new ge,this._defaultValue=e?function(t){return \"color\"===t.type&&Lr(t.default)?new te(0,0,0,0):\"color\"===t.type?te.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&\"enum\"===e.type?e.values:null;};function Gr(t){return Array.isArray(t)&&t.length>0&&\"string\"==typeof t[0]&&t[0]in Ir}function Zr(t,e){var r=new je(Ir,[],e?function(t){var e={color:jt,string:Rt,number:Ot,enum:Rt,boolean:Ut,formatted:Gt,resolvedImage:Zt};return \"array\"===t.type?Xt(e[t.value]||Nt,t.length):e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&\"string\"===e.type?{typeAnnotation:\"coerce\"}:void 0);return n?Mr(new Kr(n,e)):Br(r.errors)}Kr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a,this.expression.evaluate(this._evaluator)},Kr.prototype.evaluate=function(t,e,r,n,i,a){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a||null;try{var o=this.expression.evaluate(this._evaluator);if(null==o||\"number\"==typeof o&&o!=o)return this._defaultValue;if(this._enumValues&&!(o in this._enumValues))throw new pe(\"Expected value to be one of \"+Object.keys(this._enumValues).map((function(t){return JSON.stringify(t)})).join(\", \")+\", but found \"+JSON.stringify(o)+\" instead.\");return o}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,\"undefined\"!=typeof console&&console.warn(t.message)),this._defaultValue}};var Xr=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent=\"constant\"!==t&&!Oe(e.expression);};Xr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},Xr.prototype.evaluate=function(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)};var Jr=function(t,e,r,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent=\"camera\"!==t&&!Oe(e.expression),this.interpolationType=n;};function Hr(t,e){if(\"error\"===(t=Zr(t,e)).result)return t;var r=t.value.expression,n=Le(r);if(!n&&!Tr(e))return Br([new Ft(\"\",\"data expressions not supported\")]);var i=Re(r,[\"zoom\"]);if(!i&&!Vr(e))return Br([new Ft(\"\",\"zoom expressions not supported\")]);var a=function t(e){var r=null;if(e instanceof ur)r=t(e.result);else if(e instanceof sr)for(var n=0,i=e.args;n<i.length&&!(r=t(i[n]));n+=1);else (e instanceof Ne||e instanceof ar)&&e.input instanceof xe&&\"zoom\"===e.input.name&&(r=e);return r instanceof Ft||e.eachChild((function(e){var n=t(e);n instanceof Ft?r=n:!r&&n?r=new Ft(\"\",'\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.'):r&&n&&r!==n&&(r=new Ft(\"\",'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.'));})),r}(r);return a||i?a instanceof Ft?Br([a]):a instanceof ar&&!Fr(e)?Br([new Ft(\"\",'\"interpolate\" expressions cannot be used with this property')]):Mr(a?new Jr(n?\"camera\":\"composite\",t.value,a.labels,a instanceof ar?a.interpolation:void 0):new Xr(n?\"constant\":\"source\",t.value)):Br([new Ft(\"\",'\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')])}Jr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},Jr.prototype.evaluate=function(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)},Jr.prototype.interpolationFactor=function(t,e,r){return this.interpolationType?ar.interpolationFactor(this.interpolationType,t,e,r):0};var Yr=function(t,e){this._parameters=t,this._specification=e,Bt(this,function t(e,r){var n,i,a,o=\"color\"===r.type,s=e.stops&&\"object\"==typeof e.stops[0][0],u=s||!(s||void 0!==e.property),l=e.type||(Fr(r)?\"exponential\":\"interval\");if(o&&((e=Bt({},e)).stops&&(e.stops=e.stops.map((function(t){return [t[0],te.parse(t[1])]}))),e.default=te.parse(e.default?e.default:r.default)),e.colorSpace&&\"rgb\"!==e.colorSpace&&!ir[e.colorSpace])throw new Error(\"Unknown color space: \"+e.colorSpace);if(\"exponential\"===l)n=qr;else if(\"interval\"===l)n=jr;else if(\"categorical\"===l){n=Ur,i=Object.create(null);for(var p=0,c=e.stops;p<c.length;p+=1){var h=c[p];i[h[0]]=h[1];}a=typeof e.stops[0][0];}else {if(\"identity\"!==l)throw new Error('Unknown function type \"'+l+'\"');n=Nr;}if(s){for(var f={},y=[],d=0;d<e.stops.length;d++){var m=e.stops[d],v=m[0].zoom;void 0===f[v]&&(f[v]={zoom:v,type:e.type,property:e.property,default:e.default,stops:[]},y.push(v)),f[v].stops.push([m[0].value,m[1]]);}for(var g=[],x=0,b=y;x<b.length;x+=1){var w=b[x];g.push([f[w].zoom,t(f[w],r)]);}var _={name:\"linear\"};return {kind:\"composite\",interpolationType:_,interpolationFactor:ar.interpolationFactor.bind(void 0,_),zoomStops:g.map((function(t){return t[0]})),evaluate:function(t,n){var i=t.zoom;return qr({stops:g,base:e.base},r,i).evaluate(i,n)}}}if(u){var A=\"exponential\"===l?{name:\"exponential\",base:void 0!==e.base?e.base:1}:null;return {kind:\"camera\",interpolationType:A,interpolationFactor:ar.interpolationFactor.bind(void 0,A),zoomStops:e.stops.map((function(t){return t[0]})),evaluate:function(t){return n(e,r,t.zoom,i,a)}}}return {kind:\"source\",evaluate:function(t,o){var s=o&&o.properties?o.properties[e.property]:void 0;return void 0===s?Rr(e.default,r.default):n(e,r,s,i,a)}}}(this._parameters,this._specification));};function $r(t){var e=t.key,r=t.value,n=t.valueSpec||{},i=t.objectElementValidators||{},a=t.style,o=t.styleSpec,s=[],u=Dr(r);if(\"object\"!==u)return [new Pt(e,r,\"object expected, \"+u+\" found\")];for(var l in r){var p=l.split(\".\")[0],c=n[p]||n[\"*\"],h=void 0;if(i[p])h=i[p];else if(n[p])h=An;else if(i[\"*\"])h=i[\"*\"];else {if(!n[\"*\"]){s.push(new Pt(e,r[l],'unknown property \"'+l+'\"'));continue}h=An;}s=s.concat(h({key:(e?e+\".\":e)+l,value:r[l],valueSpec:c,style:a,styleSpec:o,object:r,objectKey:l},r));}for(var f in n)i[f]||n[f].required&&void 0===n[f].default&&void 0===r[f]&&s.push(new Pt(e,r,'missing required property \"'+f+'\"'));return s}function Wr(t){var e=t.value,r=t.valueSpec,n=t.style,i=t.styleSpec,a=t.key,o=t.arrayElementValidator||An;if(\"array\"!==Dr(e))return [new Pt(a,e,\"array expected, \"+Dr(e)+\" found\")];if(r.length&&e.length!==r.length)return [new Pt(a,e,\"array length \"+r.length+\" expected, length \"+e.length+\" found\")];if(r[\"min-length\"]&&e.length<r[\"min-length\"])return [new Pt(a,e,\"array length at least \"+r[\"min-length\"]+\" expected, length \"+e.length+\" found\")];var s={type:r.value,values:r.values};i.$version<7&&(s.function=r.function),\"object\"===Dr(r.value)&&(s=r.value);for(var u=[],l=0;l<e.length;l++)u=u.concat(o({array:e,arrayIndex:l,value:e[l],valueSpec:s,style:n,styleSpec:i,key:a+\"[\"+l+\"]\"}));return u}function Qr(t){var e=t.key,r=t.value,n=t.valueSpec,i=Dr(r);return \"number\"===i&&r!=r&&(i=\"NaN\"),\"number\"!==i?[new Pt(e,r,\"number expected, \"+i+\" found\")]:\"minimum\"in n&&r<n.minimum?[new Pt(e,r,r+\" is less than the minimum value \"+n.minimum)]:\"maximum\"in n&&r>n.maximum?[new Pt(e,r,r+\" is greater than the maximum value \"+n.maximum)]:[]}function tn(t){var e,r,n,i=t.valueSpec,a=Tt(t.value.type),o={},s=\"categorical\"!==a&&void 0===t.value.property,u=!s,l=\"array\"===Dr(t.value.stops)&&\"array\"===Dr(t.value.stops[0])&&\"object\"===Dr(t.value.stops[0][0]),p=$r({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if(\"identity\"===a)return [new Pt(t.key,t.value,'identity function may not have a \"stops\" property')];var e=[],r=t.value;return e=e.concat(Wr({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:c})),\"array\"===Dr(r)&&0===r.length&&e.push(new Pt(t.key,r,\"array must have at least one stop\")),e},default:function(t){return An({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return \"identity\"===a&&s&&p.push(new Pt(t.key,t.value,'missing required property \"property\"')),\"identity\"===a||t.value.stops||p.push(new Pt(t.key,t.value,'missing required property \"stops\"')),\"exponential\"===a&&t.valueSpec.expression&&!Fr(t.valueSpec)&&p.push(new Pt(t.key,t.value,\"exponential functions not supported\")),t.styleSpec.$version>=8&&(u&&!Tr(t.valueSpec)?p.push(new Pt(t.key,t.value,\"property functions not supported\")):s&&!Vr(t.valueSpec)&&p.push(new Pt(t.key,t.value,\"zoom functions not supported\"))),\"categorical\"!==a&&!l||void 0!==t.value.property||p.push(new Pt(t.key,t.value,'\"property\" property is required')),p;function c(t){var e=[],a=t.value,s=t.key;if(\"array\"!==Dr(a))return [new Pt(s,a,\"array expected, \"+Dr(a)+\" found\")];if(2!==a.length)return [new Pt(s,a,\"array length 2 expected, length \"+a.length+\" found\")];if(l){if(\"object\"!==Dr(a[0]))return [new Pt(s,a,\"object expected, \"+Dr(a[0])+\" found\")];if(void 0===a[0].zoom)return [new Pt(s,a,\"object stop key must have zoom\")];if(void 0===a[0].value)return [new Pt(s,a,\"object stop key must have value\")];if(n&&n>Tt(a[0].zoom))return [new Pt(s,a[0].zoom,\"stop zoom values must appear in ascending order\")];Tt(a[0].zoom)!==n&&(n=Tt(a[0].zoom),r=void 0,o={}),e=e.concat($r({key:s+\"[0]\",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:Qr,value:h}}));}else e=e.concat(h({key:s+\"[0]\",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return Gr(Vt(a[1]))?e.concat([new Pt(s+\"[1]\",a[1],\"expressions are not allowed in function stops.\")]):e.concat(An({key:s+\"[1]\",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function h(t,n){var s=Dr(t.value),u=Tt(t.value),l=null!==t.value?t.value:n;if(e){if(s!==e)return [new Pt(t.key,l,s+\" stop domain type must match previous stop domain type \"+e)]}else e=s;if(\"number\"!==s&&\"string\"!==s&&\"boolean\"!==s)return [new Pt(t.key,l,\"stop domain value must be a number, string, or boolean\")];if(\"number\"!==s&&\"categorical\"!==a){var p=\"number expected, \"+s+\" found\";return Tr(i)&&void 0===a&&(p+='\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.'),[new Pt(t.key,l,p)]}return \"categorical\"!==a||\"number\"!==s||isFinite(u)&&Math.floor(u)===u?\"categorical\"!==a&&\"number\"===s&&void 0!==r&&u<r?[new Pt(t.key,l,\"stop domain values must appear in ascending order\")]:(r=u,\"categorical\"===a&&u in o?[new Pt(t.key,l,\"stop domain values must be unique\")]:(o[u]=!0,[])):[new Pt(t.key,l,\"integer expected, found \"+u)]}}function en(t){var e=(\"property\"===t.expressionContext?Hr:Zr)(Vt(t.value),t.valueSpec);if(\"error\"===e.result)return e.value.map((function(e){return new Pt(\"\"+t.key+e.key,t.value,e.message)}));var r=e.value.expression||e.value._styleExpression.expression;if(\"property\"===t.expressionContext&&\"text-font\"===t.propertyKey&&!r.outputDefined())return [new Pt(t.key,t.value,'Invalid data expression for \"'+t.propertyKey+'\". Output values must be contained as literals within the expression.')];if(\"property\"===t.expressionContext&&\"layout\"===t.propertyType&&!Oe(r))return [new Pt(t.key,t.value,'\"feature-state\" data expressions are not supported with layout properties.')];if(\"filter\"===t.expressionContext&&!Oe(r))return [new Pt(t.key,t.value,'\"feature-state\" data expressions are not supported with filters.')];if(t.expressionContext&&0===t.expressionContext.indexOf(\"cluster\")){if(!Re(r,[\"zoom\",\"feature-state\"]))return [new Pt(t.key,t.value,'\"zoom\" and \"feature-state\" expressions are not supported with cluster properties.')];if(\"cluster-initial\"===t.expressionContext&&!Le(r))return [new Pt(t.key,t.value,\"Feature data expressions are not supported with initial expression part of cluster properties.\")]}return []}function rn(t){var e=t.key,r=t.value,n=t.valueSpec,i=[];return Array.isArray(n.values)?-1===n.values.indexOf(Tt(r))&&i.push(new Pt(e,r,\"expected one of [\"+n.values.join(\", \")+\"], \"+JSON.stringify(r)+\" found\")):-1===Object.keys(n.values).indexOf(Tt(r))&&i.push(new Pt(e,r,\"expected one of [\"+Object.keys(n.values).join(\", \")+\"], \"+JSON.stringify(r)+\" found\")),i}function nn(t){if(!0===t||!1===t)return !0;if(!Array.isArray(t)||0===t.length)return !1;switch(t[0]){case\"has\":return t.length>=2&&\"$id\"!==t[1]&&\"$type\"!==t[1];case\"in\":return t.length>=3&&(\"string\"!=typeof t[1]||Array.isArray(t[2]));case\"!in\":case\"!has\":case\"none\":return !1;case\"==\":case\"!=\":case\">\":case\">=\":case\"<\":case\"<=\":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case\"any\":case\"all\":for(var e=0,r=t.slice(1);e<r.length;e+=1){var n=r[e];if(!nn(n)&&\"boolean\"!=typeof n)return !1}return !0;default:return !0}}Yr.deserialize=function(t){return new Yr(t._parameters,t._specification)},Yr.serialize=function(t){return {_parameters:t._parameters,_specification:t._specification}};var an={type:\"boolean\",default:!1,transition:!1,\"property-type\":\"data-driven\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]}};function on(t){if(null==t)return {filter:function(){return !0},needGeometry:!1};nn(t)||(t=un(t));var e=Zr(t,an);if(\"error\"===e.result)throw new Error(e.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return {filter:function(t,r,n){return e.value.evaluate(t,r,{},n)},needGeometry:function t(e){if(!Array.isArray(e))return !1;if(\"within\"===e[0])return !0;for(var r=1;r<e.length;r++)if(t(e[r]))return !0;return !1}(t)}}function sn(t,e){return t<e?-1:t>e?1:0}function un(t){if(!t)return !0;var e,r=t[0];return t.length<=1?\"any\"!==r:\"==\"===r?ln(t[1],t[2],\"==\"):\"!=\"===r?hn(ln(t[1],t[2],\"==\")):\"<\"===r||\">\"===r||\"<=\"===r||\">=\"===r?ln(t[1],t[2],r):\"any\"===r?(e=t.slice(1),[\"any\"].concat(e.map(un))):\"all\"===r?[\"all\"].concat(t.slice(1).map(un)):\"none\"===r?[\"all\"].concat(t.slice(1).map(un).map(hn)):\"in\"===r?pn(t[1],t.slice(2)):\"!in\"===r?hn(pn(t[1],t.slice(2))):\"has\"===r?cn(t[1]):\"!has\"===r?hn(cn(t[1])):\"within\"!==r||t}function ln(t,e,r){switch(t){case\"$type\":return [\"filter-type-\"+r,e];case\"$id\":return [\"filter-id-\"+r,e];default:return [\"filter-\"+r,t,e]}}function pn(t,e){if(0===e.length)return !1;switch(t){case\"$type\":return [\"filter-type-in\",[\"literal\",e]];case\"$id\":return [\"filter-id-in\",[\"literal\",e]];default:return e.length>200&&!e.some((function(t){return typeof t!=typeof e[0]}))?[\"filter-in-large\",t,[\"literal\",e.sort(sn)]]:[\"filter-in-small\",t,[\"literal\",e]]}}function cn(t){switch(t){case\"$type\":return !0;case\"$id\":return [\"filter-has-id\"];default:return [\"filter-has\",t]}}function hn(t){return [\"!\",t]}function fn(t){return nn(Vt(t.value))?en(Bt({},t,{expressionContext:\"filter\",valueSpec:{value:\"boolean\"}})):function t(e){var r=e.value,n=e.key;if(\"array\"!==Dr(r))return [new Pt(n,r,\"array expected, \"+Dr(r)+\" found\")];var i,a=e.styleSpec,o=[];if(r.length<1)return [new Pt(n,r,\"filter array must have at least 1 element\")];switch(o=o.concat(rn({key:n+\"[0]\",value:r[0],valueSpec:a.filter_operator,style:e.style,styleSpec:e.styleSpec})),Tt(r[0])){case\"<\":case\"<=\":case\">\":case\">=\":r.length>=2&&\"$type\"===Tt(r[1])&&o.push(new Pt(n,r,'\"$type\" cannot be use with operator \"'+r[0]+'\"'));case\"==\":case\"!=\":3!==r.length&&o.push(new Pt(n,r,'filter array for operator \"'+r[0]+'\" must have 3 elements'));case\"in\":case\"!in\":r.length>=2&&\"string\"!==(i=Dr(r[1]))&&o.push(new Pt(n+\"[1]\",r[1],\"string expected, \"+i+\" found\"));for(var s=2;s<r.length;s++)i=Dr(r[s]),\"$type\"===Tt(r[1])?o=o.concat(rn({key:n+\"[\"+s+\"]\",value:r[s],valueSpec:a.geometry_type,style:e.style,styleSpec:e.styleSpec})):\"string\"!==i&&\"number\"!==i&&\"boolean\"!==i&&o.push(new Pt(n+\"[\"+s+\"]\",r[s],\"string, number, or boolean expected, \"+i+\" found\"));break;case\"any\":case\"all\":case\"none\":for(var u=1;u<r.length;u++)o=o.concat(t({key:n+\"[\"+u+\"]\",value:r[u],style:e.style,styleSpec:e.styleSpec}));break;case\"has\":case\"!has\":i=Dr(r[1]),2!==r.length?o.push(new Pt(n,r,'filter array for \"'+r[0]+'\" operator must have 2 elements')):\"string\"!==i&&o.push(new Pt(n+\"[1]\",r[1],\"string expected, \"+i+\" found\"));break;case\"within\":i=Dr(r[1]),2!==r.length?o.push(new Pt(n,r,'filter array for \"'+r[0]+'\" operator must have 2 elements')):\"object\"!==i&&o.push(new Pt(n+\"[1]\",r[1],\"object expected, \"+i+\" found\"));}return o}(t)}function yn(t,e){var r=t.key,n=t.style,i=t.styleSpec,a=t.value,o=t.objectKey,s=i[e+\"_\"+t.layerType];if(!s)return [];var u=o.match(/^(.*)-transition$/);if(\"paint\"===e&&u&&s[u[1]]&&s[u[1]].transition)return An({key:r,value:a,valueSpec:i.transition,style:n,styleSpec:i});var l,p=t.valueSpec||s[o];if(!p)return [new Pt(r,a,'unknown property \"'+o+'\"')];if(\"string\"===Dr(a)&&Tr(p)&&!p.tokens&&(l=/^{([^}]+)}$/.exec(a)))return [new Pt(r,a,'\"'+o+'\" does not support interpolation syntax\\nUse an identity property function instead: `{ \"type\": \"identity\", \"property\": '+JSON.stringify(l[1])+\" }`.\")];var c=[];return \"symbol\"===t.layerType&&(\"text-field\"===o&&n&&!n.glyphs&&c.push(new Pt(r,a,'use of \"text-field\" requires a style \"glyphs\" property')),\"text-font\"===o&&Lr(Vt(a))&&\"identity\"===Tt(a.type)&&c.push(new Pt(r,a,'\"text-font\" does not support identity functions'))),c.concat(An({key:t.key,value:a,valueSpec:p,style:n,styleSpec:i,expressionContext:\"property\",propertyType:e,propertyKey:o}))}function dn(t){return yn(t,\"paint\")}function mn(t){return yn(t,\"layout\")}function vn(t){var e=[],r=t.value,n=t.key,i=t.style,a=t.styleSpec;r.type||r.ref||e.push(new Pt(n,r,'either \"type\" or \"ref\" is required'));var o,s=Tt(r.type),u=Tt(r.ref);if(r.id)for(var l=Tt(r.id),p=0;p<t.arrayIndex;p++){var c=i.layers[p];Tt(c.id)===l&&e.push(new Pt(n,r.id,'duplicate layer id \"'+r.id+'\", previously used at line '+c.id.__line__));}if(\"ref\"in r)[\"type\",\"source\",\"source-layer\",\"filter\",\"layout\"].forEach((function(t){t in r&&e.push(new Pt(n,r[t],'\"'+t+'\" is prohibited for ref layers'));})),i.layers.forEach((function(t){Tt(t.id)===u&&(o=t);})),o?o.ref?e.push(new Pt(n,r.ref,\"ref cannot reference another ref layer\")):s=Tt(o.type):e.push(new Pt(n,r.ref,'ref layer \"'+u+'\" not found'));else if(\"background\"!==s)if(r.source){var h=i.sources&&i.sources[r.source],f=h&&Tt(h.type);h?\"vector\"===f&&\"raster\"===s?e.push(new Pt(n,r.source,'layer \"'+r.id+'\" requires a raster source')):\"raster\"===f&&\"raster\"!==s?e.push(new Pt(n,r.source,'layer \"'+r.id+'\" requires a vector source')):\"vector\"!==f||r[\"source-layer\"]?\"raster-dem\"===f&&\"hillshade\"!==s?e.push(new Pt(n,r.source,\"raster-dem source can only be used with layer type 'hillshade'.\")):\"line\"!==s||!r.paint||!r.paint[\"line-gradient\"]||\"geojson\"===f&&h.lineMetrics||e.push(new Pt(n,r,'layer \"'+r.id+'\" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):e.push(new Pt(n,r,'layer \"'+r.id+'\" must specify a \"source-layer\"')):e.push(new Pt(n,r.source,'source \"'+r.source+'\" not found'));}else e.push(new Pt(n,r,'missing required property \"source\"'));return e=e.concat($r({key:n,value:r,valueSpec:a.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(){return []},type:function(){return An({key:n+\".type\",value:r.type,valueSpec:a.layer.type,style:t.style,styleSpec:t.styleSpec,object:r,objectKey:\"type\"})},filter:fn,layout:function(t){return $r({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(t){return mn(Bt({layerType:s},t))}}})},paint:function(t){return $r({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(t){return dn(Bt({layerType:s},t))}}})}}}))}function gn(t){var e=t.value,r=t.key,n=Dr(e);return \"string\"!==n?[new Pt(r,e,\"string expected, \"+n+\" found\")]:[]}var xn={promoteId:function(t){var e=t.key,r=t.value;if(\"string\"===Dr(r))return gn({key:e,value:r});var n=[];for(var i in r)n.push.apply(n,gn({key:e+\".\"+i,value:r[i]}));return n}};function bn(t){var e=t.value,r=t.key,n=t.styleSpec,i=t.style;if(!e.type)return [new Pt(r,e,'\"type\" is required')];var a,o=Tt(e.type);switch(o){case\"vector\":case\"raster\":case\"raster-dem\":return $r({key:r,value:e,valueSpec:n[\"source_\"+o.replace(\"-\",\"_\")],style:t.style,styleSpec:n,objectElementValidators:xn});case\"geojson\":if(a=$r({key:r,value:e,valueSpec:n.source_geojson,style:i,styleSpec:n,objectElementValidators:xn}),e.cluster)for(var s in e.clusterProperties){var u=e.clusterProperties[s],l=u[0],p=\"string\"==typeof l?[l,[\"accumulated\"],[\"get\",s]]:l;a.push.apply(a,en({key:r+\".\"+s+\".map\",value:u[1],expressionContext:\"cluster-map\"})),a.push.apply(a,en({key:r+\".\"+s+\".reduce\",value:p,expressionContext:\"cluster-reduce\"}));}return a;case\"video\":return $r({key:r,value:e,valueSpec:n.source_video,style:i,styleSpec:n});case\"image\":return $r({key:r,value:e,valueSpec:n.source_image,style:i,styleSpec:n});case\"canvas\":return [new Pt(r,null,\"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.\",\"source.canvas\")];default:return rn({key:r+\".type\",value:e.type,valueSpec:{values:[\"vector\",\"raster\",\"raster-dem\",\"geojson\",\"video\",\"image\"]},style:i,styleSpec:n})}}function wn(t){var e=t.value,r=t.styleSpec,n=r.light,i=t.style,a=[],o=Dr(e);if(void 0===e)return a;if(\"object\"!==o)return a.concat([new Pt(\"light\",e,\"object expected, \"+o+\" found\")]);for(var s in e){var u=s.match(/^(.*)-transition$/);a=a.concat(u&&n[u[1]]&&n[u[1]].transition?An({key:s,value:e[s],valueSpec:r.transition,style:i,styleSpec:r}):n[s]?An({key:s,value:e[s],valueSpec:n[s],style:i,styleSpec:r}):[new Pt(s,e[s],'unknown property \"'+s+'\"')]);}return a}var _n={\"*\":function(){return []},array:Wr,boolean:function(t){var e=t.value,r=t.key,n=Dr(e);return \"boolean\"!==n?[new Pt(r,e,\"boolean expected, \"+n+\" found\")]:[]},number:Qr,color:function(t){var e=t.key,r=t.value,n=Dr(r);return \"string\"!==n?[new Pt(e,r,\"color expected, \"+n+\" found\")]:null===Qt(r)?[new Pt(e,r,'color expected, \"'+r+'\" found')]:[]},constants:Mt,enum:rn,filter:fn,function:tn,layer:vn,object:$r,source:bn,light:wn,string:gn,formatted:function(t){return 0===gn(t).length?[]:en(t)},resolvedImage:function(t){return 0===gn(t).length?[]:en(t)}};function An(t){var e=t.value,r=t.valueSpec,n=t.styleSpec;return r.expression&&Lr(Tt(e))?tn(t):r.expression&&Gr(Vt(e))?en(t):r.type&&_n[r.type]?_n[r.type](t):$r(Bt({},t,{valueSpec:r.type?n[r.type]:r}))}function Sn(t){var e=t.value,r=t.key,n=gn(t);return n.length||(-1===e.indexOf(\"{fontstack}\")&&n.push(new Pt(r,e,'\"glyphs\" url must include a \"{fontstack}\" token')),-1===e.indexOf(\"{range}\")&&n.push(new Pt(r,e,'\"glyphs\" url must include a \"{range}\" token'))),n}function kn(t,e){void 0===e&&(e=Et);var r=[];return r=r.concat(An({key:\"\",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:Sn,\"*\":function(){return []}}})),t.constants&&(r=r.concat(Mt({key:\"constants\",value:t.constants,style:t,styleSpec:e}))),In(r)}function In(t){return [].concat(t).sort((function(t,e){return t.line-e.line}))}function zn(t){return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return In(t.apply(this,e))}}kn.source=zn(bn),kn.light=zn(wn),kn.layer=zn(vn),kn.filter=zn(fn),kn.paintProperty=zn(dn),kn.layoutProperty=zn(mn);var Cn=kn,En=Cn.light,Pn=Cn.paintProperty,Mn=Cn.layoutProperty;function Bn(t,e){var r=!1;if(e&&e.length)for(var n=0,i=e;n<i.length;n+=1)t.fire(new zt(new Error(i[n].message))),r=!0;return r}var Tn=Vn;function Vn(t,e,r){var n=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var i=new Int32Array(this.arrayBuffer);t=i[0],this.d=(e=i[1])+2*(r=i[2]);for(var a=0;a<this.d*this.d;a++){var o=i[3+a],s=i[3+a+1];n.push(o===s?null:i.subarray(o,s));}var u=i[3+n.length+1];this.keys=i.subarray(i[3+n.length],u),this.bboxes=i.subarray(u),this.insert=this._insertReadonly;}else {this.d=e+2*r;for(var l=0;l<this.d*this.d;l++)n.push([]);this.keys=[],this.bboxes=[];}this.n=e,this.extent=t,this.padding=r,this.scale=e/t,this.uid=0;var p=r/e*t;this.min=-p,this.max=t+p;}Vn.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i);},Vn.prototype._insertReadonly=function(){throw \"Cannot insert into a GridIndex created from an ArrayBuffer.\"},Vn.prototype._insertCell=function(t,e,r,n,i,a){this.cells[i].push(a);},Vn.prototype.query=function(t,e,r,n,i){var a=this.min,o=this.max;if(t<=a&&e<=a&&o<=r&&o<=n&&!i)return Array.prototype.slice.call(this.keys);var s=[];return this._forEachCell(t,e,r,n,this._queryCell,s,{},i),s},Vn.prototype._queryCell=function(t,e,r,n,i,a,o,s){var u=this.cells[i];if(null!==u)for(var l=this.keys,p=this.bboxes,c=0;c<u.length;c++){var h=u[c];if(void 0===o[h]){var f=4*h;(s?s(p[f+0],p[f+1],p[f+2],p[f+3]):t<=p[f+2]&&e<=p[f+3]&&r>=p[f+0]&&n>=p[f+1])?(o[h]=!0,a.push(l[h])):o[h]=!1;}}},Vn.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var u=this._convertToCellCoord(t),l=this._convertToCellCoord(e),p=this._convertToCellCoord(r),c=this._convertToCellCoord(n),h=u;h<=p;h++)for(var f=l;f<=c;f++){var y=this.d*f+h;if((!s||s(this._convertFromCellCoord(h),this._convertFromCellCoord(f),this._convertFromCellCoord(h+1),this._convertFromCellCoord(f+1)))&&i.call(this,t,e,r,n,y,a,o,s))return}},Vn.prototype._convertFromCellCoord=function(t){return (t-this.padding)/this.scale},Vn.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},Vn.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=3+this.cells.length+1+1,r=0,n=0;n<this.cells.length;n++)r+=this.cells[n].length;var i=new Int32Array(e+r+this.keys.length+this.bboxes.length);i[0]=this.extent,i[1]=this.n,i[2]=this.padding;for(var a=e,o=0;o<t.length;o++){var s=t[o];i[3+o]=a,i.set(s,a),a+=s.length;}return i[3+t.length]=a,i.set(this.keys,a),i[3+t.length+1]=a+=this.keys.length,i.set(this.bboxes,a),a+=this.bboxes.length,i.buffer};var Fn=o.ImageData,Dn=o.ImageBitmap,Ln={};function On(t,e,r){void 0===r&&(r={}),Object.defineProperty(e,\"_classRegistryKey\",{value:t,writeable:!1}),Ln[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]};}for(var Rn in On(\"Object\",Object),Tn.serialize=function(t,e){var r=t.toArrayBuffer();return e&&e.push(r),{buffer:r}},Tn.deserialize=function(t){return new Tn(t.buffer)},On(\"Grid\",Tn),On(\"Color\",te),On(\"Error\",Error),On(\"ResolvedImage\",ie),On(\"StylePropertyFunction\",Yr),On(\"StyleExpression\",Kr,{omit:[\"_evaluator\"]}),On(\"ZoomDependentExpression\",Jr),On(\"ZoomConstantExpression\",Xr),On(\"CompoundExpression\",xe,{omit:[\"_evaluate\"]}),Ir)Ir[Rn]._classRegistryKey||On(\"Expression_\"+Rn,Ir[Rn]);function Un(t){return t&&\"undefined\"!=typeof ArrayBuffer&&(t instanceof ArrayBuffer||t.constructor&&\"ArrayBuffer\"===t.constructor.name)}function jn(t){return Dn&&t instanceof Dn}function qn(t,e){if(null==t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(Un(t)||jn(t))return e&&e.push(t),t;if(ArrayBuffer.isView(t)){var r=t;return e&&e.push(r.buffer),r}if(t instanceof Fn)return e&&e.push(t.data.buffer),t;if(Array.isArray(t)){for(var n=[],i=0,a=t;i<a.length;i+=1)n.push(qn(a[i],e));return n}if(\"object\"==typeof t){var o=t.constructor,s=o._classRegistryKey;if(!s)throw new Error(\"can't serialize object of unregistered class\");var u=o.serialize?o.serialize(t,e):{};if(!o.serialize){for(var l in t)if(t.hasOwnProperty(l)&&!(Ln[s].omit.indexOf(l)>=0)){var p=t[l];u[l]=Ln[s].shallow.indexOf(l)>=0?p:qn(p,e);}t instanceof Error&&(u.message=t.message);}if(u.$name)throw new Error(\"$name property is reserved for worker serialization logic.\");return \"Object\"!==s&&(u.$name=s),u}throw new Error(\"can't serialize object of type \"+typeof t)}function Nn(t){if(null==t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||Un(t)||jn(t)||ArrayBuffer.isView(t)||t instanceof Fn)return t;if(Array.isArray(t))return t.map(Nn);if(\"object\"==typeof t){var e=t.$name||\"Object\",r=Ln[e].klass;if(!r)throw new Error(\"can't deserialize unregistered class \"+e);if(r.deserialize)return r.deserialize(t);for(var n=Object.create(r.prototype),i=0,a=Object.keys(t);i<a.length;i+=1){var o=a[i];if(\"$name\"!==o){var s=t[o];n[o]=Ln[e].shallow.indexOf(o)>=0?s:Nn(s);}}return n}throw new Error(\"can't deserialize object of type \"+typeof t)}var Kn=function(){this.first=!0;};Kn.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0))};var Gn={\"Latin-1 Supplement\":function(t){return t>=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},\"Arabic Supplement\":function(t){return t>=1872&&t<=1919},\"Arabic Extended-A\":function(t){return t>=2208&&t<=2303},\"Hangul Jamo\":function(t){return t>=4352&&t<=4607},\"Unified Canadian Aboriginal Syllabics\":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},\"Unified Canadian Aboriginal Syllabics Extended\":function(t){return t>=6320&&t<=6399},\"General Punctuation\":function(t){return t>=8192&&t<=8303},\"Letterlike Symbols\":function(t){return t>=8448&&t<=8527},\"Number Forms\":function(t){return t>=8528&&t<=8591},\"Miscellaneous Technical\":function(t){return t>=8960&&t<=9215},\"Control Pictures\":function(t){return t>=9216&&t<=9279},\"Optical Character Recognition\":function(t){return t>=9280&&t<=9311},\"Enclosed Alphanumerics\":function(t){return t>=9312&&t<=9471},\"Geometric Shapes\":function(t){return t>=9632&&t<=9727},\"Miscellaneous Symbols\":function(t){return t>=9728&&t<=9983},\"Miscellaneous Symbols and Arrows\":function(t){return t>=11008&&t<=11263},\"CJK Radicals Supplement\":function(t){return t>=11904&&t<=12031},\"Kangxi Radicals\":function(t){return t>=12032&&t<=12255},\"Ideographic Description Characters\":function(t){return t>=12272&&t<=12287},\"CJK Symbols and Punctuation\":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},\"Hangul Compatibility Jamo\":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},\"Bopomofo Extended\":function(t){return t>=12704&&t<=12735},\"CJK Strokes\":function(t){return t>=12736&&t<=12783},\"Katakana Phonetic Extensions\":function(t){return t>=12784&&t<=12799},\"Enclosed CJK Letters and Months\":function(t){return t>=12800&&t<=13055},\"CJK Compatibility\":function(t){return t>=13056&&t<=13311},\"CJK Unified Ideographs Extension A\":function(t){return t>=13312&&t<=19903},\"Yijing Hexagram Symbols\":function(t){return t>=19904&&t<=19967},\"CJK Unified Ideographs\":function(t){return t>=19968&&t<=40959},\"Yi Syllables\":function(t){return t>=40960&&t<=42127},\"Yi Radicals\":function(t){return t>=42128&&t<=42191},\"Hangul Jamo Extended-A\":function(t){return t>=43360&&t<=43391},\"Hangul Syllables\":function(t){return t>=44032&&t<=55215},\"Hangul Jamo Extended-B\":function(t){return t>=55216&&t<=55295},\"Private Use Area\":function(t){return t>=57344&&t<=63743},\"CJK Compatibility Ideographs\":function(t){return t>=63744&&t<=64255},\"Arabic Presentation Forms-A\":function(t){return t>=64336&&t<=65023},\"Vertical Forms\":function(t){return t>=65040&&t<=65055},\"CJK Compatibility Forms\":function(t){return t>=65072&&t<=65103},\"Small Form Variants\":function(t){return t>=65104&&t<=65135},\"Arabic Presentation Forms-B\":function(t){return t>=65136&&t<=65279},\"Halfwidth and Fullwidth Forms\":function(t){return t>=65280&&t<=65519}};function Zn(t){for(var e=0,r=t;e<r.length;e+=1)if(Xn(r[e].charCodeAt(0)))return !0;return !1}function Xn(t){return !(746!==t&&747!==t&&(t<4352||!(Gn[\"Bopomofo Extended\"](t)||Gn.Bopomofo(t)||Gn[\"CJK Compatibility Forms\"](t)&&!(t>=65097&&t<=65103)||Gn[\"CJK Compatibility Ideographs\"](t)||Gn[\"CJK Compatibility\"](t)||Gn[\"CJK Radicals Supplement\"](t)||Gn[\"CJK Strokes\"](t)||!(!Gn[\"CJK Symbols and Punctuation\"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||Gn[\"CJK Unified Ideographs Extension A\"](t)||Gn[\"CJK Unified Ideographs\"](t)||Gn[\"Enclosed CJK Letters and Months\"](t)||Gn[\"Hangul Compatibility Jamo\"](t)||Gn[\"Hangul Jamo Extended-A\"](t)||Gn[\"Hangul Jamo Extended-B\"](t)||Gn[\"Hangul Jamo\"](t)||Gn[\"Hangul Syllables\"](t)||Gn.Hiragana(t)||Gn[\"Ideographic Description Characters\"](t)||Gn.Kanbun(t)||Gn[\"Kangxi Radicals\"](t)||Gn[\"Katakana Phonetic Extensions\"](t)||Gn.Katakana(t)&&12540!==t||!(!Gn[\"Halfwidth and Fullwidth Forms\"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!Gn[\"Small Form Variants\"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||Gn[\"Unified Canadian Aboriginal Syllabics\"](t)||Gn[\"Unified Canadian Aboriginal Syllabics Extended\"](t)||Gn[\"Vertical Forms\"](t)||Gn[\"Yijing Hexagram Symbols\"](t)||Gn[\"Yi Syllables\"](t)||Gn[\"Yi Radicals\"](t))))}function Jn(t){return !(Xn(t)||function(t){return !!(Gn[\"Latin-1 Supplement\"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||Gn[\"General Punctuation\"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||Gn[\"Letterlike Symbols\"](t)||Gn[\"Number Forms\"](t)||Gn[\"Miscellaneous Technical\"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||Gn[\"Control Pictures\"](t)&&9251!==t||Gn[\"Optical Character Recognition\"](t)||Gn[\"Enclosed Alphanumerics\"](t)||Gn[\"Geometric Shapes\"](t)||Gn[\"Miscellaneous Symbols\"](t)&&!(t>=9754&&t<=9759)||Gn[\"Miscellaneous Symbols and Arrows\"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||Gn[\"CJK Symbols and Punctuation\"](t)||Gn.Katakana(t)||Gn[\"Private Use Area\"](t)||Gn[\"CJK Compatibility Forms\"](t)||Gn[\"Small Form Variants\"](t)||Gn[\"Halfwidth and Fullwidth Forms\"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function Hn(t){return t>=1424&&t<=2303||Gn[\"Arabic Presentation Forms-A\"](t)||Gn[\"Arabic Presentation Forms-B\"](t)}function Yn(t,e){return !(!e&&Hn(t)||t>=2304&&t<=3583||t>=3840&&t<=4255||Gn.Khmer(t))}function $n(t){for(var e=0,r=t;e<r.length;e+=1)if(Hn(r[e].charCodeAt(0)))return !0;return !1}var Wn=null,Qn=\"unavailable\",ti=null,ei=function(t){t&&\"string\"==typeof t&&t.indexOf(\"NetworkError\")>-1&&(Qn=\"error\"),Wn&&Wn(t);};function ri(){ni.fire(new It(\"pluginStateChange\",{pluginStatus:Qn,pluginURL:ti}));}var ni=new Ct,ii=function(){return Qn},ai=function(){if(\"deferred\"!==Qn||!ti)throw new Error(\"rtl-text-plugin cannot be downloaded unless a pluginURL is specified\");Qn=\"loading\",ri(),ti&&bt({url:ti},(function(t){t?ei(t):(Qn=\"loaded\",ri());}));},oi={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return \"loaded\"===Qn||null!=oi.applyArabicShaping},isLoading:function(){return \"loading\"===Qn},setState:function(t){Qn=t.pluginStatus,ti=t.pluginURL;},isParsed:function(){return null!=oi.applyArabicShaping&&null!=oi.processBidirectionalText&&null!=oi.processStyledBidirectionalText},getPluginURL:function(){return ti}},si=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new Kn,this.transition={});};si.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,n=t;r<n.length;r+=1)if(!Yn(n[r].charCodeAt(0),e))return !1;return !0}(t,oi.isLoaded())},si.prototype.crossFadingFactor=function(){return 0===this.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},si.prototype.getCrossfadeParameters=function(){var t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var ui=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(Lr(t))return new Yr(t,e);if(Gr(t)){var r=Hr(t,e);if(\"error\"===r.result)throw new Error(r.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return r.value}var n=t;return \"string\"==typeof t&&\"color\"===e.type&&(n=te.parse(t)),{kind:\"constant\",evaluate:function(){return n}}}(void 0===e?t.specification.default:e,t.specification);};ui.prototype.isDataDriven=function(){return \"source\"===this.expression.kind||\"composite\"===this.expression.kind},ui.prototype.possiblyEvaluate=function(t,e,r){return this.property.possiblyEvaluate(this,t,e,r)};var li=function(t){this.property=t,this.value=new ui(t,void 0);};li.prototype.transitioned=function(t,e){return new ci(this.property,this.value,e,h({},t.transition,this.transition),t.now)},li.prototype.untransitioned=function(){return new ci(this.property,this.value,null,{},0)};var pi=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues);};pi.prototype.getValue=function(t){return w(this._values[t].value.value)},pi.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new li(this._values[t].property)),this._values[t].value=new ui(this._values[t].property,null===e?void 0:w(e));},pi.prototype.getTransition=function(t){return w(this._values[t].transition)},pi.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new li(this._values[t].property)),this._values[t].transition=w(e)||void 0;},pi.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i);var a=this.getTransition(n);void 0!==a&&(t[n+\"-transition\"]=a);}return t},pi.prototype.transitioned=function(t,e){for(var r=new hi(this._properties),n=0,i=Object.keys(this._values);n<i.length;n+=1){var a=i[n];r._values[a]=this._values[a].transitioned(t,e._values[a]);}return r},pi.prototype.untransitioned=function(){for(var t=new hi(this._properties),e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e];t._values[n]=this._values[n].untransitioned();}return t};var ci=function(t,e,r,n,i){this.property=t,this.value=e,this.begin=i+n.delay||0,this.end=this.begin+n.duration||0,t.specification.transition&&(n.delay||n.duration)&&(this.prior=r);};ci.prototype.possiblyEvaluate=function(t,e,r){var n=t.now||0,i=this.value.possiblyEvaluate(t,e,r),a=this.prior;if(a){if(n>this.end)return this.prior=null,i;if(this.value.isDataDriven())return this.prior=null,i;if(n<this.begin)return a.possiblyEvaluate(t,e,r);var o=(n-this.begin)/(this.end-this.begin);return this.property.interpolate(a.possiblyEvaluate(t,e,r),i,function(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}(o))}return i};var hi=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues);};hi.prototype.possiblyEvaluate=function(t,e,r){for(var n=new di(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];n._values[o]=this._values[o].possiblyEvaluate(t,e,r);}return n},hi.prototype.hasTransition=function(){for(var t=0,e=Object.keys(this._values);t<e.length;t+=1)if(this._values[e[t]].prior)return !0;return !1};var fi=function(t){this._properties=t,this._values=Object.create(t.defaultPropertyValues);};fi.prototype.getValue=function(t){return w(this._values[t].value)},fi.prototype.setValue=function(t,e){this._values[t]=new ui(this._values[t].property,null===e?void 0:w(e));},fi.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i);}return t},fi.prototype.possiblyEvaluate=function(t,e,r){for(var n=new di(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];n._values[o]=this._values[o].possiblyEvaluate(t,e,r);}return n};var yi=function(t,e,r){this.property=t,this.value=e,this.parameters=r;};yi.prototype.isConstant=function(){return \"constant\"===this.value.kind},yi.prototype.constantOr=function(t){return \"constant\"===this.value.kind?this.value.value:t},yi.prototype.evaluate=function(t,e,r,n){return this.property.evaluate(this.value,this.parameters,t,e,r,n)};var di=function(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues);};di.prototype.get=function(t){return this._values[t]};var mi=function(t){this.specification=t;};mi.prototype.possiblyEvaluate=function(t,e){return t.expression.evaluate(e)},mi.prototype.interpolate=function(t,e,r){var n=Ge[this.specification.type];return n?n(t,e,r):t};var vi=function(t,e){this.specification=t,this.overrides=e;};vi.prototype.possiblyEvaluate=function(t,e,r,n){return new yi(this,\"constant\"===t.expression.kind||\"camera\"===t.expression.kind?{kind:\"constant\",value:t.expression.evaluate(e,null,{},r,n)}:t.expression,e)},vi.prototype.interpolate=function(t,e,r){if(\"constant\"!==t.value.kind||\"constant\"!==e.value.kind)return t;if(void 0===t.value.value||void 0===e.value.value)return new yi(this,{kind:\"constant\",value:void 0},t.parameters);var n=Ge[this.specification.type];return n?new yi(this,{kind:\"constant\",value:n(t.value.value,e.value.value,r)},t.parameters):t},vi.prototype.evaluate=function(t,e,r,n,i,a){return \"constant\"===t.kind?t.value:t.evaluate(e,r,n,i,a)};var gi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.possiblyEvaluate=function(t,e,r,n){if(void 0===t.value)return new yi(this,{kind:\"constant\",value:void 0},e);if(\"constant\"===t.expression.kind){var i=t.expression.evaluate(e,null,{},r,n),a=\"resolvedImage\"===t.property.specification.type&&\"string\"!=typeof i?i.name:i,o=this._calculate(a,a,a,e);return new yi(this,{kind:\"constant\",value:o},e)}if(\"camera\"===t.expression.kind){var s=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new yi(this,{kind:\"constant\",value:s},e)}return new yi(this,t.expression,e)},e.prototype.evaluate=function(t,e,r,n,i,a){if(\"source\"===t.kind){var o=t.evaluate(e,r,n,i,a);return this._calculate(o,o,o,e)}return \"composite\"===t.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,n),t.evaluate({zoom:Math.floor(e.zoom)},r,n),t.evaluate({zoom:Math.floor(e.zoom)+1},r,n),e):t.value},e.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(vi),xi=function(t){this.specification=t;};xi.prototype.possiblyEvaluate=function(t,e,r,n){if(void 0!==t.value){if(\"constant\"===t.expression.kind){var i=t.expression.evaluate(e,null,{},r,n);return this._calculate(i,i,i,e)}return this._calculate(t.expression.evaluate(new si(Math.floor(e.zoom-1),e)),t.expression.evaluate(new si(Math.floor(e.zoom),e)),t.expression.evaluate(new si(Math.floor(e.zoom+1),e)),e)}},xi.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},xi.prototype.interpolate=function(t){return t};var bi=function(t){this.specification=t;};bi.prototype.possiblyEvaluate=function(t,e,r,n){return !!t.expression.evaluate(e,null,{},r,n)},bi.prototype.interpolate=function(){return !1};var wi=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var r=t[e];r.specification.overridable&&this.overridableProperties.push(e);var n=this.defaultPropertyValues[e]=new ui(r,void 0),i=this.defaultTransitionablePropertyValues[e]=new li(r);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({});}};On(\"DataDrivenProperty\",vi),On(\"DataConstantProperty\",mi),On(\"CrossFadedDataDrivenProperty\",gi),On(\"CrossFadedProperty\",xi),On(\"ColorRampProperty\",bi);var _i=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter={filter:function(){return !0},needGeometry:!1},\"custom\"!==e.type&&(this.metadata=(e=e).metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,\"background\"!==e.type&&(this.source=e.source,this.sourceLayer=e[\"source-layer\"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new fi(r.layout)),r.paint)){for(var n in this._transitionablePaint=new pi(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new di(r.paint);}}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return \"visibility\"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){void 0===r&&(r={}),null!=e&&this._validate(Mn,\"layers.\"+this.id+\".layout.\"+t,t,e,r)||(\"visibility\"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e);},e.prototype.getPaintProperty=function(t){return g(t,\"-transition\")?this._transitionablePaint.getTransition(t.slice(0,-\"-transition\".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e&&this._validate(Pn,\"layers.\"+this.id+\".paint.\"+t,t,e,r))return !1;if(g(t,\"-transition\"))return this._transitionablePaint.setTransition(t.slice(0,-\"-transition\".length),e||void 0),!1;var n=this._transitionablePaint._values[t],i=\"cross-faded-data-driven\"===n.property.specification[\"property-type\"],a=n.value.isDataDriven(),o=n.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var s=this._transitionablePaint._values[t].value;return s.isDataDriven()||a||i||this._handleOverridablePaintPropertyUpdate(t,o,s)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,r){return !1},e.prototype.isHidden=function(t){return !!(this.minzoom&&t<this.minzoom)||!!(this.maxzoom&&t>=this.maxzoom)||\"none\"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint);},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,void 0,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,void 0,e);},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,\"source-layer\":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),b(t,(function(t,e){return !(void 0===t||\"layout\"===e&&!Object.keys(t).length||\"paint\"===e&&!Object.keys(t).length)}))},e.prototype._validate=function(t,e,r,n,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&Bn(this,t.call(Cn,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:Et,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return !1},e.prototype.isTileClipped=function(){return !1},e.prototype.hasOffscreenPass=function(){return !1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof yi&&Tr(e.property.specification)&&(\"source\"===e.value.kind||\"composite\"===e.value.kind)&&e.value.isStateDependent)return !0}return !1},e}(Ct),Ai={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Si=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8;},ki=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0);};function Ii(t,e){void 0===e&&(e=1);var r=0,n=0;return {members:t.map((function(t){var i=Ai[t.type].BYTES_PER_ELEMENT,a=r=zi(r,Math.max(e,i)),o=t.components||1;return n=Math.max(n,i),r+=i*o,{name:t.name,type:t.type,components:o,offset:a}})),size:zi(r,Math.max(n,e)),alignment:e}}function zi(t,e){return Math.ceil(t/e)*e}ki.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},ki.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},ki.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews());},ki.prototype.clear=function(){this.length=0;},ki.prototype.resize=function(t){this.reserve(t),this.length=t;},ki.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e);}},ki.prototype._refreshViews=function(){throw new Error(\"_refreshViews() must be implemented by each concrete StructArray layout\")};var Ci=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.int16[n+0]=e,this.int16[n+1]=r,t},e}(ki);Ci.prototype.bytesPerElement=4,On(\"StructArrayLayout2i4\",Ci);var Ei=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=n,this.int16[a+3]=i,t},e}(ki);Ei.prototype.bytesPerElement=8,On(\"StructArrayLayout4i8\",Ei);var Pi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(ki);Pi.prototype.bytesPerElement=12,On(\"StructArrayLayout2i4i12\",Pi);var Mi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=4*t,u=8*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.uint8[u+4]=n,this.uint8[u+5]=i,this.uint8[u+6]=a,this.uint8[u+7]=o,t},e}(ki);Mi.prototype.bytesPerElement=8,On(\"StructArrayLayout2i4ub8\",Mi);var Bi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.float32[n+0]=e,this.float32[n+1]=r,t},e}(ki);Bi.prototype.bytesPerElement=8,On(\"StructArrayLayout2f8\",Bi);var Ti=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l){var p=this.length;return this.resize(p+1),this.emplace(p,t,e,r,n,i,a,o,s,u,l)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p){var c=10*t;return this.uint16[c+0]=e,this.uint16[c+1]=r,this.uint16[c+2]=n,this.uint16[c+3]=i,this.uint16[c+4]=a,this.uint16[c+5]=o,this.uint16[c+6]=s,this.uint16[c+7]=u,this.uint16[c+8]=l,this.uint16[c+9]=p,t},e}(ki);Ti.prototype.bytesPerElement=20,On(\"StructArrayLayout10ui20\",Ti);var Vi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p,c){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,n,i,a,o,s,u,l,p,c)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c,h){var f=12*t;return this.int16[f+0]=e,this.int16[f+1]=r,this.int16[f+2]=n,this.int16[f+3]=i,this.uint16[f+4]=a,this.uint16[f+5]=o,this.uint16[f+6]=s,this.uint16[f+7]=u,this.int16[f+8]=l,this.int16[f+9]=p,this.int16[f+10]=c,this.int16[f+11]=h,t},e}(ki);Vi.prototype.bytesPerElement=24,On(\"StructArrayLayout4i4ui4i24\",Vi);var Fi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.float32[i+0]=e,this.float32[i+1]=r,this.float32[i+2]=n,t},e}(ki);Fi.prototype.bytesPerElement=12,On(\"StructArrayLayout3f12\",Fi);var Di=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){return this.uint32[1*t+0]=e,t},e}(ki);Di.prototype.bytesPerElement=4,On(\"StructArrayLayout1ul4\",Di);var Li=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u){var l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,n,i,a,o,s,u)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l){var p=10*t,c=5*t;return this.int16[p+0]=e,this.int16[p+1]=r,this.int16[p+2]=n,this.int16[p+3]=i,this.int16[p+4]=a,this.int16[p+5]=o,this.uint32[c+3]=s,this.uint16[p+8]=u,this.uint16[p+9]=l,t},e}(ki);Li.prototype.bytesPerElement=20,On(\"StructArrayLayout6i1ul2ui20\",Li);var Oi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(ki);Oi.prototype.bytesPerElement=12,On(\"StructArrayLayout2i2i2i12\",Oi);var Ri=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n,i)},e.prototype.emplace=function(t,e,r,n,i,a){var o=4*t,s=8*t;return this.float32[o+0]=e,this.float32[o+1]=r,this.float32[o+2]=n,this.int16[s+6]=i,this.int16[s+7]=a,t},e}(ki);Ri.prototype.bytesPerElement=16,On(\"StructArrayLayout2f1f2i16\",Ri);var Ui=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=12*t,o=3*t;return this.uint8[a+0]=e,this.uint8[a+1]=r,this.float32[o+1]=n,this.float32[o+2]=i,t},e}(ki);Ui.prototype.bytesPerElement=12,On(\"StructArrayLayout2ub2f12\",Ui);var ji=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.uint16[i+0]=e,this.uint16[i+1]=r,this.uint16[i+2]=n,t},e}(ki);ji.prototype.bytesPerElement=6,On(\"StructArrayLayout3ui6\",ji);var qi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m){var v=this.length;return this.resize(v+1),this.emplace(v,t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v){var g=24*t,x=12*t,b=48*t;return this.int16[g+0]=e,this.int16[g+1]=r,this.uint16[g+2]=n,this.uint16[g+3]=i,this.uint32[x+2]=a,this.uint32[x+3]=o,this.uint32[x+4]=s,this.uint16[g+10]=u,this.uint16[g+11]=l,this.uint16[g+12]=p,this.float32[x+7]=c,this.float32[x+8]=h,this.uint8[b+36]=f,this.uint8[b+37]=y,this.uint8[b+38]=d,this.uint32[x+10]=m,this.int16[g+22]=v,t},e}(ki);qi.prototype.bytesPerElement=48,On(\"StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48\",qi);var Ni=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,w,_,A,S,k,I,z){var C=this.length;return this.resize(C+1),this.emplace(C,t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,w,_,A,S,k,I,z)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,w,_,A,S,k,I,z,C){var E=34*t,P=17*t;return this.int16[E+0]=e,this.int16[E+1]=r,this.int16[E+2]=n,this.int16[E+3]=i,this.int16[E+4]=a,this.int16[E+5]=o,this.int16[E+6]=s,this.int16[E+7]=u,this.uint16[E+8]=l,this.uint16[E+9]=p,this.uint16[E+10]=c,this.uint16[E+11]=h,this.uint16[E+12]=f,this.uint16[E+13]=y,this.uint16[E+14]=d,this.uint16[E+15]=m,this.uint16[E+16]=v,this.uint16[E+17]=g,this.uint16[E+18]=x,this.uint16[E+19]=b,this.uint16[E+20]=w,this.uint16[E+21]=_,this.uint16[E+22]=A,this.uint32[P+12]=S,this.float32[P+13]=k,this.float32[P+14]=I,this.float32[P+15]=z,this.float32[P+16]=C,t},e}(ki);Ni.prototype.bytesPerElement=68,On(\"StructArrayLayout8i15ui1ul4f68\",Ni);var Ki=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){return this.float32[1*t+0]=e,t},e}(ki);Ki.prototype.bytesPerElement=4,On(\"StructArrayLayout1f4\",Ki);var Gi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.int16[i+0]=e,this.int16[i+1]=r,this.int16[i+2]=n,t},e}(ki);Gi.prototype.bytesPerElement=6,On(\"StructArrayLayout3i6\",Gi);var Zi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=4*t;return this.uint32[2*t+0]=e,this.uint16[i+2]=r,this.uint16[i+3]=n,t},e}(ki);Zi.prototype.bytesPerElement=8,On(\"StructArrayLayout1ul2ui8\",Zi);var Xi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,t},e}(ki);Xi.prototype.bytesPerElement=4,On(\"StructArrayLayout2ui4\",Xi);var Ji=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){return this.uint16[1*t+0]=e,t},e}(ki);Ji.prototype.bytesPerElement=2,On(\"StructArrayLayout1ui2\",Ji);var Hi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=n,this.float32[a+3]=i,t},e}(ki);Hi.prototype.bytesPerElement=16,On(\"StructArrayLayout4f16\",Hi);var Yi=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.anchorPoint.get=function(){return new i(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Si);Yi.prototype.size=20;var $i=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new Yi(this,t)},e}(Li);On(\"CollisionBoxArray\",$i);var Wi=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0},associatedIconIndex:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},r.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t;},r.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t;},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t;},r.associatedIconIndex.get=function(){return this._structArray.int16[this._pos2+22]},Object.defineProperties(e.prototype,r),e}(Si);Wi.prototype.size=48;var Qi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new Wi(this,t)},e}(qi);On(\"PlacedSymbolArray\",Qi);var ta=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},placedIconSymbolIndex:{configurable:!0},verticalPlacedIconSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},verticalIconBoxStartIndex:{configurable:!0},verticalIconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},numVerticalIconVertices:{configurable:!0},useRuntimeCollisionCircles:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},textOffset0:{configurable:!0},textOffset1:{configurable:!0},collisionCircleDiameter:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},r.placedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+6]},r.verticalPlacedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+7]},r.key.get=function(){return this._structArray.uint16[this._pos2+8]},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},r.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},r.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+13]},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+14]},r.verticalIconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+15]},r.verticalIconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+16]},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+17]},r.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+18]},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+19]},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+20]},r.numVerticalIconVertices.get=function(){return this._structArray.uint16[this._pos2+21]},r.useRuntimeCollisionCircles.get=function(){return this._structArray.uint16[this._pos2+22]},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+12]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+12]=t;},r.textBoxScale.get=function(){return this._structArray.float32[this._pos4+13]},r.textOffset0.get=function(){return this._structArray.float32[this._pos4+14]},r.textOffset1.get=function(){return this._structArray.float32[this._pos4+15]},r.collisionCircleDiameter.get=function(){return this._structArray.float32[this._pos4+16]},Object.defineProperties(e.prototype,r),e}(Si);ta.prototype.size=68;var ea=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new ta(this,t)},e}(Ni);On(\"SymbolInstanceArray\",ea);var ra=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e}(Ki);On(\"GlyphOffsetArray\",ra);var na=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e}(Gi);On(\"SymbolLineVertexArray\",na);var ia=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},Object.defineProperties(e.prototype,r),e}(Si);ia.prototype.size=8;var aa=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new ia(this,t)},e}(Zi);On(\"FeatureIndexArray\",aa);var oa=Ii([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,sa=function(t){void 0===t&&(t=[]),this.segments=t;};function ua(t,e){return 256*(t=p(Math.floor(t),0,255))+p(Math.floor(e),0,255)}sa.prototype.prepareSegment=function(t,e,r,n){var i=this.segments[this.segments.length-1];return t>sa.MAX_VERTEX_ARRAY_LENGTH&&A(\"Max vertices per segment is \"+sa.MAX_VERTEX_ARRAY_LENGTH+\": bucket requested \"+t),(!i||i.vertexLength+t>sa.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!==n)&&(i={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!==n&&(i.sortKey=n),this.segments.push(i)),i},sa.prototype.get=function(){return this.segments},sa.prototype.destroy=function(){for(var t=0,e=this.segments;t<e.length;t+=1){var r=e[t];for(var n in r.vaos)r.vaos[n].destroy();}},sa.simpleSegment=function(t,e,r,n){return new sa([{vertexOffset:t,primitiveOffset:e,vertexLength:r,primitiveLength:n,vaos:{},sortKey:0}])},sa.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,On(\"SegmentVector\",sa);var la=Ii([{name:\"a_pattern_from\",components:4,type:\"Uint16\"},{name:\"a_pattern_to\",components:4,type:\"Uint16\"},{name:\"a_pixel_ratio_from\",components:1,type:\"Uint16\"},{name:\"a_pixel_ratio_to\",components:1,type:\"Uint16\"}]),pa=e((function(t){t.exports=function(t,e){var r,n,i,a,o,s,u,l;for(n=t.length-(r=3&t.length),i=e,o=3432918353,s=461845907,l=0;l<n;)u=255&t.charCodeAt(l)|(255&t.charCodeAt(++l))<<8|(255&t.charCodeAt(++l))<<16|(255&t.charCodeAt(++l))<<24,++l,i=27492+(65535&(a=5*(65535&(i=(i^=u=(65535&(u=(u=(65535&u)*o+(((u>>>16)*o&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295)<<13|i>>>19))+((5*(i>>>16)&65535)<<16)&4294967295))+((58964+(a>>>16)&65535)<<16);switch(u=0,r){case 3:u^=(255&t.charCodeAt(l+2))<<16;case 2:u^=(255&t.charCodeAt(l+1))<<8;case 1:i^=u=(65535&(u=(u=(65535&(u^=255&t.charCodeAt(l)))*o+(((u>>>16)*o&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295;}return i^=t.length,i=2246822507*(65535&(i^=i>>>16))+((2246822507*(i>>>16)&65535)<<16)&4294967295,i=3266489909*(65535&(i^=i>>>13))+((3266489909*(i>>>16)&65535)<<16)&4294967295,(i^=i>>>16)>>>0};})),ca=e((function(t){t.exports=function(t,e){for(var r,n=t.length,i=e^n,a=0;n>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(a)|(255&t.charCodeAt(++a))<<8|(255&t.charCodeAt(++a))<<16|(255&t.charCodeAt(++a))<<24))+((1540483477*(r>>>16)&65535)<<16),i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),n-=4,++a;switch(n){case 3:i^=(255&t.charCodeAt(a+2))<<16;case 2:i^=(255&t.charCodeAt(a+1))<<8;case 1:i=1540483477*(65535&(i^=255&t.charCodeAt(a)))+((1540483477*(i>>>16)&65535)<<16);}return i=1540483477*(65535&(i^=i>>>13))+((1540483477*(i>>>16)&65535)<<16),(i^=i>>>15)>>>0};})),ha=pa,fa=ca;ha.murmur3=pa,ha.murmur2=fa;var ya=function(){this.ids=[],this.positions=[],this.indexed=!1;};ya.prototype.add=function(t,e,r,n){this.ids.push(ma(t)),this.positions.push(e,r,n);},ya.prototype.getPositions=function(t){for(var e=ma(t),r=0,n=this.ids.length-1;r<n;){var i=r+n>>1;this.ids[i]>=e?n=i:r=i+1;}for(var a=[];this.ids[r]===e;)a.push({index:this.positions[3*r],start:this.positions[3*r+1],end:this.positions[3*r+2]}),r++;return a},ya.serialize=function(t,e){var r=new Float64Array(t.ids),n=new Uint32Array(t.positions);return function t(e,r,n,i){for(;n<i;){for(var a=e[n+i>>1],o=n-1,s=i+1;;){do{o++;}while(e[o]<a);do{s--;}while(e[s]>a);if(o>=s)break;va(e,o,s),va(r,3*o,3*s),va(r,3*o+1,3*s+1),va(r,3*o+2,3*s+2);}s-n<i-s?(t(e,r,n,s),n=s+1):(t(e,r,s+1,i),i=s);}}(r,n,0,r.length-1),e&&e.push(r.buffer,n.buffer),{ids:r,positions:n}},ya.deserialize=function(t){var e=new ya;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e};var da=Math.pow(2,53)-1;function ma(t){var e=+t;return !isNaN(e)&&e<=da?e:ha(String(t))}function va(t,e,r){var n=t[e];t[e]=t[r],t[r]=n;}On(\"FeaturePositionMap\",ya);var ga=function(t,e){this.gl=t.gl,this.location=e;},xa=function(t){function e(e,r){t.call(this,e,r),this.current=0;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t));},e}(ga),ba=function(t){function e(e,r){t.call(this,e,r),this.current=0;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t));},e}(ga),wa=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0];}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]));},e}(ga),_a=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0];}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]));},e}(ga),Aa=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0,0];}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]));},e}(ga),Sa=function(t){function e(e,r){t.call(this,e,r),this.current=te.transparent;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a));},e}(ga),ka=new Float32Array(16),Ia=function(t){function e(e,r){t.call(this,e,r),this.current=ka;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(ga);function za(t){return [ua(255*t.r,255*t.g),ua(255*t.b,255*t.a)]}var Ca=function(t,e,r){this.value=t,this.uniformNames=e.map((function(t){return \"u_\"+t})),this.type=r;};Ca.prototype.setUniform=function(t,e,r){t.set(r.constantOr(this.value));},Ca.prototype.getBinding=function(t,e,r){return \"color\"===this.type?new Sa(t,e):new ba(t,e)};var Ea=function(t,e){this.uniformNames=e.map((function(t){return \"u_\"+t})),this.patternFrom=null,this.patternTo=null,this.pixelRatioFrom=1,this.pixelRatioTo=1;};Ea.prototype.setConstantPatternPositions=function(t,e){this.pixelRatioFrom=e.pixelRatio,this.pixelRatioTo=t.pixelRatio,this.patternFrom=e.tlbr,this.patternTo=t.tlbr;},Ea.prototype.setUniform=function(t,e,r,n){var i=\"u_pattern_to\"===n?this.patternTo:\"u_pattern_from\"===n?this.patternFrom:\"u_pixel_ratio_to\"===n?this.pixelRatioTo:\"u_pixel_ratio_from\"===n?this.pixelRatioFrom:null;i&&t.set(i);},Ea.prototype.getBinding=function(t,e,r){return \"u_pattern\"===r.substr(0,9)?new Aa(t,e):new ba(t,e)};var Pa=function(t,e,r,n){this.expression=t,this.type=r,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return {name:\"a_\"+t,type:\"Float32\",components:\"color\"===r?2:1,offset:0}})),this.paintVertexArray=new n;};Pa.prototype.populatePaintArray=function(t,e,r,n,i){var a=this.paintVertexArray.length,o=this.expression.evaluate(new si(0),e,{},n,[],i);this.paintVertexArray.resize(t),this._setPaintValue(a,t,o);},Pa.prototype.updatePaintArray=function(t,e,r,n){var i=this.expression.evaluate({zoom:0},r,n);this._setPaintValue(t,e,i);},Pa.prototype._setPaintValue=function(t,e,r){if(\"color\"===this.type)for(var n=za(r),i=t;i<e;i++)this.paintVertexArray.emplace(i,n[0],n[1]);else {for(var a=t;a<e;a++)this.paintVertexArray.emplace(a,r);this.maxValue=Math.max(this.maxValue,Math.abs(r));}},Pa.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent));},Pa.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy();};var Ma=function(t,e,r,n,i,a){this.expression=t,this.uniformNames=e.map((function(t){return \"u_\"+t+\"_t\"})),this.type=r,this.useIntegerZoom=n,this.zoom=i,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return {name:\"a_\"+t,type:\"Float32\",components:\"color\"===r?4:2,offset:0}})),this.paintVertexArray=new a;};Ma.prototype.populatePaintArray=function(t,e,r,n,i){var a=this.expression.evaluate(new si(this.zoom),e,{},n,[],i),o=this.expression.evaluate(new si(this.zoom+1),e,{},n,[],i),s=this.paintVertexArray.length;this.paintVertexArray.resize(t),this._setPaintValue(s,t,a,o);},Ma.prototype.updatePaintArray=function(t,e,r,n){var i=this.expression.evaluate({zoom:this.zoom},r,n),a=this.expression.evaluate({zoom:this.zoom+1},r,n);this._setPaintValue(t,e,i,a);},Ma.prototype._setPaintValue=function(t,e,r,n){if(\"color\"===this.type)for(var i=za(r),a=za(n),o=t;o<e;o++)this.paintVertexArray.emplace(o,i[0],i[1],a[0],a[1]);else {for(var s=t;s<e;s++)this.paintVertexArray.emplace(s,r,n);this.maxValue=Math.max(this.maxValue,Math.abs(r),Math.abs(n));}},Ma.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent));},Ma.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy();},Ma.prototype.setUniform=function(t,e){var r=this.useIntegerZoom?Math.floor(e.zoom):e.zoom,n=p(this.expression.interpolationFactor(r,this.zoom,this.zoom+1),0,1);t.set(n);},Ma.prototype.getBinding=function(t,e,r){return new ba(t,e)};var Ba=function(t,e,r,n,i,a){this.expression=t,this.type=e,this.useIntegerZoom=r,this.zoom=n,this.layerId=a,this.zoomInPaintVertexArray=new i,this.zoomOutPaintVertexArray=new i;};Ba.prototype.populatePaintArray=function(t,e,r){var n=this.zoomInPaintVertexArray.length;this.zoomInPaintVertexArray.resize(t),this.zoomOutPaintVertexArray.resize(t),this._setPaintValues(n,t,e.patterns&&e.patterns[this.layerId],r);},Ba.prototype.updatePaintArray=function(t,e,r,n,i){this._setPaintValues(t,e,r.patterns&&r.patterns[this.layerId],i);},Ba.prototype._setPaintValues=function(t,e,r,n){if(n&&r){var i=n[r.min],a=n[r.mid],o=n[r.max];if(i&&a&&o)for(var s=t;s<e;s++)this.zoomInPaintVertexArray.emplace(s,a.tl[0],a.tl[1],a.br[0],a.br[1],i.tl[0],i.tl[1],i.br[0],i.br[1],a.pixelRatio,i.pixelRatio),this.zoomOutPaintVertexArray.emplace(s,a.tl[0],a.tl[1],a.br[0],a.br[1],o.tl[0],o.tl[1],o.br[0],o.br[1],a.pixelRatio,o.pixelRatio);}},Ba.prototype.upload=function(t){this.zoomInPaintVertexArray&&this.zoomInPaintVertexArray.arrayBuffer&&this.zoomOutPaintVertexArray&&this.zoomOutPaintVertexArray.arrayBuffer&&(this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,la.members,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,la.members,this.expression.isStateDependent));},Ba.prototype.destroy=function(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy();};var Ta=function(t,e,r){this.binders={},this._buffers=[];var n=[];for(var i in t.paint._values)if(r(i)){var a=t.paint.get(i);if(a instanceof yi&&Tr(a.property.specification)){var o=Fa(i,t.type),s=a.value,u=a.property.specification.type,l=a.property.useIntegerZoom,p=a.property.specification[\"property-type\"],c=\"cross-faded\"===p||\"cross-faded-data-driven\"===p;if(\"constant\"===s.kind)this.binders[i]=c?new Ea(s.value,o):new Ca(s.value,o,u),n.push(\"/u_\"+i);else if(\"source\"===s.kind||c){var h=Da(i,u,\"source\");this.binders[i]=c?new Ba(s,u,l,e,h,t.id):new Pa(s,o,u,h),n.push(\"/a_\"+i);}else {var f=Da(i,u,\"composite\");this.binders[i]=new Ma(s,o,u,l,e,f),n.push(\"/z_\"+i);}}}this.cacheKey=n.sort().join(\"\");};Ta.prototype.getMaxValue=function(t){var e=this.binders[t];return e instanceof Pa||e instanceof Ma?e.maxValue:0},Ta.prototype.populatePaintArrays=function(t,e,r,n,i){for(var a in this.binders){var o=this.binders[a];(o instanceof Pa||o instanceof Ma||o instanceof Ba)&&o.populatePaintArray(t,e,r,n,i);}},Ta.prototype.setConstantPatternPositions=function(t,e){for(var r in this.binders){var n=this.binders[r];n instanceof Ea&&n.setConstantPatternPositions(t,e);}},Ta.prototype.updatePaintArrays=function(t,e,r,n,i){var a=!1;for(var o in t)for(var s=0,u=e.getPositions(o);s<u.length;s+=1){var l=u[s],p=r.feature(l.index);for(var c in this.binders){var h=this.binders[c];if((h instanceof Pa||h instanceof Ma||h instanceof Ba)&&!0===h.expression.isStateDependent){var f=n.paint.get(c);h.expression=f.value,h.updatePaintArray(l.start,l.end,p,t[o],i),a=!0;}}}return a},Ta.prototype.defines=function(){var t=[];for(var e in this.binders){var r=this.binders[e];(r instanceof Ca||r instanceof Ea)&&t.push.apply(t,r.uniformNames.map((function(t){return \"#define HAS_UNIFORM_\"+t})));}return t},Ta.prototype.getBinderAttributes=function(){var t=[];for(var e in this.binders){var r=this.binders[e];if(r instanceof Pa||r instanceof Ma)for(var n=0;n<r.paintVertexAttributes.length;n++)t.push(r.paintVertexAttributes[n].name);else if(r instanceof Ba)for(var i=0;i<la.members.length;i++)t.push(la.members[i].name);}return t},Ta.prototype.getBinderUniforms=function(){var t=[];for(var e in this.binders){var r=this.binders[e];if(r instanceof Ca||r instanceof Ea||r instanceof Ma)for(var n=0,i=r.uniformNames;n<i.length;n+=1)t.push(i[n]);}return t},Ta.prototype.getPaintVertexBuffers=function(){return this._buffers},Ta.prototype.getUniforms=function(t,e){var r=[];for(var n in this.binders){var i=this.binders[n];if(i instanceof Ca||i instanceof Ea||i instanceof Ma)for(var a=0,o=i.uniformNames;a<o.length;a+=1){var s=o[a];if(e[s]){var u=i.getBinding(t,e[s],s);r.push({name:s,property:n,binding:u});}}}return r},Ta.prototype.setUniforms=function(t,e,r,n){for(var i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.name,u=o.property;this.binders[u].setUniform(o.binding,n,r.get(u),s);}},Ta.prototype.updatePaintBuffers=function(t){for(var e in this._buffers=[],this.binders){var r=this.binders[e];if(t&&r instanceof Ba){var n=2===t.fromScale?r.zoomInPaintVertexBuffer:r.zoomOutPaintVertexBuffer;n&&this._buffers.push(n);}else (r instanceof Pa||r instanceof Ma)&&r.paintVertexBuffer&&this._buffers.push(r.paintVertexBuffer);}},Ta.prototype.upload=function(t){for(var e in this.binders){var r=this.binders[e];(r instanceof Pa||r instanceof Ma||r instanceof Ba)&&r.upload(t);}this.updatePaintBuffers();},Ta.prototype.destroy=function(){for(var t in this.binders){var e=this.binders[t];(e instanceof Pa||e instanceof Ma||e instanceof Ba)&&e.destroy();}};var Va=function(t,e,r){void 0===r&&(r=function(){return !0}),this.programConfigurations={};for(var n=0,i=t;n<i.length;n+=1){var a=i[n];this.programConfigurations[a.id]=new Ta(a,e,r);}this.needsUpload=!1,this._featureMap=new ya,this._bufferOffset=0;};function Fa(t,e){return {\"text-opacity\":[\"opacity\"],\"icon-opacity\":[\"opacity\"],\"text-color\":[\"fill_color\"],\"icon-color\":[\"fill_color\"],\"text-halo-color\":[\"halo_color\"],\"icon-halo-color\":[\"halo_color\"],\"text-halo-blur\":[\"halo_blur\"],\"icon-halo-blur\":[\"halo_blur\"],\"text-halo-width\":[\"halo_width\"],\"icon-halo-width\":[\"halo_width\"],\"line-gap-width\":[\"gapwidth\"],\"line-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-extrusion-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"]}[t]||[t.replace(e+\"-\",\"\").replace(/-/g,\"_\")]}function Da(t,e,r){var n={color:{source:Bi,composite:Hi},number:{source:Ki,composite:Bi}},i=function(t){return {\"line-pattern\":{source:Ti,composite:Ti},\"fill-pattern\":{source:Ti,composite:Ti},\"fill-extrusion-pattern\":{source:Ti,composite:Ti}}[t]}(t);return i&&i[r]||n[e][r]}Va.prototype.populatePaintArrays=function(t,e,r,n,i,a){for(var o in this.programConfigurations)this.programConfigurations[o].populatePaintArrays(t,e,n,i,a);void 0!==e.id&&this._featureMap.add(e.id,r,this._bufferOffset,t),this._bufferOffset=t,this.needsUpload=!0;},Va.prototype.updatePaintArrays=function(t,e,r,n){for(var i=0,a=r;i<a.length;i+=1){var o=a[i];this.needsUpload=this.programConfigurations[o.id].updatePaintArrays(t,this._featureMap,e,o,n)||this.needsUpload;}},Va.prototype.get=function(t){return this.programConfigurations[t]},Va.prototype.upload=function(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1;}},Va.prototype.destroy=function(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy();},On(\"ConstantBinder\",Ca),On(\"CrossFadedConstantBinder\",Ea),On(\"SourceExpressionBinder\",Pa),On(\"CrossFadedCompositeBinder\",Ba),On(\"CompositeExpressionBinder\",Ma),On(\"ProgramConfiguration\",Ta,{omit:[\"_buffers\"]}),On(\"ProgramConfigurationSet\",Va);var La=Math.pow(2,14)-1,Oa=-La-1;function Ra(t){for(var e=8192/t.extent,r=t.loadGeometry(),n=0;n<r.length;n++)for(var i=r[n],a=0;a<i.length;a++){var o=i[a],s=Math.round(o.x*e),u=Math.round(o.y*e);o.x=p(s,Oa,La),o.y=p(u,Oa,La),(s<o.x||s>o.x+1||u<o.y||u>o.y+1)&&A(\"Geometry exceeds allowed extent, reduce your vector tile buffer size\");}return r}function Ua(t,e){return {type:t.type,id:t.id,properties:t.properties,geometry:e?Ra(t):[]}}function ja(t,e,r,n,i){t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2);}var qa=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Ci,this.indexArray=new ji,this.segments=new sa,this.programConfigurations=new Va(t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};function Na(t,e){for(var r=0;r<t.length;r++)if(Wa(e,t[r]))return !0;for(var n=0;n<e.length;n++)if(Wa(t,e[n]))return !0;return !!Xa(t,e)}function Ka(t,e,r){return !!Wa(t,e)||!!Ha(e,t,r)}function Ga(t,e){if(1===t.length)return $a(e,t[0]);for(var r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++)if(Wa(t,n[i]))return !0;for(var a=0;a<t.length;a++)if($a(e,t[a]))return !0;for(var o=0;o<e.length;o++)if(Xa(t,e[o]))return !0;return !1}function Za(t,e,r){if(t.length>1){if(Xa(t,e))return !0;for(var n=0;n<e.length;n++)if(Ha(e[n],t,r))return !0}for(var i=0;i<t.length;i++)if(Ha(t[i],e,r))return !0;return !1}function Xa(t,e){if(0===t.length||0===e.length)return !1;for(var r=0;r<t.length-1;r++)for(var n=t[r],i=t[r+1],a=0;a<e.length-1;a++)if(Ja(n,i,e[a],e[a+1]))return !0;return !1}function Ja(t,e,r,n){return S(t,r,n)!==S(e,r,n)&&S(t,e,r)!==S(t,e,n)}function Ha(t,e,r){var n=r*r;if(1===e.length)return t.distSqr(e[0])<n;for(var i=1;i<e.length;i++)if(Ya(t,e[i-1],e[i])<n)return !0;return !1}function Ya(t,e,r){var n=e.distSqr(r);if(0===n)return t.distSqr(e);var i=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return t.distSqr(i<0?e:i>1?r:r.sub(e)._mult(i)._add(e))}function $a(t,e){for(var r,n,i,a=!1,o=0;o<t.length;o++)for(var s=0,u=(r=t[o]).length-1;s<r.length;u=s++)(n=r[s]).y>e.y!=(i=r[u]).y>e.y&&e.x<(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x&&(a=!a);return a}function Wa(t,e){for(var r=!1,n=0,i=t.length-1;n<t.length;i=n++){var a=t[n],o=t[i];a.y>e.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(r=!r);}return r}function Qa(t,e,r){var n=r[0],i=r[2];if(t.x<n.x&&e.x<n.x||t.x>i.x&&e.x>i.x||t.y<n.y&&e.y<n.y||t.y>i.y&&e.y>i.y)return !1;var a=S(t,e,r[0]);return a!==S(t,e,r[1])||a!==S(t,e,r[2])||a!==S(t,e,r[3])}function to(t,e,r){var n=e.paint.get(t).value;return \"constant\"===n.kind?n.value:r.programConfigurations.get(e.id).getMaxValue(t)}function eo(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function ro(t,e,r,n,a){if(!e[0]&&!e[1])return t;var o=i.convert(e)._mult(a);\"viewport\"===r&&o._rotate(-n);for(var s=[],u=0;u<t.length;u++)s.push(t[u].sub(o));return s}qa.prototype.populate=function(t,e,r){var n=this.layers[0],i=[],a=null;\"circle\"===n.type&&(a=n.layout.get(\"circle-sort-key\"));for(var o=0,s=t;o<s.length;o+=1){var u=s[o],l=u.feature,p=u.id,c=u.index,h=u.sourceLayerIndex,f=this.layers[0]._featureFilter.needGeometry,y=Ua(l,f);if(this.layers[0]._featureFilter.filter(new si(this.zoom),y,r)){var d=a?a.evaluate(y,{},r):void 0,m={id:p,properties:l.properties,type:l.type,sourceLayerIndex:h,index:c,geometry:f?y.geometry:Ra(l),patterns:{},sortKey:d};i.push(m);}}a&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var v=0,g=i;v<g.length;v+=1){var x=g[v],b=x.geometry,w=x.index,_=x.sourceLayerIndex,A=t[w].feature;this.addFeature(x,b,w,r),e.featureIndex.insert(A,b,w,_,this.index);}},qa.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r);},qa.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},qa.prototype.uploadPending=function(){return !this.uploaded||this.programConfigurations.needsUpload},qa.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,oa),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0;},qa.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy());},qa.prototype.addFeature=function(t,e,r,n){for(var i=0,a=e;i<a.length;i+=1)for(var o=0,s=a[i];o<s.length;o+=1){var u=s[o],l=u.x,p=u.y;if(!(l<0||l>=8192||p<0||p>=8192)){var c=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),h=c.vertexLength;ja(this.layoutVertexArray,l,p,-1,-1),ja(this.layoutVertexArray,l,p,1,-1),ja(this.layoutVertexArray,l,p,1,1),ja(this.layoutVertexArray,l,p,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),c.vertexLength+=4,c.primitiveLength+=2;}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{},n);},On(\"CircleBucket\",qa,{omit:[\"layers\"]});var no=new wi({\"circle-sort-key\":new vi(Et.layout_circle[\"circle-sort-key\"])}),io={paint:new wi({\"circle-radius\":new vi(Et.paint_circle[\"circle-radius\"]),\"circle-color\":new vi(Et.paint_circle[\"circle-color\"]),\"circle-blur\":new vi(Et.paint_circle[\"circle-blur\"]),\"circle-opacity\":new vi(Et.paint_circle[\"circle-opacity\"]),\"circle-translate\":new mi(Et.paint_circle[\"circle-translate\"]),\"circle-translate-anchor\":new mi(Et.paint_circle[\"circle-translate-anchor\"]),\"circle-pitch-scale\":new mi(Et.paint_circle[\"circle-pitch-scale\"]),\"circle-pitch-alignment\":new mi(Et.paint_circle[\"circle-pitch-alignment\"]),\"circle-stroke-width\":new vi(Et.paint_circle[\"circle-stroke-width\"]),\"circle-stroke-color\":new vi(Et.paint_circle[\"circle-stroke-color\"]),\"circle-stroke-opacity\":new vi(Et.paint_circle[\"circle-stroke-opacity\"])}),layout:no},ao=\"undefined\"!=typeof Float32Array?Float32Array:Array;function oo(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function so(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],u=e[5],l=e[6],p=e[7],c=e[8],h=e[9],f=e[10],y=e[11],d=e[12],m=e[13],v=e[14],g=e[15],x=r[0],b=r[1],w=r[2],_=r[3];return t[0]=x*n+b*s+w*c+_*d,t[1]=x*i+b*u+w*h+_*m,t[2]=x*a+b*l+w*f+_*v,t[3]=x*o+b*p+w*y+_*g,t[4]=(x=r[4])*n+(b=r[5])*s+(w=r[6])*c+(_=r[7])*d,t[5]=x*i+b*u+w*h+_*m,t[6]=x*a+b*l+w*f+_*v,t[7]=x*o+b*p+w*y+_*g,t[8]=(x=r[8])*n+(b=r[9])*s+(w=r[10])*c+(_=r[11])*d,t[9]=x*i+b*u+w*h+_*m,t[10]=x*a+b*l+w*f+_*v,t[11]=x*o+b*p+w*y+_*g,t[12]=(x=r[12])*n+(b=r[13])*s+(w=r[14])*c+(_=r[15])*d,t[13]=x*i+b*u+w*h+_*m,t[14]=x*a+b*l+w*f+_*v,t[15]=x*o+b*p+w*y+_*g,t}Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,r=arguments.length;r--;)e+=t[r]*t[r];return Math.sqrt(e)});var uo,lo=so;function po(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}uo=new ao(3),ao!=Float32Array&&(uo[0]=0,uo[1]=0,uo[2]=0),function(){var t=new ao(4);ao!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0);}();var co=(function(){var t=new ao(2);ao!=Float32Array&&(t[0]=0,t[1]=0);}(),function(t){function e(e){t.call(this,e,io);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.createBucket=function(t){return new qa(t)},e.prototype.queryRadius=function(t){var e=t;return to(\"circle-radius\",this,e)+to(\"circle-stroke-width\",this,e)+eo(this.paint.get(\"circle-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o,s){for(var u=ro(t,this.paint.get(\"circle-translate\"),this.paint.get(\"circle-translate-anchor\"),a.angle,o),l=this.paint.get(\"circle-radius\").evaluate(e,r)+this.paint.get(\"circle-stroke-width\").evaluate(e,r),p=\"map\"===this.paint.get(\"circle-pitch-alignment\"),c=p?u:function(t,e){return t.map((function(t){return ho(t,e)}))}(u,s),h=p?l*o:l,f=0,y=n;f<y.length;f+=1)for(var d=0,m=y[f];d<m.length;d+=1){var v=m[d],g=p?v:ho(v,s),x=h,b=po([],[v.x,v.y,0,1],s);if(\"viewport\"===this.paint.get(\"circle-pitch-scale\")&&\"map\"===this.paint.get(\"circle-pitch-alignment\")?x*=b[3]/a.cameraToCenterDistance:\"map\"===this.paint.get(\"circle-pitch-scale\")&&\"viewport\"===this.paint.get(\"circle-pitch-alignment\")&&(x*=a.cameraToCenterDistance/b[3]),Ka(c,g,x))return !0}return !1},e}(_i));function ho(t,e){var r=po([],[t.x,t.y,0,1],e);return new i(r[0]/r[3],r[1]/r[3])}var fo=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(qa);function yo(t,e,r,n){var i=e.width,a=e.height;if(n){if(n instanceof Uint8ClampedArray)n=new Uint8Array(n.buffer);else if(n.length!==i*a*r)throw new RangeError(\"mismatched image size\")}else n=new Uint8Array(i*a*r);return t.width=i,t.height=a,t.data=n,t}function mo(t,e,r){var n=e.width,i=e.height;if(n!==t.width||i!==t.height){var a=yo({},{width:n,height:i},r);vo(t,a,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,n),height:Math.min(t.height,i)},r),t.width=n,t.height=i,t.data=a.data;}}function vo(t,e,r,n,i,a){if(0===i.width||0===i.height)return e;if(i.width>t.width||i.height>t.height||r.x>t.width-i.width||r.y>t.height-i.height)throw new RangeError(\"out of range source coordinates for image copy\");if(i.width>e.width||i.height>e.height||n.x>e.width-i.width||n.y>e.height-i.height)throw new RangeError(\"out of range destination coordinates for image copy\");for(var o=t.data,s=e.data,u=0;u<i.height;u++)for(var l=((r.y+u)*t.width+r.x)*a,p=((n.y+u)*e.width+n.x)*a,c=0;c<i.width*a;c++)s[p+c]=o[l+c];return e}On(\"HeatmapBucket\",fo,{omit:[\"layers\"]});var go=function(t,e){yo(this,t,1,e);};go.prototype.resize=function(t){mo(this,t,1);},go.prototype.clone=function(){return new go({width:this.width,height:this.height},new Uint8Array(this.data))},go.copy=function(t,e,r,n,i){vo(t,e,r,n,i,1);};var xo=function(t,e){yo(this,t,4,e);};xo.prototype.resize=function(t){mo(this,t,4);},xo.prototype.replace=function(t,e){e?this.data.set(t):this.data=t instanceof Uint8ClampedArray?new Uint8Array(t.buffer):t;},xo.prototype.clone=function(){return new xo({width:this.width,height:this.height},new Uint8Array(this.data))},xo.copy=function(t,e,r,n,i){vo(t,e,r,n,i,4);},On(\"AlphaImage\",go),On(\"RGBAImage\",xo);var bo={paint:new wi({\"heatmap-radius\":new vi(Et.paint_heatmap[\"heatmap-radius\"]),\"heatmap-weight\":new vi(Et.paint_heatmap[\"heatmap-weight\"]),\"heatmap-intensity\":new mi(Et.paint_heatmap[\"heatmap-intensity\"]),\"heatmap-color\":new bi(Et.paint_heatmap[\"heatmap-color\"]),\"heatmap-opacity\":new mi(Et.paint_heatmap[\"heatmap-opacity\"])})};function wo(t){var e={},r=t.resolution||256,n=t.clips?t.clips.length:1,i=t.image||new xo({width:r,height:n}),a=function(r,n,a){e[t.evaluationKey]=a;var o=t.expression.evaluate(e);i.data[r+n+0]=Math.floor(255*o.r/o.a),i.data[r+n+1]=Math.floor(255*o.g/o.a),i.data[r+n+2]=Math.floor(255*o.b/o.a),i.data[r+n+3]=Math.floor(255*o.a);};if(t.clips)for(var o=0,s=0;o<n;++o,s+=4*r)for(var u=0,l=0;u<r;u++,l+=4){var p=u/(r-1),c=t.clips[o];a(s,l,c.start*(1-p)+c.end*p);}else for(var h=0,f=0;h<r;h++,f+=4)a(0,f,h/(r-1));return i}var _o=function(t){function e(e){t.call(this,e,bo),this._updateColorRamp();}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.createBucket=function(t){return new fo(t)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){\"heatmap-color\"===t&&this._updateColorRamp();},e.prototype._updateColorRamp=function(){this.colorRamp=wo({expression:this._transitionablePaint._values[\"heatmap-color\"].value.expression,evaluationKey:\"heatmapDensity\",image:this.colorRamp}),this.colorRampTexture=null;},e.prototype.resize=function(){this.heatmapFbo&&(this.heatmapFbo.destroy(),this.heatmapFbo=null);},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return !1},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\"heatmap-opacity\")&&\"none\"!==this.visibility},e}(_i),Ao={paint:new wi({\"hillshade-illumination-direction\":new mi(Et.paint_hillshade[\"hillshade-illumination-direction\"]),\"hillshade-illumination-anchor\":new mi(Et.paint_hillshade[\"hillshade-illumination-anchor\"]),\"hillshade-exaggeration\":new mi(Et.paint_hillshade[\"hillshade-exaggeration\"]),\"hillshade-shadow-color\":new mi(Et.paint_hillshade[\"hillshade-shadow-color\"]),\"hillshade-highlight-color\":new mi(Et.paint_hillshade[\"hillshade-highlight-color\"]),\"hillshade-accent-color\":new mi(Et.paint_hillshade[\"hillshade-accent-color\"])})},So=function(t){function e(e){t.call(this,e,Ao);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\"hillshade-exaggeration\")&&\"none\"!==this.visibility},e}(_i),ko=Ii([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,Io=Co,zo=Co;function Co(t,e,r){r=r||2;var n,i,a,o,s,u,l,p=e&&e.length,c=p?e[0]*r:t.length,h=Eo(t,0,c,r,!0),f=[];if(!h||h.next===h.prev)return f;if(p&&(h=function(t,e,r,n){var i,a,o,s=[];for(i=0,a=e.length;i<a;i++)(o=Eo(t,e[i]*n,i<a-1?e[i+1]*n:t.length,n,!1))===o.next&&(o.steiner=!0),s.push(Uo(o));for(s.sort(Do),i=0;i<s.length;i++)Lo(s[i],r),r=Po(r,r.next);return r}(t,e,h,r)),t.length>80*r){n=a=t[0],i=o=t[1];for(var y=r;y<c;y+=r)(s=t[y])<n&&(n=s),(u=t[y+1])<i&&(i=u),s>a&&(a=s),u>o&&(o=u);l=0!==(l=Math.max(a-n,o-i))?1/l:0;}return Mo(h,f,r,n,i,l),f}function Eo(t,e,r,n,i){var a,o;if(i===Qo(t,e,r,n)>0)for(a=e;a<r;a+=n)o=Yo(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=Yo(a,t[a],t[a+1],o);return o&&Ko(o,o.next)&&($o(o),o=o.next),o}function Po(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!Ko(n,n.next)&&0!==No(n.prev,n,n.next))n=n.next;else {if($o(n),(n=e=n.prev)===n.next)break;r=!0;}}while(r||n!==e);return e}function Mo(t,e,r,n,i,a,o){if(t){!o&&a&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=Ro(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next;}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,u,l=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<l&&(s++,n=n.nextZ);e++);for(u=l;s>0||u>0&&n;)0!==s&&(0===u||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,u--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n;}a.nextZ=null,l*=2;}while(o>1)}(i);}(t,n,i,a);for(var s,u,l=t;t.prev!==t.next;)if(s=t.prev,u=t.next,a?To(t,n,i,a):Bo(t))e.push(s.i/r),e.push(t.i/r),e.push(u.i/r),$o(t),t=u.next,l=u.next;else if((t=u)===l){o?1===o?Mo(t=Vo(Po(t),e,r),e,r,n,i,a,2):2===o&&Fo(t,e,r,n,i,a):Mo(Po(t),e,r,n,i,a,1);break}}}function Bo(t){var e=t.prev,r=t,n=t.next;if(No(e,r,n)>=0)return !1;for(var i=t.next.next;i!==t.prev;){if(jo(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&No(i.prev,i,i.next)>=0)return !1;i=i.next;}return !0}function To(t,e,r,n){var i=t.prev,a=t,o=t.next;if(No(i,a,o)>=0)return !1;for(var s=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,u=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,l=Ro(i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,e,r,n),p=Ro(s,u,e,r,n),c=t.prevZ,h=t.nextZ;c&&c.z>=l&&h&&h.z<=p;){if(c!==t.prev&&c!==t.next&&jo(i.x,i.y,a.x,a.y,o.x,o.y,c.x,c.y)&&No(c.prev,c,c.next)>=0)return !1;if(c=c.prevZ,h!==t.prev&&h!==t.next&&jo(i.x,i.y,a.x,a.y,o.x,o.y,h.x,h.y)&&No(h.prev,h,h.next)>=0)return !1;h=h.nextZ;}for(;c&&c.z>=l;){if(c!==t.prev&&c!==t.next&&jo(i.x,i.y,a.x,a.y,o.x,o.y,c.x,c.y)&&No(c.prev,c,c.next)>=0)return !1;c=c.prevZ;}for(;h&&h.z<=p;){if(h!==t.prev&&h!==t.next&&jo(i.x,i.y,a.x,a.y,o.x,o.y,h.x,h.y)&&No(h.prev,h,h.next)>=0)return !1;h=h.nextZ;}return !0}function Vo(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!Ko(i,a)&&Go(i,n,n.next,a)&&Jo(i,a)&&Jo(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),$o(n),$o(n.next),n=t=a),n=n.next;}while(n!==t);return Po(n)}function Fo(t,e,r,n,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&qo(o,s)){var u=Ho(o,s);return o=Po(o,o.next),u=Po(u,u.next),Mo(o,e,r,n,i,a),void Mo(u,e,r,n,i,a)}s=s.next;}o=o.next;}while(o!==t)}function Do(t,e){return t.x-e.x}function Lo(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next;}}n=n.next;}while(n!==e);if(!r)return null;if(i===o)return r;var u,l=r,p=r.x,c=r.y,h=1/0;n=r;do{i>=n.x&&n.x>=p&&i!==n.x&&jo(a<c?i:o,a,p,c,a<c?o:i,a,n.x,n.y)&&(u=Math.abs(a-n.y)/(i-n.x),Jo(n,t)&&(u<h||u===h&&(n.x>r.x||n.x===r.x&&Oo(r,n)))&&(r=n,h=u)),n=n.next;}while(n!==l);return r}(t,e)){var r=Ho(e,t);Po(e,e.next),Po(r,r.next);}}function Oo(t,e){return No(t.prev,t,e.prev)<0&&No(e.next,t,t.next)<0}function Ro(t,e,r,n,i){return (t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Uo(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next;}while(e!==t);return r}function jo(t,e,r,n,i,a,o,s){return (i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function qo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&Go(r,r.next,t,e))return !0;r=r.next;}while(r!==t);return !1}(t,e)&&(Jo(t,e)&&Jo(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next;}while(r!==t);return n}(t,e)&&(No(t.prev,t,e.prev)||No(t,e.prev,e))||Ko(t,e)&&No(t.prev,t,t.next)>0&&No(e.prev,e,e.next)>0)}function No(t,e,r){return (e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function Ko(t,e){return t.x===e.x&&t.y===e.y}function Go(t,e,r,n){var i=Xo(No(t,e,r)),a=Xo(No(t,e,n)),o=Xo(No(r,n,t)),s=Xo(No(r,n,e));return i!==a&&o!==s||!(0!==i||!Zo(t,r,e))||!(0!==a||!Zo(t,n,e))||!(0!==o||!Zo(r,t,n))||!(0!==s||!Zo(r,e,n))}function Zo(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function Xo(t){return t>0?1:t<0?-1:0}function Jo(t,e){return No(t.prev,t,t.next)<0?No(t,e,t.next)>=0&&No(t,t.prev,e)>=0:No(t,e,t.prev)<0||No(t,t.next,e)<0}function Ho(t,e){var r=new Wo(t.i,t.x,t.y),n=new Wo(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function Yo(t,e,r,n){var i=new Wo(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function $o(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ);}function Wo(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1;}function Qo(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}function ts(t,e,r,n,i){!function t(e,r,n,i,a){for(;i>n;){if(i-n>600){var o=i-n+1,s=r-n+1,u=Math.log(o),l=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*l*(o-l)/o)*(s-o/2<0?-1:1);t(e,r,Math.max(n,Math.floor(r-s*l/o+p)),Math.min(i,Math.floor(r+(o-s)*l/o+p)),a);}var c=e[r],h=n,f=i;for(es(e,n,r),a(e[i],c)>0&&es(e,n,i);h<f;){for(es(e,h,f),h++,f--;a(e[h],c)<0;)h++;for(;a(e[f],c)>0;)f--;}0===a(e[n],c)?es(e,n,f):es(e,++f,i),f<=r&&(n=f+1),r<=f&&(i=f-1);}}(t,e,r||0,n||t.length-1,i||rs);}function es(t,e,r){var n=t[e];t[e]=t[r],t[r]=n;}function rs(t,e){return t<e?-1:t>e?1:0}function ns(t,e){var r=t.length;if(r<=1)return [t];for(var n,i,a=[],o=0;o<r;o++){var s=k(t[o]);0!==s&&(t[o].area=Math.abs(s),void 0===i&&(i=s<0),i===s<0?(n&&a.push(n),n=[t[o]]):n.push(t[o]));}if(n&&a.push(n),e>1)for(var u=0;u<a.length;u++)a[u].length<=e||(ts(a[u],e,1,a[u].length-1,is),a[u]=a[u].slice(0,e));return a}function is(t,e){return e.area-t.area}function as(t,e,r){for(var n=r.patternDependencies,i=!1,a=0,o=e;a<o.length;a+=1){var s=o[a].paint.get(t+\"-pattern\");s.isConstant()||(i=!0);var u=s.constantOr(null);u&&(i=!0,n[u.to]=!0,n[u.from]=!0);}return i}function os(t,e,r,n,i){for(var a=i.patternDependencies,o=0,s=e;o<s.length;o+=1){var u=s[o],l=u.paint.get(t+\"-pattern\").value;if(\"constant\"!==l.kind){var p=l.evaluate({zoom:n-1},r,{},i.availableImages),c=l.evaluate({zoom:n},r,{},i.availableImages),h=l.evaluate({zoom:n+1},r,{},i.availableImages);c=c&&c.name?c.name:c,h=h&&h.name?h.name:h,a[p=p&&p.name?p.name:p]=!0,a[c]=!0,a[h]=!0,r.patterns[u.id]={min:p,mid:c,max:h};}}return r}Co.deviation=function(t,e,r,n){var i=e&&e.length,a=Math.abs(Qo(t,0,i?e[0]*r:t.length,r));if(i)for(var o=0,s=e.length;o<s;o++)a-=Math.abs(Qo(t,e[o]*r,o<s-1?e[o+1]*r:t.length,r));var u=0;for(o=0;o<n.length;o+=3){var l=n[o]*r,p=n[o+1]*r,c=n[o+2]*r;u+=Math.abs((t[l]-t[c])*(t[p+1]-t[l+1])-(t[l]-t[p])*(t[c+1]-t[l+1]));}return 0===a&&0===u?0:Math.abs((u-a)/a)},Co.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&r.holes.push(n+=t[i-1].length);}return r},Io.default=zo;var ss=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new Ci,this.indexArray=new ji,this.indexArray2=new Xi,this.programConfigurations=new Va(t.layers,t.zoom),this.segments=new sa,this.segments2=new sa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};ss.prototype.populate=function(t,e,r){this.hasPattern=as(\"fill\",this.layers,e);for(var n=this.layers[0].layout.get(\"fill-sort-key\"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],u=s.feature,l=s.id,p=s.index,c=s.sourceLayerIndex,h=this.layers[0]._featureFilter.needGeometry,f=Ua(u,h);if(this.layers[0]._featureFilter.filter(new si(this.zoom),f,r)){var y=n?n.evaluate(f,{},r,e.availableImages):void 0,d={id:l,properties:u.properties,type:u.type,sourceLayerIndex:c,index:p,geometry:h?f.geometry:Ra(u),patterns:{},sortKey:y};i.push(d);}}n&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var m=0,v=i;m<v.length;m+=1){var g=v[m],x=g.geometry,b=g.index,w=g.sourceLayerIndex;if(this.hasPattern){var _=os(\"fill\",this.layers,g,this.zoom,e);this.patternFeatures.push(_);}else this.addFeature(g,x,b,r,{});e.featureIndex.insert(t[b].feature,x,b,w,this.index);}},ss.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r);},ss.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.patternFeatures;n<i.length;n+=1){var a=i[n];this.addFeature(a,a.geometry,a.index,e,r);}},ss.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},ss.prototype.uploadPending=function(){return !this.uploaded||this.programConfigurations.needsUpload},ss.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ko),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0;},ss.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy());},ss.prototype.addFeature=function(t,e,r,n,i){for(var a=0,o=ns(e,500);a<o.length;a+=1){for(var s=o[a],u=0,l=0,p=s;l<p.length;l+=1)u+=p[l].length;for(var c=this.segments.prepareSegment(u,this.layoutVertexArray,this.indexArray),h=c.vertexLength,f=[],y=[],d=0,m=s;d<m.length;d+=1){var v=m[d];if(0!==v.length){v!==s[0]&&y.push(f.length/2);var g=this.segments2.prepareSegment(v.length,this.layoutVertexArray,this.indexArray2),x=g.vertexLength;this.layoutVertexArray.emplaceBack(v[0].x,v[0].y),this.indexArray2.emplaceBack(x+v.length-1,x),f.push(v[0].x),f.push(v[0].y);for(var b=1;b<v.length;b++)this.layoutVertexArray.emplaceBack(v[b].x,v[b].y),this.indexArray2.emplaceBack(x+b-1,x+b),f.push(v[b].x),f.push(v[b].y);g.vertexLength+=v.length,g.primitiveLength+=v.length;}}for(var w=Io(f,y),_=0;_<w.length;_+=3)this.indexArray.emplaceBack(h+w[_],h+w[_+1],h+w[_+2]);c.vertexLength+=u,c.primitiveLength+=w.length/3;}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n);},On(\"FillBucket\",ss,{omit:[\"layers\",\"patternFeatures\"]});var us=new wi({\"fill-sort-key\":new vi(Et.layout_fill[\"fill-sort-key\"])}),ls={paint:new wi({\"fill-antialias\":new mi(Et.paint_fill[\"fill-antialias\"]),\"fill-opacity\":new vi(Et.paint_fill[\"fill-opacity\"]),\"fill-color\":new vi(Et.paint_fill[\"fill-color\"]),\"fill-outline-color\":new vi(Et.paint_fill[\"fill-outline-color\"]),\"fill-translate\":new mi(Et.paint_fill[\"fill-translate\"]),\"fill-translate-anchor\":new mi(Et.paint_fill[\"fill-translate-anchor\"]),\"fill-pattern\":new gi(Et.paint_fill[\"fill-pattern\"])}),layout:us},ps=function(t){function e(e){t.call(this,e,ls);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r);var n=this.paint._values[\"fill-outline-color\"];\"constant\"===n.value.kind&&void 0===n.value.value&&(this.paint._values[\"fill-outline-color\"]=this.paint._values[\"fill-color\"]);},e.prototype.createBucket=function(t){return new ss(t)},e.prototype.queryRadius=function(){return eo(this.paint.get(\"fill-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o){return Ga(ro(t,this.paint.get(\"fill-translate\"),this.paint.get(\"fill-translate-anchor\"),a.angle,o),n)},e.prototype.isTileClipped=function(){return !0},e}(_i),cs=Ii([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_normal_ed\",components:4,type:\"Int16\"}],4).members,hs=fs;function fs(t,e,r,n,i){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=n,this._values=i,t.readFields(ys,this,e);}function ys(t,e,r){1==t?e.id=r.readVarint():2==t?function(t,e){for(var r=t.readVarint()+t.pos;t.pos<r;){var n=e._keys[t.readVarint()],i=e._values[t.readVarint()];e.properties[n]=i;}}(r,e):3==t?e.type=r.readVarint():4==t&&(e._geometry=r.pos);}function ds(t){for(var e,r,n=0,i=0,a=t.length,o=a-1;i<a;o=i++)n+=((r=t[o]).x-(e=t[i]).x)*(e.y+r.y);return n}fs.types=[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"],fs.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,r=t.readVarint()+t.pos,n=1,a=0,o=0,s=0,u=[];t.pos<r;){if(a<=0){var l=t.readVarint();n=7&l,a=l>>3;}if(a--,1===n||2===n)o+=t.readSVarint(),s+=t.readSVarint(),1===n&&(e&&u.push(e),e=[]),e.push(new i(o,s));else {if(7!==n)throw new Error(\"unknown command \"+n);e&&e.push(e[0].clone());}}return e&&u.push(e),u},fs.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,a=0,o=1/0,s=-1/0,u=1/0,l=-1/0;t.pos<e;){if(n<=0){var p=t.readVarint();r=7&p,n=p>>3;}if(n--,1===r||2===r)(i+=t.readSVarint())<o&&(o=i),i>s&&(s=i),(a+=t.readSVarint())<u&&(u=a),a>l&&(l=a);else if(7!==r)throw new Error(\"unknown command \"+r)}return [o,u,s,l]},fs.prototype.toGeoJSON=function(t,e,r){var n,i,a=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,u=this.loadGeometry(),l=fs.types[this.type];function p(t){for(var e=0;e<t.length;e++){var r=t[e];t[e]=[360*(r.x+o)/a-180,360/Math.PI*Math.atan(Math.exp((180-360*(r.y+s)/a)*Math.PI/180))-90];}}switch(this.type){case 1:var c=[];for(n=0;n<u.length;n++)c[n]=u[n][0];p(u=c);break;case 2:for(n=0;n<u.length;n++)p(u[n]);break;case 3:for(u=function(t){var e=t.length;if(e<=1)return [t];for(var r,n,i=[],a=0;a<e;a++){var o=ds(t[a]);0!==o&&(void 0===n&&(n=o<0),n===o<0?(r&&i.push(r),r=[t[a]]):r.push(t[a]));}return r&&i.push(r),i}(u),n=0;n<u.length;n++)for(i=0;i<u[n].length;i++)p(u[n][i]);}1===u.length?u=u[0]:l=\"Multi\"+l;var h={type:\"Feature\",geometry:{type:l,coordinates:u},properties:this.properties};return \"id\"in this&&(h.id=this.id),h};var ms=vs;function vs(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(gs,this,e),this.length=this._features.length;}function gs(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(function(t){for(var e=null,r=t.readVarint()+t.pos;t.pos<r;){var n=t.readVarint()>>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null;}return e}(r));}function xs(t,e,r){if(3===t){var n=new ms(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n);}}vs.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error(\"feature index out of bounds\");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new hs(this._pbf,e,this.extent,this._keys,this._values)};var bs={VectorTile:function(t,e){this.layers=t.readFields(xs,{},e);},VectorTileFeature:hs,VectorTileLayer:ms},ws=bs.VectorTileFeature.types,_s=Math.pow(2,13);function As(t,e,r,n,i,a,o,s){t.emplaceBack(e,r,2*Math.floor(n*_s)+o,i*_s*2,a*_s*2,Math.round(s));}var Ss=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Pi,this.indexArray=new ji,this.programConfigurations=new Va(t.layers,t.zoom),this.segments=new sa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};function ks(t,e){return t.x===e.x&&(t.x<0||t.x>8192)||t.y===e.y&&(t.y<0||t.y>8192)}Ss.prototype.populate=function(t,e,r){this.features=[],this.hasPattern=as(\"fill-extrusion\",this.layers,e);for(var n=0,i=t;n<i.length;n+=1){var a=i[n],o=a.feature,s=a.id,u=a.index,l=a.sourceLayerIndex,p=this.layers[0]._featureFilter.needGeometry,c=Ua(o,p);if(this.layers[0]._featureFilter.filter(new si(this.zoom),c,r)){var h={id:s,sourceLayerIndex:l,index:u,geometry:p?c.geometry:Ra(o),properties:o.properties,type:o.type,patterns:{}};this.hasPattern?this.features.push(os(\"fill-extrusion\",this.layers,h,this.zoom,e)):this.addFeature(h,h.geometry,u,r,{}),e.featureIndex.insert(o,h.geometry,u,l,this.index,!0);}}},Ss.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.features;n<i.length;n+=1){var a=i[n];this.addFeature(a,a.geometry,a.index,e,r);}},Ss.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r);},Ss.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Ss.prototype.uploadPending=function(){return !this.uploaded||this.programConfigurations.needsUpload},Ss.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,cs),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0;},Ss.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy());},Ss.prototype.addFeature=function(t,e,r,n,i){for(var a=0,o=ns(e,500);a<o.length;a+=1){for(var s=o[a],u=0,l=0,p=s;l<p.length;l+=1)u+=p[l].length;for(var c=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),h=0,f=s;h<f.length;h+=1){var y=f[h];if(0!==y.length&&!((B=y).every((function(t){return t.x<0}))||B.every((function(t){return t.x>8192}))||B.every((function(t){return t.y<0}))||B.every((function(t){return t.y>8192}))))for(var d=0,m=0;m<y.length;m++){var v=y[m];if(m>=1){var g=y[m-1];if(!ks(v,g)){c.vertexLength+4>sa.MAX_VERTEX_ARRAY_LENGTH&&(c=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var x=v.sub(g)._perp()._unit(),b=g.dist(v);d+b>32768&&(d=0),As(this.layoutVertexArray,v.x,v.y,x.x,x.y,0,0,d),As(this.layoutVertexArray,v.x,v.y,x.x,x.y,0,1,d),As(this.layoutVertexArray,g.x,g.y,x.x,x.y,0,0,d+=b),As(this.layoutVertexArray,g.x,g.y,x.x,x.y,0,1,d);var w=c.vertexLength;this.indexArray.emplaceBack(w,w+2,w+1),this.indexArray.emplaceBack(w+1,w+2,w+3),c.vertexLength+=4,c.primitiveLength+=2;}}}}if(c.vertexLength+u>sa.MAX_VERTEX_ARRAY_LENGTH&&(c=this.segments.prepareSegment(u,this.layoutVertexArray,this.indexArray)),\"Polygon\"===ws[t.type]){for(var _=[],A=[],S=c.vertexLength,k=0,I=s;k<I.length;k+=1){var z=I[k];if(0!==z.length){z!==s[0]&&A.push(_.length/2);for(var C=0;C<z.length;C++){var E=z[C];As(this.layoutVertexArray,E.x,E.y,0,0,1,1,0),_.push(E.x),_.push(E.y);}}}for(var P=Io(_,A),M=0;M<P.length;M+=3)this.indexArray.emplaceBack(S+P[M],S+P[M+2],S+P[M+1]);c.primitiveLength+=P.length/3,c.vertexLength+=u;}}var B;this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n);},On(\"FillExtrusionBucket\",Ss,{omit:[\"layers\",\"features\"]});var Is={paint:new wi({\"fill-extrusion-opacity\":new mi(Et[\"paint_fill-extrusion\"][\"fill-extrusion-opacity\"]),\"fill-extrusion-color\":new vi(Et[\"paint_fill-extrusion\"][\"fill-extrusion-color\"]),\"fill-extrusion-translate\":new mi(Et[\"paint_fill-extrusion\"][\"fill-extrusion-translate\"]),\"fill-extrusion-translate-anchor\":new mi(Et[\"paint_fill-extrusion\"][\"fill-extrusion-translate-anchor\"]),\"fill-extrusion-pattern\":new gi(Et[\"paint_fill-extrusion\"][\"fill-extrusion-pattern\"]),\"fill-extrusion-height\":new vi(Et[\"paint_fill-extrusion\"][\"fill-extrusion-height\"]),\"fill-extrusion-base\":new vi(Et[\"paint_fill-extrusion\"][\"fill-extrusion-base\"]),\"fill-extrusion-vertical-gradient\":new mi(Et[\"paint_fill-extrusion\"][\"fill-extrusion-vertical-gradient\"])})},zs=function(t){function e(e){t.call(this,e,Is);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.createBucket=function(t){return new Ss(t)},e.prototype.queryRadius=function(){return eo(this.paint.get(\"fill-extrusion-translate\"))},e.prototype.is3D=function(){return !0},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,o,s,u){var l=ro(t,this.paint.get(\"fill-extrusion-translate\"),this.paint.get(\"fill-extrusion-translate-anchor\"),o.angle,s),p=this.paint.get(\"fill-extrusion-height\").evaluate(e,r),c=this.paint.get(\"fill-extrusion-base\").evaluate(e,r),h=function(t,e,r,n){for(var a=[],o=0,s=t;o<s.length;o+=1){var u=s[o],l=[u.x,u.y,0,1];po(l,l,e),a.push(new i(l[0]/l[3],l[1]/l[3]));}return a}(l,u),f=function(t,e,r,n){for(var a=[],o=[],s=n[8]*e,u=n[9]*e,l=n[10]*e,p=n[11]*e,c=n[8]*r,h=n[9]*r,f=n[10]*r,y=n[11]*r,d=0,m=t;d<m.length;d+=1){for(var v=[],g=[],x=0,b=m[d];x<b.length;x+=1){var w=b[x],_=w.x,A=w.y,S=n[0]*_+n[4]*A+n[12],k=n[1]*_+n[5]*A+n[13],I=n[2]*_+n[6]*A+n[14],z=n[3]*_+n[7]*A+n[15],C=I+l,E=z+p,P=S+c,M=k+h,B=I+f,T=z+y,V=new i((S+s)/E,(k+u)/E);V.z=C/E,v.push(V);var F=new i(P/T,M/T);F.z=B/T,g.push(F);}a.push(v),o.push(g);}return [a,o]}(n,c,p,u);return function(t,e,r){var n=1/0;Ga(r,e)&&(n=Es(r,e[0]));for(var i=0;i<e.length;i++)for(var a=e[i],o=t[i],s=0;s<a.length-1;s++){var u=a[s],l=[u,a[s+1],o[s+1],o[s],u];Na(r,l)&&(n=Math.min(n,Es(r,l)));}return n!==1/0&&n}(f[0],f[1],h)},e}(_i);function Cs(t,e){return t.x*e.x+t.y*e.y}function Es(t,e){if(1===t.length){for(var r,n=0,i=e[n++];!r||i.equals(r);)if(!(r=e[n++]))return 1/0;for(;n<e.length;n++){var a=e[n],o=t[0],s=r.sub(i),u=a.sub(i),l=o.sub(i),p=Cs(s,s),c=Cs(s,u),h=Cs(u,u),f=Cs(l,s),y=Cs(l,u),d=p*h-c*c,m=(h*f-c*y)/d,v=(p*y-c*f)/d,g=i.z*(1-m-v)+r.z*m+a.z*v;if(isFinite(g))return g}return 1/0}for(var x=1/0,b=0,w=e;b<w.length;b+=1)x=Math.min(x,w[b].z);return x}var Ps=Ii([{name:\"a_pos_normal\",components:2,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint8\"}],4).members,Ms=Ii([{name:\"a_uv_x\",components:1,type:\"Float32\"},{name:\"a_split_index\",components:1,type:\"Float32\"}]).members,Bs=bs.VectorTileFeature.types,Ts=Math.cos(Math.PI/180*37.5),Vs=Math.pow(2,14)/.5,Fs=function(t){var e=this;this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.lineClipsArray=[],this.gradients={},this.layers.forEach((function(t){e.gradients[t.id]={};})),this.layoutVertexArray=new Mi,this.layoutVertexArray2=new Bi,this.indexArray=new ji,this.programConfigurations=new Va(t.layers,t.zoom),this.segments=new sa,this.maxLineLength=0,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};Fs.prototype.populate=function(t,e,r){this.hasPattern=as(\"line\",this.layers,e);for(var n=this.layers[0].layout.get(\"line-sort-key\"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],u=s.feature,l=s.id,p=s.index,c=s.sourceLayerIndex,h=this.layers[0]._featureFilter.needGeometry,f=Ua(u,h);if(this.layers[0]._featureFilter.filter(new si(this.zoom),f,r)){var y=n?n.evaluate(f,{},r):void 0,d={id:l,properties:u.properties,type:u.type,sourceLayerIndex:c,index:p,geometry:h?f.geometry:Ra(u),patterns:{},sortKey:y};i.push(d);}}n&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var m=0,v=i;m<v.length;m+=1){var g=v[m],x=g.geometry,b=g.index,w=g.sourceLayerIndex;if(this.hasPattern){var _=os(\"line\",this.layers,g,this.zoom,e);this.patternFeatures.push(_);}else this.addFeature(g,x,b,r,{});e.featureIndex.insert(t[b].feature,x,b,w,this.index);}},Fs.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r);},Fs.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.patternFeatures;n<i.length;n+=1){var a=i[n];this.addFeature(a,a.geometry,a.index,e,r);}},Fs.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Fs.prototype.uploadPending=function(){return !this.uploaded||this.programConfigurations.needsUpload},Fs.prototype.upload=function(t){this.uploaded||(0!==this.layoutVertexArray2.length&&(this.layoutVertexBuffer2=t.createVertexBuffer(this.layoutVertexArray2,Ms)),this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Ps),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0;},Fs.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy());},Fs.prototype.lineFeatureClips=function(t){if(t.properties&&t.properties.hasOwnProperty(\"mapbox_clip_start\")&&t.properties.hasOwnProperty(\"mapbox_clip_end\"))return {start:+t.properties.mapbox_clip_start,end:+t.properties.mapbox_clip_end}},Fs.prototype.addFeature=function(t,e,r,n,i){var a=this.layers[0].layout,o=a.get(\"line-join\").evaluate(t,{}),s=a.get(\"line-cap\"),u=a.get(\"line-miter-limit\"),l=a.get(\"line-round-limit\");this.lineClips=this.lineFeatureClips(t);for(var p=0,c=e;p<c.length;p+=1)this.addLine(c[p],t,o,s,u,l);this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n);},Fs.prototype.addLine=function(t,e,r,n,i,a){if(this.distance=0,this.scaledDistance=0,this.totalDistance=0,this.lineClips){this.lineClipsArray.push(this.lineClips);for(var o=0;o<t.length-1;o++)this.totalDistance+=t[o].dist(t[o+1]);this.updateScaledDistance(),this.maxLineLength=Math.max(this.maxLineLength,this.totalDistance);}for(var s=\"Polygon\"===Bs[e.type],u=t.length;u>=2&&t[u-1].equals(t[u-2]);)u--;for(var l=0;l<u-1&&t[l].equals(t[l+1]);)l++;if(!(u<(s?3:2))){\"bevel\"===r&&(i=1.05);var p,c=this.overscaling<=16?122880/(512*this.overscaling):0,h=this.segments.prepareSegment(10*u,this.layoutVertexArray,this.indexArray),f=void 0,y=void 0,d=void 0,m=void 0;this.e1=this.e2=-1,s&&(m=t[l].sub(p=t[u-2])._unit()._perp());for(var v=l;v<u;v++)if(!(y=v===u-1?s?t[l+1]:void 0:t[v+1])||!t[v].equals(y)){m&&(d=m),p&&(f=p),p=t[v],m=y?y.sub(p)._unit()._perp():d;var g=(d=d||m).add(m);0===g.x&&0===g.y||g._unit();var x=d.x*m.x+d.y*m.y,b=g.x*m.x+g.y*m.y,w=0!==b?1/b:1/0,_=2*Math.sqrt(2-2*b),A=b<Ts&&f&&y,S=d.x*m.y-d.y*m.x>0;if(A&&v>l){var k=p.dist(f);if(k>2*c){var I=p.sub(p.sub(f)._mult(c/k)._round());this.updateDistance(f,I),this.addCurrentVertex(I,d,0,0,h),f=I;}}var z=f&&y,C=z?r:s?\"butt\":n;if(z&&\"round\"===C&&(w<a?C=\"miter\":w<=2&&(C=\"fakeround\")),\"miter\"===C&&w>i&&(C=\"bevel\"),\"bevel\"===C&&(w>2&&(C=\"flipbevel\"),w<i&&(C=\"miter\")),f&&this.updateDistance(f,p),\"miter\"===C)g._mult(w),this.addCurrentVertex(p,g,0,0,h);else if(\"flipbevel\"===C){if(w>100)g=m.mult(-1);else {var E=w*d.add(m).mag()/d.sub(m).mag();g._perp()._mult(E*(S?-1:1));}this.addCurrentVertex(p,g,0,0,h),this.addCurrentVertex(p,g.mult(-1),0,0,h);}else if(\"bevel\"===C||\"fakeround\"===C){var P=-Math.sqrt(w*w-1),M=S?P:0,B=S?0:P;if(f&&this.addCurrentVertex(p,d,M,B,h),\"fakeround\"===C)for(var T=Math.round(180*_/Math.PI/20),V=1;V<T;V++){var F=V/T;if(.5!==F){var D=F-.5;F+=F*D*(F-1)*((1.0904+x*(x*(3.55645-1.43519*x)-3.2452))*D*D+(.848013+x*(.215638*x-1.06021)));}var L=m.sub(d)._mult(F)._add(d)._unit()._mult(S?-1:1);this.addHalfVertex(p,L.x,L.y,!1,S,0,h);}y&&this.addCurrentVertex(p,m,-M,-B,h);}else if(\"butt\"===C)this.addCurrentVertex(p,g,0,0,h);else if(\"square\"===C){var O=f?1:-1;this.addCurrentVertex(p,g,O,O,h);}else \"round\"===C&&(f&&(this.addCurrentVertex(p,d,0,0,h),this.addCurrentVertex(p,d,1,1,h,!0)),y&&(this.addCurrentVertex(p,m,-1,-1,h,!0),this.addCurrentVertex(p,m,0,0,h)));if(A&&v<u-1){var R=p.dist(y);if(R>2*c){var U=p.add(y.sub(p)._mult(c/R)._round());this.updateDistance(p,U),this.addCurrentVertex(U,m,0,0,h),p=U;}}}}},Fs.prototype.addCurrentVertex=function(t,e,r,n,i,a){void 0===a&&(a=!1);var o=e.y*n-e.x,s=-e.y-e.x*n;this.addHalfVertex(t,e.x+e.y*r,e.y-e.x*r,a,!1,r,i),this.addHalfVertex(t,o,s,a,!0,-n,i),this.distance>Vs/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,r,n,i,a));},Fs.prototype.addHalfVertex=function(t,e,r,n,i,a,o){var s=.5*(this.lineClips?this.scaledDistance*(Vs-1):this.scaledDistance);this.layoutVertexArray.emplaceBack((t.x<<1)+(n?1:0),(t.y<<1)+(i?1:0),Math.round(63*e)+128,Math.round(63*r)+128,1+(0===a?0:a<0?-1:1)|(63&s)<<2,s>>6),this.lineClips&&this.layoutVertexArray2.emplaceBack((this.scaledDistance-this.lineClips.start)/(this.lineClips.end-this.lineClips.start),this.lineClipsArray.length);var u=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,u),o.primitiveLength++),i?this.e2=u:this.e1=u;},Fs.prototype.updateScaledDistance=function(){this.scaledDistance=this.lineClips?this.lineClips.start+(this.lineClips.end-this.lineClips.start)*this.distance/this.totalDistance:this.distance;},Fs.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.updateScaledDistance();},On(\"LineBucket\",Fs,{omit:[\"layers\",\"patternFeatures\"]});var Ds=new wi({\"line-cap\":new mi(Et.layout_line[\"line-cap\"]),\"line-join\":new vi(Et.layout_line[\"line-join\"]),\"line-miter-limit\":new mi(Et.layout_line[\"line-miter-limit\"]),\"line-round-limit\":new mi(Et.layout_line[\"line-round-limit\"]),\"line-sort-key\":new vi(Et.layout_line[\"line-sort-key\"])}),Ls={paint:new wi({\"line-opacity\":new vi(Et.paint_line[\"line-opacity\"]),\"line-color\":new vi(Et.paint_line[\"line-color\"]),\"line-translate\":new mi(Et.paint_line[\"line-translate\"]),\"line-translate-anchor\":new mi(Et.paint_line[\"line-translate-anchor\"]),\"line-width\":new vi(Et.paint_line[\"line-width\"]),\"line-gap-width\":new vi(Et.paint_line[\"line-gap-width\"]),\"line-offset\":new vi(Et.paint_line[\"line-offset\"]),\"line-blur\":new vi(Et.paint_line[\"line-blur\"]),\"line-dasharray\":new xi(Et.paint_line[\"line-dasharray\"]),\"line-pattern\":new gi(Et.paint_line[\"line-pattern\"]),\"line-gradient\":new bi(Et.paint_line[\"line-gradient\"])}),layout:Ds},Os=new(function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new si(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n,i){return r=h({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,i)},e}(vi))(Ls.paint.properties[\"line-width\"].specification);Os.useIntegerZoom=!0;var Rs=function(t){function e(e){t.call(this,e,Ls),this.gradientVersion=0;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){\"line-gradient\"===t&&(this.stepInterpolant=this._transitionablePaint._values[\"line-gradient\"].value.expression._styleExpression.expression instanceof Ne,this.gradientVersion=(this.gradientVersion+1)%s);},e.prototype.gradientExpression=function(){return this._transitionablePaint._values[\"line-gradient\"].value.expression},e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r),this.paint._values[\"line-floorwidth\"]=Os.possiblyEvaluate(this._transitioningPaint._values[\"line-width\"].value,e);},e.prototype.createBucket=function(t){return new Fs(t)},e.prototype.queryRadius=function(t){var e=t,r=Us(to(\"line-width\",this,e),to(\"line-gap-width\",this,e)),n=to(\"line-offset\",this,e);return r/2+Math.abs(n)+eo(this.paint.get(\"line-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,o,s){var u=ro(t,this.paint.get(\"line-translate\"),this.paint.get(\"line-translate-anchor\"),o.angle,s),l=s/2*Us(this.paint.get(\"line-width\").evaluate(e,r),this.paint.get(\"line-gap-width\").evaluate(e,r)),p=this.paint.get(\"line-offset\").evaluate(e,r);return p&&(n=function(t,e){for(var r=[],n=new i(0,0),a=0;a<t.length;a++){for(var o=t[a],s=[],u=0;u<o.length;u++){var l=o[u],p=o[u+1],c=0===u?n:l.sub(o[u-1])._unit()._perp(),h=u===o.length-1?n:p.sub(l)._unit()._perp(),f=c._add(h)._unit();f._mult(1/(f.x*h.x+f.y*h.y)),s.push(f._mult(e)._add(l));}r.push(s);}return r}(n,p*s)),function(t,e,r){for(var n=0;n<e.length;n++){var i=e[n];if(t.length>=3)for(var a=0;a<i.length;a++)if(Wa(t,i[a]))return !0;if(Za(t,i,r))return !0}return !1}(u,n,l)},e.prototype.isTileClipped=function(){return !0},e}(_i);function Us(t,e){return e>0?e+2*t:t}var js=Ii([{name:\"a_pos_offset\",components:4,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint16\"},{name:\"a_pixeloffset\",components:4,type:\"Int16\"}],4),qs=Ii([{name:\"a_projected_pos\",components:3,type:\"Float32\"}],4),Ns=(Ii([{name:\"a_fade_opacity\",components:1,type:\"Uint32\"}],4),Ii([{name:\"a_placed\",components:2,type:\"Uint8\"},{name:\"a_shift\",components:2,type:\"Float32\"}])),Ks=(Ii([{type:\"Int16\",name:\"anchorPointX\"},{type:\"Int16\",name:\"anchorPointY\"},{type:\"Int16\",name:\"x1\"},{type:\"Int16\",name:\"y1\"},{type:\"Int16\",name:\"x2\"},{type:\"Int16\",name:\"y2\"},{type:\"Uint32\",name:\"featureIndex\"},{type:\"Uint16\",name:\"sourceLayerIndex\"},{type:\"Uint16\",name:\"bucketIndex\"}]),Ii([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_anchor_pos\",components:2,type:\"Int16\"},{name:\"a_extrude\",components:2,type:\"Int16\"}],4)),Gs=Ii([{name:\"a_pos\",components:2,type:\"Float32\"},{name:\"a_radius\",components:1,type:\"Float32\"},{name:\"a_flags\",components:2,type:\"Int16\"}],4);function Zs(t,e,r){return t.sections.forEach((function(t){t.text=function(t,e,r){var n=e.layout.get(\"text-transform\").evaluate(r,{});return \"uppercase\"===n?t=t.toLocaleUpperCase():\"lowercase\"===n&&(t=t.toLocaleLowerCase()),oi.applyArabicShaping&&(t=oi.applyArabicShaping(t)),t}(t.text,e,r);})),t}Ii([{name:\"triangle\",components:3,type:\"Uint16\"}]),Ii([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Uint16\",name:\"glyphStartIndex\"},{type:\"Uint16\",name:\"numGlyphs\"},{type:\"Uint32\",name:\"vertexStartIndex\"},{type:\"Uint32\",name:\"lineStartIndex\"},{type:\"Uint32\",name:\"lineLength\"},{type:\"Uint16\",name:\"segment\"},{type:\"Uint16\",name:\"lowerSize\"},{type:\"Uint16\",name:\"upperSize\"},{type:\"Float32\",name:\"lineOffsetX\"},{type:\"Float32\",name:\"lineOffsetY\"},{type:\"Uint8\",name:\"writingMode\"},{type:\"Uint8\",name:\"placedOrientation\"},{type:\"Uint8\",name:\"hidden\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Int16\",name:\"associatedIconIndex\"}]),Ii([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Int16\",name:\"rightJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"centerJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"leftJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedTextSymbolIndex\"},{type:\"Int16\",name:\"placedIconSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedIconSymbolIndex\"},{type:\"Uint16\",name:\"key\"},{type:\"Uint16\",name:\"textBoxStartIndex\"},{type:\"Uint16\",name:\"textBoxEndIndex\"},{type:\"Uint16\",name:\"verticalTextBoxStartIndex\"},{type:\"Uint16\",name:\"verticalTextBoxEndIndex\"},{type:\"Uint16\",name:\"iconBoxStartIndex\"},{type:\"Uint16\",name:\"iconBoxEndIndex\"},{type:\"Uint16\",name:\"verticalIconBoxStartIndex\"},{type:\"Uint16\",name:\"verticalIconBoxEndIndex\"},{type:\"Uint16\",name:\"featureIndex\"},{type:\"Uint16\",name:\"numHorizontalGlyphVertices\"},{type:\"Uint16\",name:\"numVerticalGlyphVertices\"},{type:\"Uint16\",name:\"numIconVertices\"},{type:\"Uint16\",name:\"numVerticalIconVertices\"},{type:\"Uint16\",name:\"useRuntimeCollisionCircles\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Float32\",name:\"textBoxScale\"},{type:\"Float32\",components:2,name:\"textOffset\"},{type:\"Float32\",name:\"collisionCircleDiameter\"}]),Ii([{type:\"Float32\",name:\"offsetX\"}]),Ii([{type:\"Int16\",name:\"x\"},{type:\"Int16\",name:\"y\"},{type:\"Int16\",name:\"tileUnitDistanceFromAnchor\"}]);var Xs={\"!\":\"︕\",\"#\":\"＃\",$:\"＄\",\"%\":\"％\",\"&\":\"＆\",\"(\":\"︵\",\")\":\"︶\",\"*\":\"＊\",\"+\":\"＋\",\",\":\"︐\",\"-\":\"︲\",\".\":\"・\",\"/\":\"／\",\":\":\"︓\",\";\":\"︔\",\"<\":\"︿\",\"=\":\"＝\",\">\":\"﹀\",\"?\":\"︖\",\"@\":\"＠\",\"[\":\"﹇\",\"\\\\\":\"＼\",\"]\":\"﹈\",\"^\":\"＾\",_:\"︳\",\"`\":\"｀\",\"{\":\"︷\",\"|\":\"―\",\"}\":\"︸\",\"~\":\"～\",\"¢\":\"￠\",\"£\":\"￡\",\"¥\":\"￥\",\"¦\":\"￤\",\"¬\":\"￢\",\"¯\":\"￣\",\"–\":\"︲\",\"—\":\"︱\",\"‘\":\"﹃\",\"’\":\"﹄\",\"“\":\"﹁\",\"”\":\"﹂\",\"…\":\"︙\",\"‧\":\"・\",\"₩\":\"￦\",\"、\":\"︑\",\"。\":\"︒\",\"〈\":\"︿\",\"〉\":\"﹀\",\"《\":\"︽\",\"》\":\"︾\",\"「\":\"﹁\",\"」\":\"﹂\",\"『\":\"﹃\",\"』\":\"﹄\",\"【\":\"︻\",\"】\":\"︼\",\"〔\":\"︹\",\"〕\":\"︺\",\"〖\":\"︗\",\"〗\":\"︘\",\"！\":\"︕\",\"（\":\"︵\",\"）\":\"︶\",\"，\":\"︐\",\"－\":\"︲\",\"．\":\"・\",\"：\":\"︓\",\"；\":\"︔\",\"＜\":\"︿\",\"＞\":\"﹀\",\"？\":\"︖\",\"［\":\"﹇\",\"］\":\"﹈\",\"＿\":\"︳\",\"｛\":\"︷\",\"｜\":\"―\",\"｝\":\"︸\",\"｟\":\"︵\",\"｠\":\"︶\",\"｡\":\"︒\",\"｢\":\"﹁\",\"｣\":\"﹂\"},Js=function(t,e,r,n,i){var a,o,s=8*i-n-1,u=(1<<s)-1,l=u>>1,p=-7,c=r?i-1:0,h=r?-1:1,f=t[e+c];for(c+=h,a=f&(1<<-p)-1,f>>=-p,p+=s;p>0;a=256*a+t[e+c],c+=h,p-=8);for(o=a&(1<<-p)-1,a>>=-p,p+=n;p>0;o=256*o+t[e+c],c+=h,p-=8);if(0===a)a=1-l;else {if(a===u)return o?NaN:1/0*(f?-1:1);o+=Math.pow(2,n),a-=l;}return (f?-1:1)*o*Math.pow(2,a-n)},Hs=function(t,e,r,n,i,a){var o,s,u,l=8*a-i-1,p=(1<<l)-1,c=p>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:a-1,y=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=p):(o=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-o))<1&&(o--,u*=2),(e+=o+c>=1?h/u:h*Math.pow(2,1-c))*u>=2&&(o++,u/=2),o+c>=p?(s=0,o=p):o+c>=1?(s=(e*u-1)*Math.pow(2,i),o+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,i),o=0));i>=8;t[r+f]=255&s,f+=y,s/=256,i-=8);for(o=o<<i|s,l+=i;l>0;t[r+f]=255&o,f+=y,o/=256,l-=8);t[r+f-y]|=128*d;},Ys=$s;function $s(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length;}$s.Varint=0,$s.Fixed64=1,$s.Bytes=2,$s.Fixed32=5;var Ws=\"undefined\"==typeof TextDecoder?null:new TextDecoder(\"utf8\");function Qs(t){return t.type===$s.Bytes?t.readVarint()+t.pos:t.pos+1}function tu(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function eu(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i];}function ru(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r]);}function nu(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r]);}function iu(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r]);}function au(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r]);}function ou(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r]);}function su(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r]);}function uu(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r]);}function lu(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r]);}function pu(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r]);}function cu(t,e){return (t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function hu(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24;}function fu(t,e){return (t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}function yu(t,e,r){1===t&&r.readMessage(du,e);}function du(t,e,r){if(3===t){var n=r.readMessage(mu,{}),i=n.width,a=n.height,o=n.left,s=n.top,u=n.advance;e.push({id:n.id,bitmap:new go({width:i+6,height:a+6},n.bitmap),metrics:{width:i,height:a,left:o,top:s,advance:u}});}}function mu(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint());}function vu(t){for(var e=0,r=0,n=0,i=t;n<i.length;n+=1){var a=i[n];e+=a.w*a.h,r=Math.max(r,a.w);}t.sort((function(t,e){return e.h-t.h}));for(var o=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],s=0,u=0,l=0,p=t;l<p.length;l+=1)for(var c=p[l],h=o.length-1;h>=0;h--){var f=o[h];if(!(c.w>f.w||c.h>f.h)){if(c.x=f.x,c.y=f.y,u=Math.max(u,c.y+c.h),s=Math.max(s,c.x+c.w),c.w===f.w&&c.h===f.h){var y=o.pop();h<o.length&&(o[h]=y);}else c.h===f.h?(f.x+=c.w,f.w-=c.w):c.w===f.w?(f.y+=c.h,f.h-=c.h):(o.push({x:f.x+c.w,y:f.y,w:f.w-c.w,h:c.h}),f.y+=c.h,f.h-=c.h);break}}return {w:s,h:u,fill:e/(s*u)||0}}$s.prototype={destroy:function(){this.buf=null;},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),i=n>>3,a=this.pos;this.type=7&n,t(i,e,this),this.pos===a&&this.skip(n);}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=cu(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=fu(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=cu(this.buf,this.pos)+4294967296*cu(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=cu(this.buf,this.pos)+4294967296*fu(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=Js(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Js(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,i,a=r.buf;if(n=(112&(i=a[r.pos++]))>>4,i<128)return tu(t,n,e);if(n|=(127&(i=a[r.pos++]))<<3,i<128)return tu(t,n,e);if(n|=(127&(i=a[r.pos++]))<<10,i<128)return tu(t,n,e);if(n|=(127&(i=a[r.pos++]))<<17,i<128)return tu(t,n,e);if(n|=(127&(i=a[r.pos++]))<<24,i<128)return tu(t,n,e);if(n|=(1&(i=a[r.pos++]))<<31,i<128)return tu(t,n,e);throw new Error(\"Expected varint not more than 10 bytes\")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Ws?function(t,e,r){return Ws.decode(t.subarray(e,r))}(this.buf,e,t):function(t,e,r){for(var n=\"\",i=e;i<r;){var a,o,s,u=t[i],l=null,p=u>239?4:u>223?3:u>191?2:1;if(i+p>r)break;1===p?u<128&&(l=u):2===p?128==(192&(a=t[i+1]))&&(l=(31&u)<<6|63&a)<=127&&(l=null):3===p?(o=t[i+2],128==(192&(a=t[i+1]))&&128==(192&o)&&((l=(15&u)<<12|(63&a)<<6|63&o)<=2047||l>=55296&&l<=57343)&&(l=null)):4===p&&(o=t[i+2],s=t[i+3],128==(192&(a=t[i+1]))&&128==(192&o)&&128==(192&s)&&((l=(15&u)<<18|(63&a)<<12|(63&o)<<6|63&s)<=65535||l>=1114112)&&(l=null)),null===l?(l=65533,p=1):l>65535&&(l-=65536,n+=String.fromCharCode(l>>>10&1023|55296),l=56320|1023&l),n+=String.fromCharCode(l),i+=p;}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==$s.Bytes)return t.push(this.readVarint(e));var r=Qs(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){if(this.type!==$s.Bytes)return t.push(this.readSVarint());var e=Qs(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){if(this.type!==$s.Bytes)return t.push(this.readBoolean());var e=Qs(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){if(this.type!==$s.Bytes)return t.push(this.readFloat());var e=Qs(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){if(this.type!==$s.Bytes)return t.push(this.readDouble());var e=Qs(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){if(this.type!==$s.Bytes)return t.push(this.readFixed32());var e=Qs(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){if(this.type!==$s.Bytes)return t.push(this.readSFixed32());var e=Qs(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){if(this.type!==$s.Bytes)return t.push(this.readFixed64());var e=Qs(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){if(this.type!==$s.Bytes)return t.push(this.readSFixed64());var e=Qs(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===$s.Varint)for(;this.buf[this.pos++]>127;);else if(e===$s.Bytes)this.pos=this.readVarint()+this.pos;else if(e===$s.Fixed32)this.pos+=4;else {if(e!==$s.Fixed64)throw new Error(\"Unimplemented type: \"+e);this.pos+=8;}},writeTag:function(t,e){this.writeVarint(t<<3|e);},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e;}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),hu(this.buf,t,this.pos),this.pos+=4;},writeSFixed32:function(t){this.realloc(4),hu(this.buf,t,this.pos),this.pos+=4;},writeFixed64:function(t){this.realloc(8),hu(this.buf,-1&t,this.pos),hu(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8;},writeSFixed64:function(t){this.realloc(8),hu(this.buf,-1&t,this.pos),hu(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8;},writeVarint:function(t){(t=+t||0)>268435455||t<0?function(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error(\"Given varint doesn't fit into 10 bytes\");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,r.buf[r.pos]=127&(t>>>=7);}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))));}(n,e);}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))));},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t);},writeBoolean:function(t){this.writeVarint(Boolean(t));},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,i,a=0;a<e.length;a++){if((n=e.charCodeAt(a))>55295&&n<57344){if(!i){n>56319||a+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null;}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128);}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&eu(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r;},writeFloat:function(t){this.realloc(4),Hs(this.buf,t,this.pos,!0,23,4),this.pos+=4;},writeDouble:function(t){this.realloc(8),Hs(this.buf,t,this.pos,!0,52,8),this.pos+=8;},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r];},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&eu(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n;},writeMessage:function(t,e,r){this.writeTag(t,$s.Bytes),this.writeRawMessage(e,r);},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,ru,e);},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,nu,e);},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,ou,e);},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,iu,e);},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,au,e);},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,su,e);},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,uu,e);},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,lu,e);},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,pu,e);},writeBytesField:function(t,e){this.writeTag(t,$s.Bytes),this.writeBytes(e);},writeFixed32Field:function(t,e){this.writeTag(t,$s.Fixed32),this.writeFixed32(e);},writeSFixed32Field:function(t,e){this.writeTag(t,$s.Fixed32),this.writeSFixed32(e);},writeFixed64Field:function(t,e){this.writeTag(t,$s.Fixed64),this.writeFixed64(e);},writeSFixed64Field:function(t,e){this.writeTag(t,$s.Fixed64),this.writeSFixed64(e);},writeVarintField:function(t,e){this.writeTag(t,$s.Varint),this.writeVarint(e);},writeSVarintField:function(t,e){this.writeTag(t,$s.Varint),this.writeSVarint(e);},writeStringField:function(t,e){this.writeTag(t,$s.Bytes),this.writeString(e);},writeFloatField:function(t,e){this.writeTag(t,$s.Fixed32),this.writeFloat(e);},writeDoubleField:function(t,e){this.writeTag(t,$s.Fixed64),this.writeDouble(e);},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e));}};var gu=function(t,e){var r=e.pixelRatio,n=e.version,i=e.stretchX,a=e.stretchY,o=e.content;this.paddedRect=t,this.pixelRatio=r,this.stretchX=i,this.stretchY=a,this.content=o,this.version=n;},xu={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};xu.tl.get=function(){return [this.paddedRect.x+1,this.paddedRect.y+1]},xu.br.get=function(){return [this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},xu.tlbr.get=function(){return this.tl.concat(this.br)},xu.displaySize.get=function(){return [(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(gu.prototype,xu);var bu=function(t,e){var r={},n={};this.haveRenderCallbacks=[];var i=[];this.addImages(t,r,i),this.addImages(e,n,i);var a=vu(i),o=new xo({width:a.w||1,height:a.h||1});for(var s in t){var u=t[s],l=r[s].paddedRect;xo.copy(u.data,o,{x:0,y:0},{x:l.x+1,y:l.y+1},u.data);}for(var p in e){var c=e[p],h=n[p].paddedRect,f=h.x+1,y=h.y+1,d=c.data.width,m=c.data.height;xo.copy(c.data,o,{x:0,y:0},{x:f,y:y},c.data),xo.copy(c.data,o,{x:0,y:m-1},{x:f,y:y-1},{width:d,height:1}),xo.copy(c.data,o,{x:0,y:0},{x:f,y:y+m},{width:d,height:1}),xo.copy(c.data,o,{x:d-1,y:0},{x:f-1,y:y},{width:1,height:m}),xo.copy(c.data,o,{x:0,y:0},{x:f+d,y:y},{width:1,height:m});}this.image=o,this.iconPositions=r,this.patternPositions=n;};bu.prototype.addImages=function(t,e,r){for(var n in t){var i=t[n],a={x:0,y:0,w:i.data.width+2,h:i.data.height+2};r.push(a),e[n]=new gu(a,i),i.hasRenderCallback&&this.haveRenderCallbacks.push(n);}},bu.prototype.patchUpdatedImages=function(t,e){for(var r in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e),this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e);},bu.prototype.patchUpdatedImage=function(t,e,r){if(t&&e&&t.version!==e.version){t.version=e.version;var n=t.tl;r.update(e.data,void 0,{x:n[0],y:n[1]});}},On(\"ImagePosition\",gu),On(\"ImageAtlas\",bu);var wu={horizontal:1,vertical:2,horizontalOnly:3},_u=function(){this.scale=1,this.fontStack=\"\",this.imageName=null;};_u.forText=function(t,e){var r=new _u;return r.scale=t||1,r.fontStack=e,r},_u.forImage=function(t){var e=new _u;return e.imageName=t,e};var Au=function(){this.text=\"\",this.sectionIndex=[],this.sections=[],this.imageSectionID=null;};function Su(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d){var m,v=Au.fromFeature(t,i);c===wu.vertical&&v.verticalizePunctuation();var g=oi.processBidirectionalText,x=oi.processStyledBidirectionalText;if(g&&1===v.sections.length){m=[];for(var b=0,w=g(v.toString(),Mu(v,l,a,e,n,f,y));b<w.length;b+=1){var _=w[b],A=new Au;A.text=_,A.sections=v.sections;for(var S=0;S<_.length;S++)A.sectionIndex.push(0);m.push(A);}}else if(x){m=[];for(var k=0,I=x(v.text,v.sectionIndex,Mu(v,l,a,e,n,f,y));k<I.length;k+=1){var z=I[k],C=new Au;C.text=z[0],C.sectionIndex=z[1],C.sections=v.sections,m.push(C);}}else m=function(t,e){for(var r=[],n=t.text,i=0,a=0,o=e;a<o.length;a+=1){var s=o[a];r.push(t.substring(i,s)),i=s;}return i<n.length&&r.push(t.substring(i,n.length)),r}(v,Mu(v,l,a,e,n,f,y));var E=[],P={positionedLines:E,text:v.toString(),top:p[1],bottom:p[1],left:p[0],right:p[0],writingMode:c,iconsInText:!1,verticalizable:!1};return function(t,e,r,n,i,a,o,s,u,l,p,c){for(var h=0,f=-17,y=0,d=0,m=\"right\"===s?1:\"left\"===s?0:.5,v=0,g=0,x=i;g<x.length;g+=1){var b=x[g];b.trim();var w=b.getMaxScale(),_=24*(w-1),A={positionedGlyphs:[],lineOffset:0};t.positionedLines[v]=A;var S=A.positionedGlyphs,k=0;if(b.length()){for(var I=0;I<b.length();I++){var z=b.getSection(I),C=b.getSectionIndex(I),E=b.getCharCode(I),P=0,M=null,B=null,T=null,V=24,F=!(u===wu.horizontal||!p&&!Xn(E)||p&&(ku[E]||(K=E,Gn.Arabic(K)||Gn[\"Arabic Supplement\"](K)||Gn[\"Arabic Extended-A\"](K)||Gn[\"Arabic Presentation Forms-A\"](K)||Gn[\"Arabic Presentation Forms-B\"](K))));if(z.imageName){var D=n[z.imageName];if(!D)continue;T=z.imageName,t.iconsInText=t.iconsInText||!0,B=D.paddedRect;var L=D.displaySize;z.scale=24*z.scale/c,P=_+(24-L[1]*z.scale),V=(M={width:L[0],height:L[1],left:1,top:-3,advance:F?L[1]:L[0]}).advance;var O=F?L[0]*z.scale-24*w:L[1]*z.scale-24*w;O>0&&O>k&&(k=O);}else {var R=r[z.fontStack],U=R&&R[E];if(U&&U.rect)B=U.rect,M=U.metrics;else {var j=e[z.fontStack],q=j&&j[E];if(!q)continue;M=q.metrics;}P=24*(w-z.scale);}F?(t.verticalizable=!0,S.push({glyph:E,imageName:T,x:h,y:f+P,vertical:F,scale:z.scale,fontStack:z.fontStack,sectionIndex:C,metrics:M,rect:B}),h+=V*z.scale+l):(S.push({glyph:E,imageName:T,x:h,y:f+P,vertical:F,scale:z.scale,fontStack:z.fontStack,sectionIndex:C,metrics:M,rect:B}),h+=M.advance*z.scale+l);}0!==S.length&&(y=Math.max(h-l,y),Tu(S,0,S.length-1,m,k)),h=0;var N=a*w+k;A.lineOffset=Math.max(k,_),f+=N,d=Math.max(N,d),++v;}else f+=a,++v;}var K,G=f- -17,Z=Bu(o),X=Z.horizontalAlign,J=Z.verticalAlign;(function(t,e,r,n,i,a,o,s,u){var l,p=(e-r)*i;l=a!==o?-s*n- -17:(-n*u+.5)*o;for(var c=0,h=t;c<h.length;c+=1)for(var f=0,y=h[c].positionedGlyphs;f<y.length;f+=1){var d=y[f];d.x+=p,d.y+=l;}})(t.positionedLines,m,X,J,y,d,a,G,i.length),t.top+=-J*G,t.bottom=t.top+G,t.left+=-X*y,t.right=t.left+y;}(P,e,r,n,m,o,s,u,c,l,h,d),!function(t){for(var e=0,r=t;e<r.length;e+=1)if(0!==r[e].positionedGlyphs.length)return !1;return !0}(E)&&P}Au.fromFeature=function(t,e){for(var r=new Au,n=0;n<t.sections.length;n++){var i=t.sections[n];i.image?r.addImageSection(i):r.addTextSection(i,e);}return r},Au.prototype.length=function(){return this.text.length},Au.prototype.getSection=function(t){return this.sections[this.sectionIndex[t]]},Au.prototype.getSectionIndex=function(t){return this.sectionIndex[t]},Au.prototype.getCharCode=function(t){return this.text.charCodeAt(t)},Au.prototype.verticalizePunctuation=function(){this.text=function(t){for(var e=\"\",r=0;r<t.length;r++){var n=t.charCodeAt(r+1)||null,i=t.charCodeAt(r-1)||null;e+=n&&Jn(n)&&!Xs[t[r+1]]||i&&Jn(i)&&!Xs[t[r-1]]||!Xs[t[r]]?t[r]:Xs[t[r]];}return e}(this.text);},Au.prototype.trim=function(){for(var t=0,e=0;e<this.text.length&&ku[this.text.charCodeAt(e)];e++)t++;for(var r=this.text.length,n=this.text.length-1;n>=0&&n>=t&&ku[this.text.charCodeAt(n)];n--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r);},Au.prototype.substring=function(t,e){var r=new Au;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},Au.prototype.toString=function(){return this.text},Au.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce((function(e,r){return Math.max(e,t.sections[r].scale)}),0)},Au.prototype.addTextSection=function(t,e){this.text+=t.text,this.sections.push(_u.forText(t.scale,t.fontStack||e));for(var r=this.sections.length-1,n=0;n<t.text.length;++n)this.sectionIndex.push(r);},Au.prototype.addImageSection=function(t){var e=t.image?t.image.name:\"\";if(0!==e.length){var r=this.getNextImageSectionCharCode();r?(this.text+=String.fromCharCode(r),this.sections.push(_u.forImage(e)),this.sectionIndex.push(this.sections.length-1)):A(\"Reached maximum number of images 6401\");}else A(\"Can't add FormattedSection with an empty image.\");},Au.prototype.getNextImageSectionCharCode=function(){return this.imageSectionID?this.imageSectionID>=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)};var ku={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},Iu={};function zu(t,e,r,n,i,a){if(e.imageName){var o=n[e.imageName];return o?o.displaySize[0]*e.scale*24/a+i:0}var s=r[e.fontStack],u=s&&s[t];return u?u.metrics.advance*e.scale+i:0}function Cu(t,e,r,n){var i=Math.pow(t-e,2);return n?t<e?i/2:2*i:i+Math.abs(r)*r}function Eu(t,e,r){var n=0;return 10===t&&(n-=1e4),r&&(n+=150),40!==t&&65288!==t||(n+=50),41!==e&&65289!==e||(n+=50),n}function Pu(t,e,r,n,i,a){for(var o=null,s=Cu(e,r,i,a),u=0,l=n;u<l.length;u+=1){var p=l[u],c=Cu(e-p.x,r,i,a)+p.badness;c<=s&&(o=p,s=c);}return {index:t,x:e,priorBreak:o,badness:s}}function Mu(t,e,r,n,i,a,o){if(\"point\"!==a)return [];if(!t)return [];for(var s,u=[],l=function(t,e,r,n,i,a){for(var o=0,s=0;s<t.length();s++){var u=t.getSection(s);o+=zu(t.getCharCode(s),u,n,i,e,a);}return o/Math.max(1,Math.ceil(o/r))}(t,e,r,n,i,o),p=t.text.indexOf(\"​\")>=0,c=0,h=0;h<t.length();h++){var f=t.getSection(h),y=t.getCharCode(h);if(ku[y]||(c+=zu(y,f,n,i,e,o)),h<t.length()-1){var d=!((s=y)<11904||!(Gn[\"Bopomofo Extended\"](s)||Gn.Bopomofo(s)||Gn[\"CJK Compatibility Forms\"](s)||Gn[\"CJK Compatibility Ideographs\"](s)||Gn[\"CJK Compatibility\"](s)||Gn[\"CJK Radicals Supplement\"](s)||Gn[\"CJK Strokes\"](s)||Gn[\"CJK Symbols and Punctuation\"](s)||Gn[\"CJK Unified Ideographs Extension A\"](s)||Gn[\"CJK Unified Ideographs\"](s)||Gn[\"Enclosed CJK Letters and Months\"](s)||Gn[\"Halfwidth and Fullwidth Forms\"](s)||Gn.Hiragana(s)||Gn[\"Ideographic Description Characters\"](s)||Gn[\"Kangxi Radicals\"](s)||Gn[\"Katakana Phonetic Extensions\"](s)||Gn.Katakana(s)||Gn[\"Vertical Forms\"](s)||Gn[\"Yi Radicals\"](s)||Gn[\"Yi Syllables\"](s)));(Iu[y]||d||f.imageName)&&u.push(Pu(h+1,c,l,u,Eu(y,t.getCharCode(h+1),d&&p),!1));}}return function t(e){return e?t(e.priorBreak).concat(e.index):[]}(Pu(t.length(),c,l,u,0,!0))}function Bu(t){var e=.5,r=.5;switch(t){case\"right\":case\"top-right\":case\"bottom-right\":e=1;break;case\"left\":case\"top-left\":case\"bottom-left\":e=0;}switch(t){case\"bottom\":case\"bottom-right\":case\"bottom-left\":r=1;break;case\"top\":case\"top-right\":case\"top-left\":r=0;}return {horizontalAlign:e,verticalAlign:r}}function Tu(t,e,r,n,i){if(n||i)for(var a=t[r],o=(t[r].x+a.metrics.advance*a.scale)*n,s=e;s<=r;s++)t[s].x-=o,t[s].y+=i;}function Vu(t,e,r,n,i,a){var o,s=t.image;if(s.content){var u=s.content,l=s.pixelRatio||1;o=[u[0]/l,u[1]/l,s.displaySize[0]-u[2]/l,s.displaySize[1]-u[3]/l];}var p,c,h,f,y=e.left*a,d=e.right*a;\"width\"===r||\"both\"===r?(f=i[0]+y-n[3],c=i[0]+d+n[1]):c=(f=i[0]+(y+d-s.displaySize[0])/2)+s.displaySize[0];var m=e.top*a,v=e.bottom*a;return \"height\"===r||\"both\"===r?(p=i[1]+m-n[0],h=i[1]+v+n[2]):h=(p=i[1]+(m+v-s.displaySize[1])/2)+s.displaySize[1],{image:s,top:p,right:c,bottom:h,left:f,collisionPadding:o}}Iu[10]=!0,Iu[32]=!0,Iu[38]=!0,Iu[40]=!0,Iu[41]=!0,Iu[43]=!0,Iu[45]=!0,Iu[47]=!0,Iu[173]=!0,Iu[183]=!0,Iu[8203]=!0,Iu[8208]=!0,Iu[8211]=!0,Iu[8231]=!0;var Fu=function(t){function e(e,r,n,i){t.call(this,e,r),this.angle=n,void 0!==i&&(this.segment=i);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(i);function Du(t,e){var r=e.expression;if(\"constant\"===r.kind)return {kind:\"constant\",layoutSize:r.evaluate(new si(t+1))};if(\"source\"===r.kind)return {kind:\"source\"};for(var n=r.zoomStops,i=r.interpolationType,a=0;a<n.length&&n[a]<=t;)a++;for(var o=a=Math.max(0,a-1);o<n.length&&n[o]<t+1;)o++;o=Math.min(n.length-1,o);var s=n[a],u=n[o];return \"composite\"===r.kind?{kind:\"composite\",minZoom:s,maxZoom:u,interpolationType:i}:{kind:\"camera\",minZoom:s,maxZoom:u,minSize:r.evaluate(new si(s)),maxSize:r.evaluate(new si(u)),interpolationType:i}}function Lu(t,e,r){var n=e.uSize,i=r.lowerSize;return \"source\"===t.kind?i/128:\"composite\"===t.kind?Ke(i/128,r.upperSize/128,e.uSizeT):n}function Ou(t,e){var r=0,n=0;if(\"constant\"===t.kind)n=t.layoutSize;else if(\"source\"!==t.kind){var i=t.interpolationType,a=i?p(ar.interpolationFactor(i,e,t.minZoom,t.maxZoom),0,1):0;\"camera\"===t.kind?n=Ke(t.minSize,t.maxSize,a):r=a;}return {uSizeT:r,uSize:n}}On(\"Anchor\",Fu);var Ru=Object.freeze({__proto__:null,getSizeData:Du,evaluateSizeForFeature:Lu,evaluateSizeForZoom:Ou,SIZE_PACK_FACTOR:128});function Uu(t,e,r,n,i){if(void 0===e.segment)return !0;for(var a=e,o=e.segment+1,s=0;s>-r/2;){if(--o<0)return !1;s-=t[o].dist(a),a=t[o];}s+=t[o].dist(t[o+1]),o++;for(var u=[],l=0;s<r/2;){var p=t[o],c=t[o+1];if(!c)return !1;var h=t[o-1].angleTo(p)-p.angleTo(c);for(h=Math.abs((h+3*Math.PI)%(2*Math.PI)-Math.PI),u.push({distance:s,angleDelta:h}),l+=h;s-u[0].distance>n;)l-=u.shift().angleDelta;if(l>i)return !1;o++,s+=p.dist(c);}return !0}function ju(t){for(var e=0,r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e}function qu(t,e,r){return t?.6*e*r:0}function Nu(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function Ku(t,e,r,n,i,a){for(var o=qu(r,i,a),s=Nu(r,n)*a,u=0,l=ju(t)/2,p=0;p<t.length-1;p++){var c=t[p],h=t[p+1],f=c.dist(h);if(u+f>l){var y=(l-u)/f,d=Ke(c.x,h.x,y),m=Ke(c.y,h.y,y),v=new Fu(d,m,h.angleTo(c),p);return v._round(),!o||Uu(t,v,s,o,e)?v:void 0}u+=f;}}function Gu(t,e,r,n,i,a,o,s,u){var l=qu(n,a,o),p=Nu(n,i),c=p*o,h=0===t[0].x||t[0].x===u||0===t[0].y||t[0].y===u;return e-c<e/4&&(e=c+e/4),function t(e,r,n,i,a,o,s,u,l){for(var p=o/2,c=ju(e),h=0,f=r-n,y=[],d=0;d<e.length-1;d++){for(var m=e[d],v=e[d+1],g=m.dist(v),x=v.angleTo(m);f+n<h+g;){var b=((f+=n)-h)/g,w=Ke(m.x,v.x,b),_=Ke(m.y,v.y,b);if(w>=0&&w<l&&_>=0&&_<l&&f-p>=0&&f+p<=c){var A=new Fu(w,_,x,d);A._round(),i&&!Uu(e,A,o,i,a)||y.push(A);}}h+=g;}return u||y.length||s||(y=t(e,h/2,n,i,a,o,s,!0,l)),y}(t,h?e/2*s%e:(p/2+2*a)*o*s%e,e,l,r,c,h,!1,u)}function Zu(t,e,r,n,a){for(var o=[],s=0;s<t.length;s++)for(var u=t[s],l=void 0,p=0;p<u.length-1;p++){var c=u[p],h=u[p+1];c.x<e&&h.x<e||(c.x<e?c=new i(e,c.y+(e-c.x)/(h.x-c.x)*(h.y-c.y))._round():h.x<e&&(h=new i(e,c.y+(e-c.x)/(h.x-c.x)*(h.y-c.y))._round()),c.y<r&&h.y<r||(c.y<r?c=new i(c.x+(r-c.y)/(h.y-c.y)*(h.x-c.x),r)._round():h.y<r&&(h=new i(c.x+(r-c.y)/(h.y-c.y)*(h.x-c.x),r)._round()),c.x>=n&&h.x>=n||(c.x>=n?c=new i(n,c.y+(n-c.x)/(h.x-c.x)*(h.y-c.y))._round():h.x>=n&&(h=new i(n,c.y+(n-c.x)/(h.x-c.x)*(h.y-c.y))._round()),c.y>=a&&h.y>=a||(c.y>=a?c=new i(c.x+(a-c.y)/(h.y-c.y)*(h.x-c.x),a)._round():h.y>=a&&(h=new i(c.x+(a-c.y)/(h.y-c.y)*(h.x-c.x),a)._round()),l&&c.equals(l[l.length-1])||o.push(l=[c]),l.push(h)))));}return o}function Xu(t,e,r,n){var a=[],o=t.image,s=o.pixelRatio,u=o.paddedRect.w-2,l=o.paddedRect.h-2,p=t.right-t.left,c=t.bottom-t.top,h=o.stretchX||[[0,u]],f=o.stretchY||[[0,l]],y=function(t,e){return t+e[1]-e[0]},d=h.reduce(y,0),m=f.reduce(y,0),v=u-d,g=l-m,x=0,b=d,w=0,_=m,A=0,S=v,k=0,I=g;if(o.content&&n){var z=o.content;x=Ju(h,0,z[0]),w=Ju(f,0,z[1]),b=Ju(h,z[0],z[2]),_=Ju(f,z[1],z[3]),A=z[0]-x,k=z[1]-w,S=z[2]-z[0]-b,I=z[3]-z[1]-_;}var C=function(n,a,u,l){var h=Yu(n.stretch-x,b,p,t.left),f=$u(n.fixed-A,S,n.stretch,d),y=Yu(a.stretch-w,_,c,t.top),v=$u(a.fixed-k,I,a.stretch,m),g=Yu(u.stretch-x,b,p,t.left),z=$u(u.fixed-A,S,u.stretch,d),C=Yu(l.stretch-w,_,c,t.top),E=$u(l.fixed-k,I,l.stretch,m),P=new i(h,y),M=new i(g,y),B=new i(g,C),T=new i(h,C),V=new i(f/s,v/s),F=new i(z/s,E/s),D=e*Math.PI/180;if(D){var L=Math.sin(D),O=Math.cos(D),R=[O,-L,L,O];P._matMult(R),M._matMult(R),T._matMult(R),B._matMult(R);}var U=n.stretch+n.fixed,j=a.stretch+a.fixed;return {tl:P,tr:M,bl:T,br:B,tex:{x:o.paddedRect.x+1+U,y:o.paddedRect.y+1+j,w:u.stretch+u.fixed-U,h:l.stretch+l.fixed-j},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:V,pixelOffsetBR:F,minFontScaleX:S/s/p,minFontScaleY:I/s/c,isSDF:r}};if(n&&(o.stretchX||o.stretchY))for(var E=Hu(h,v,d),P=Hu(f,g,m),M=0;M<E.length-1;M++)for(var B=E[M],T=E[M+1],V=0;V<P.length-1;V++)a.push(C(B,P[V],T,P[V+1]));else a.push(C({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:u+1},{fixed:0,stretch:l+1}));return a}function Ju(t,e,r){for(var n=0,i=0,a=t;i<a.length;i+=1){var o=a[i];n+=Math.max(e,Math.min(r,o[1]))-Math.max(e,Math.min(r,o[0]));}return n}function Hu(t,e,r){for(var n=[{fixed:-1,stretch:0}],i=0,a=t;i<a.length;i+=1){var o=a[i],s=o[0],u=o[1],l=n[n.length-1];n.push({fixed:s-l.stretch,stretch:l.stretch}),n.push({fixed:s-l.stretch,stretch:l.stretch+(u-s)});}return n.push({fixed:e+1,stretch:r}),n}function Yu(t,e,r,n){return t/e*r+n}function $u(t,e,r,n){return t-e*r/n}var Wu=function(t,e,r,n,a,o,s,u,l,p){if(this.boxStartIndex=t.length,l){var c=o.top,h=o.bottom,f=o.collisionPadding;f&&(c-=f[1],h+=f[3]);var y=h-c;y>0&&(y=Math.max(10,y),this.circleDiameter=y);}else {var d=o.top*s-u,m=o.bottom*s+u,v=o.left*s-u,g=o.right*s+u,x=o.collisionPadding;if(x&&(v-=x[0]*s,d-=x[1]*s,g+=x[2]*s,m+=x[3]*s),p){var b=new i(v,d),w=new i(g,d),_=new i(v,m),A=new i(g,m),S=p*Math.PI/180;b._rotate(S),w._rotate(S),_._rotate(S),A._rotate(S),v=Math.min(b.x,w.x,_.x,A.x),g=Math.max(b.x,w.x,_.x,A.x),d=Math.min(b.y,w.y,_.y,A.y),m=Math.max(b.y,w.y,_.y,A.y);}t.emplaceBack(e.x,e.y,v,d,g,m,r,n,a);}this.boxEndIndex=t.length;},Qu=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=tl),this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r);};function tl(t,e){return t<e?-1:t>e?1:0}function el(t,e,r){void 0===e&&(e=1),void 0===r&&(r=!1);for(var n=1/0,a=1/0,o=-1/0,s=-1/0,u=t[0],l=0;l<u.length;l++){var p=u[l];(!l||p.x<n)&&(n=p.x),(!l||p.y<a)&&(a=p.y),(!l||p.x>o)&&(o=p.x),(!l||p.y>s)&&(s=p.y);}var c=Math.min(o-n,s-a),h=c/2,f=new Qu([],rl);if(0===c)return new i(n,a);for(var y=n;y<o;y+=c)for(var d=a;d<s;d+=c)f.push(new nl(y+h,d+h,h,t));for(var m=function(t){for(var e=0,r=0,n=0,i=t[0],a=0,o=i.length,s=o-1;a<o;s=a++){var u=i[a],l=i[s],p=u.x*l.y-l.x*u.y;r+=(u.x+l.x)*p,n+=(u.y+l.y)*p,e+=3*p;}return new nl(r/e,n/e,0,t)}(t),v=f.length;f.length;){var g=f.pop();(g.d>m.d||!m.d)&&(m=g,r&&console.log(\"found best %d after %d probes\",Math.round(1e4*g.d)/1e4,v)),g.max-m.d<=e||(f.push(new nl(g.p.x-(h=g.h/2),g.p.y-h,h,t)),f.push(new nl(g.p.x+h,g.p.y-h,h,t)),f.push(new nl(g.p.x-h,g.p.y+h,h,t)),f.push(new nl(g.p.x+h,g.p.y+h,h,t)),v+=4);}return r&&(console.log(\"num probes: \"+v),console.log(\"best distance: \"+m.d)),m.p}function rl(t,e){return e.max-t.max}function nl(t,e,r,n){this.p=new i(t,e),this.h=r,this.d=function(t,e){for(var r=!1,n=1/0,i=0;i<e.length;i++)for(var a=e[i],o=0,s=a.length,u=s-1;o<s;u=o++){var l=a[o],p=a[u];l.y>t.y!=p.y>t.y&&t.x<(p.x-l.x)*(t.y-l.y)/(p.y-l.y)+l.x&&(r=!r),n=Math.min(n,Ya(t,l,p));}return (r?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2;}Qu.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1);},Qu.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},Qu.prototype.peek=function(){return this.data[0]},Qu.prototype._up=function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,a=e[i];if(r(n,a)>=0)break;e[t]=a,t=i;}e[t]=n;},Qu.prototype._down=function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t<n;){var a=1+(t<<1),o=e[a],s=a+1;if(s<this.length&&r(e[s],o)<0&&(a=s,o=e[s]),r(o,i)>=0)break;e[t]=o,t=a;}e[t]=i;};var il=Number.POSITIVE_INFINITY;function al(t,e){return e[1]!==il?function(t,e,r){var n=0,i=0;switch(e=Math.abs(e),r=Math.abs(r),t){case\"top-right\":case\"top-left\":case\"top\":i=r-7;break;case\"bottom-right\":case\"bottom-left\":case\"bottom\":i=7-r;}switch(t){case\"top-right\":case\"bottom-right\":case\"right\":n=-e;break;case\"top-left\":case\"bottom-left\":case\"left\":n=e;}return [n,i]}(t,e[0],e[1]):function(t,e){var r=0,n=0;e<0&&(e=0);var i=e/Math.sqrt(2);switch(t){case\"top-right\":case\"top-left\":n=i-7;break;case\"bottom-right\":case\"bottom-left\":n=7-i;break;case\"bottom\":n=7-e;break;case\"top\":n=e-7;}switch(t){case\"top-right\":case\"bottom-right\":r=-i;break;case\"top-left\":case\"bottom-left\":r=i;break;case\"left\":r=e;break;case\"right\":r=-e;}return [r,n]}(t,e[0])}function ol(t){switch(t){case\"right\":case\"top-right\":case\"bottom-right\":return \"right\";case\"left\":case\"top-left\":case\"bottom-left\":return \"left\"}return \"center\"}function sl(t,e,r,n,a,o,s,u,l,p,c,h,f,y,d){var m=function(t,e,r,n,a,o,s,u){for(var l=n.layout.get(\"text-rotate\").evaluate(o,{})*Math.PI/180,p=[],c=0,h=e.positionedLines;c<h.length;c+=1)for(var f=h[c],y=0,d=f.positionedGlyphs;y<d.length;y+=1){var m=d[y];if(m.rect){var v=m.rect||{},g=4,x=!0,b=1,w=0,_=(a||u)&&m.vertical,A=m.metrics.advance*m.scale/2;if(u&&e.verticalizable&&(w=f.lineOffset/2-(m.imageName?-(24-m.metrics.width*m.scale)/2:24*(m.scale-1))),m.imageName){var S=s[m.imageName];x=S.sdf,g=1/(b=S.pixelRatio);}var k=a?[m.x+A,m.y]:[0,0],I=a?[0,0]:[m.x+A+r[0],m.y+r[1]-w],z=[0,0];_&&(z=I,I=[0,0]);var C=(m.metrics.left-g)*m.scale-A+I[0],E=(-m.metrics.top-g)*m.scale+I[1],P=C+v.w*m.scale/b,M=E+v.h*m.scale/b,B=new i(C,E),T=new i(P,E),V=new i(C,M),F=new i(P,M);if(_){var D=new i(-A,A- -17),L=-Math.PI/2,O=12-A,R=new i(22-O,-(m.imageName?O:0)),U=new(Function.prototype.bind.apply(i,[null].concat(z)));B._rotateAround(L,D)._add(R)._add(U),T._rotateAround(L,D)._add(R)._add(U),V._rotateAround(L,D)._add(R)._add(U),F._rotateAround(L,D)._add(R)._add(U);}if(l){var j=Math.sin(l),q=Math.cos(l),N=[q,-j,j,q];B._matMult(N),T._matMult(N),V._matMult(N),F._matMult(N);}var K=new i(0,0),G=new i(0,0);p.push({tl:B,tr:T,bl:V,br:F,tex:v,writingMode:e.writingMode,glyphOffset:k,sectionIndex:m.sectionIndex,isSDF:x,pixelOffsetTL:K,pixelOffsetBR:G,minFontScaleX:0,minFontScaleY:0});}}return p}(0,r,u,a,o,s,n,t.allowVerticalPlacement),v=t.textSizeData,g=null;\"source\"===v.kind?(g=[128*a.layout.get(\"text-size\").evaluate(s,{})])[0]>32640&&A(t.layerIds[0]+': Value for \"text-size\" is >= 255. Reduce your \"text-size\".'):\"composite\"===v.kind&&((g=[128*y.compositeTextSizes[0].evaluate(s,{},d),128*y.compositeTextSizes[1].evaluate(s,{},d)])[0]>32640||g[1]>32640)&&A(t.layerIds[0]+': Value for \"text-size\" is >= 255. Reduce your \"text-size\".'),t.addSymbols(t.text,m,g,u,o,s,p,e,l.lineStartIndex,l.lineLength,f,d);for(var x=0,b=c;x<b.length;x+=1)h[b[x]]=t.text.placedSymbolArray.length-1;return 4*m.length}function ul(t){for(var e in t)return t[e];return null}function ll(t,e,r,n){var i=t.compareText;if(e in i){for(var a=i[e],o=a.length-1;o>=0;o--)if(n.dist(a[o])<r)return !0}else i[e]=[];return i[e].push(n),!1}var pl=bs.VectorTileFeature.types,cl=[{name:\"a_fade_opacity\",components:1,type:\"Uint8\",offset:0}];function hl(t,e,r,n,i,a,o,s,u,l,p,c,h){var f=s?Math.min(32640,Math.round(s[0])):0,y=s?Math.min(32640,Math.round(s[1])):0;t.emplaceBack(e,r,Math.round(32*n),Math.round(32*i),a,o,(f<<1)+(u?1:0),y,16*l,16*p,256*c,256*h);}function fl(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r);}function yl(t){for(var e=0,r=t.sections;e<r.length;e+=1)if($n(r[e].text))return !0;return !1}var dl=function(t){this.layoutVertexArray=new Vi,this.indexArray=new ji,this.programConfigurations=t,this.segments=new sa,this.dynamicLayoutVertexArray=new Fi,this.opacityVertexArray=new Di,this.placedSymbolArray=new Qi;};dl.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length&&0===this.indexArray.length&&0===this.dynamicLayoutVertexArray.length&&0===this.opacityVertexArray.length},dl.prototype.upload=function(t,e,r,n){this.isEmpty()||(r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,js.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,qs.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,cl,!0),this.opacityVertexBuffer.itemSize=1),(r||n)&&this.programConfigurations.upload(t));},dl.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy());},On(\"SymbolBuffers\",dl);var ml=function(t,e,r){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new r,this.segments=new sa,this.collisionVertexArray=new Ui;};ml.prototype.upload=function(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,Ns.members,!0);},ml.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy());},On(\"CollisionBuffers\",ml);var vl=function(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasPattern=!1,this.hasRTLText=!1,this.sortKeyRanges=[],this.collisionCircleArray=[],this.placementInvProjMatrix=oo([]),this.placementViewportMatrix=oo([]);var e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=Du(this.zoom,e[\"text-size\"]),this.iconSizeData=Du(this.zoom,e[\"icon-size\"]);var r=this.layers[0].layout,n=r.get(\"symbol-sort-key\"),i=r.get(\"symbol-z-order\");this.canOverlap=r.get(\"text-allow-overlap\")||r.get(\"icon-allow-overlap\")||r.get(\"text-ignore-placement\")||r.get(\"icon-ignore-placement\"),this.sortFeaturesByKey=\"viewport-y\"!==i&&void 0!==n.constantOr(1),this.sortFeaturesByY=(\"viewport-y\"===i||\"auto\"===i&&!this.sortFeaturesByKey)&&this.canOverlap,\"point\"===r.get(\"symbol-placement\")&&(this.writingModes=r.get(\"text-writing-mode\").map((function(t){return wu[t]}))),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id})),this.sourceID=t.sourceID;};vl.prototype.createArrays=function(){this.text=new dl(new Va(this.layers,this.zoom,(function(t){return /^text/.test(t)}))),this.icon=new dl(new Va(this.layers,this.zoom,(function(t){return /^icon/.test(t)}))),this.glyphOffsetArray=new ra,this.lineVertexArray=new na,this.symbolInstances=new ea;},vl.prototype.calculateGlyphDependencies=function(t,e,r,n,i){for(var a=0;a<t.length;a++)if(e[t.charCodeAt(a)]=!0,(r||n)&&i){var o=Xs[t.charAt(a)];o&&(e[o.charCodeAt(0)]=!0);}},vl.prototype.populate=function(t,e,r){var n=this.layers[0],i=n.layout,a=i.get(\"text-font\"),o=i.get(\"text-field\"),s=i.get(\"icon-image\"),u=(\"constant\"!==o.value.kind||o.value.value instanceof ne&&!o.value.value.isEmpty()||o.value.value.toString().length>0)&&(\"constant\"!==a.value.kind||a.value.value.length>0),l=\"constant\"!==s.value.kind||!!s.value.value||Object.keys(s.parameters).length>0,p=i.get(\"symbol-sort-key\");if(this.features=[],u||l){for(var c=e.iconDependencies,h=e.glyphDependencies,f=e.availableImages,y=new si(this.zoom),d=0,m=t;d<m.length;d+=1){var v=m[d],g=v.feature,x=v.id,b=v.index,w=v.sourceLayerIndex,_=n._featureFilter.needGeometry,A=Ua(g,_);if(n._featureFilter.filter(y,A,r)){_||(A.geometry=Ra(g));var S=void 0;if(u){var k=n.getValueAndResolveTokens(\"text-field\",A,r,f),I=ne.factory(k);yl(I)&&(this.hasRTLText=!0),(!this.hasRTLText||\"unavailable\"===ii()||this.hasRTLText&&oi.isParsed())&&(S=Zs(I,n,A));}var z=void 0;if(l){var C=n.getValueAndResolveTokens(\"icon-image\",A,r,f);z=C instanceof ie?C:ie.fromString(C);}if(S||z){var E=this.sortFeaturesByKey?p.evaluate(A,{},r):void 0;if(this.features.push({id:x,text:S,icon:z,index:b,sourceLayerIndex:w,geometry:A.geometry,properties:g.properties,type:pl[g.type],sortKey:E}),z&&(c[z.name]=!0),S){var P=a.evaluate(A,{},r).join(\",\"),M=\"map\"===i.get(\"text-rotation-alignment\")&&\"point\"!==i.get(\"symbol-placement\");this.allowVerticalPlacement=this.writingModes&&this.writingModes.indexOf(wu.vertical)>=0;for(var B=0,T=S.sections;B<T.length;B+=1){var V=T[B];if(V.image)c[V.image.name]=!0;else {var F=Zn(S.toString()),D=V.fontStack||P,L=h[D]=h[D]||{};this.calculateGlyphDependencies(V.text,L,M,this.allowVerticalPlacement,F);}}}}}}\"line\"===i.get(\"symbol-placement\")&&(this.features=function(t){var e={},r={},n=[],i=0;function a(e){n.push(t[e]),i++;}function o(t,e,i){var a=r[t];return delete r[t],r[e]=a,n[a].geometry[0].pop(),n[a].geometry[0]=n[a].geometry[0].concat(i[0]),a}function s(t,r,i){var a=e[r];return delete e[r],e[t]=a,n[a].geometry[0].shift(),n[a].geometry[0]=i[0].concat(n[a].geometry[0]),a}function u(t,e,r){var n=r?e[0][e[0].length-1]:e[0][0];return t+\":\"+n.x+\":\"+n.y}for(var l=0;l<t.length;l++){var p=t[l],c=p.geometry,h=p.text?p.text.toString():null;if(h){var f=u(h,c),y=u(h,c,!0);if(f in r&&y in e&&r[f]!==e[y]){var d=s(f,y,c),m=o(f,y,n[d].geometry);delete e[f],delete r[y],r[u(h,n[m].geometry,!0)]=m,n[d].geometry=null;}else f in r?o(f,y,c):y in e?s(f,y,c):(a(l),e[f]=i-1,r[y]=i-1);}else a(l);}return n.filter((function(t){return t.geometry}))}(this.features)),this.sortFeaturesByKey&&this.features.sort((function(t,e){return t.sortKey-e.sortKey}));}},vl.prototype.update=function(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,r),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,r));},vl.prototype.isEmpty=function(){return 0===this.symbolInstances.length&&!this.hasRTLText},vl.prototype.uploadPending=function(){return !this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},vl.prototype.upload=function(t){!this.uploaded&&this.hasDebugData()&&(this.textCollisionBox.upload(t),this.iconCollisionBox.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0;},vl.prototype.destroyDebugData=function(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy();},vl.prototype.destroy=function(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()&&this.destroyDebugData();},vl.prototype.addToLineVertexArray=function(t,e){var r=this.lineVertexArray.length;if(void 0!==t.segment){for(var n=t.dist(e[t.segment+1]),i=t.dist(e[t.segment]),a={},o=t.segment+1;o<e.length;o++)a[o]={x:e[o].x,y:e[o].y,tileUnitDistanceFromAnchor:n},o<e.length-1&&(n+=e[o+1].dist(e[o]));for(var s=t.segment||0;s>=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var u=0;u<e.length;u++){var l=a[u];this.lineVertexArray.emplaceBack(l.x,l.y,l.tileUnitDistanceFromAnchor);}}return {lineStartIndex:r,lineLength:this.lineVertexArray.length-r}},vl.prototype.addSymbols=function(t,e,r,n,i,a,o,s,u,l,p,c){for(var h=t.indexArray,f=t.layoutVertexArray,y=t.segments.prepareSegment(4*e.length,f,h,this.canOverlap?a.sortKey:void 0),d=this.glyphOffsetArray.length,m=y.vertexLength,v=this.allowVerticalPlacement&&o===wu.vertical?Math.PI/2:0,g=a.text&&a.text.sections,x=0;x<e.length;x++){var b=e[x],w=b.tl,_=b.tr,A=b.bl,S=b.br,k=b.tex,I=b.pixelOffsetTL,z=b.pixelOffsetBR,C=b.minFontScaleX,E=b.minFontScaleY,P=b.glyphOffset,M=b.isSDF,B=b.sectionIndex,T=y.vertexLength,V=P[1];hl(f,s.x,s.y,w.x,V+w.y,k.x,k.y,r,M,I.x,I.y,C,E),hl(f,s.x,s.y,_.x,V+_.y,k.x+k.w,k.y,r,M,z.x,I.y,C,E),hl(f,s.x,s.y,A.x,V+A.y,k.x,k.y+k.h,r,M,I.x,z.y,C,E),hl(f,s.x,s.y,S.x,V+S.y,k.x+k.w,k.y+k.h,r,M,z.x,z.y,C,E),fl(t.dynamicLayoutVertexArray,s,v),h.emplaceBack(T,T+1,T+2),h.emplaceBack(T+1,T+2,T+3),y.vertexLength+=4,y.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(P[0]),x!==e.length-1&&B===e[x+1].sectionIndex||t.programConfigurations.populatePaintArrays(f.length,a,a.index,{},c,g&&g[B]);}t.placedSymbolArray.emplaceBack(s.x,s.y,d,this.glyphOffsetArray.length-d,m,u,l,s.segment,r?r[0]:0,r?r[1]:0,n[0],n[1],o,0,!1,0,p);},vl.prototype._addCollisionDebugVertex=function(t,e,r,n,i,a){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,n,i,Math.round(a.x),Math.round(a.y))},vl.prototype.addCollisionDebugVertices=function(t,e,r,n,a,o,s){var u=a.segments.prepareSegment(4,a.layoutVertexArray,a.indexArray),l=u.vertexLength,p=a.layoutVertexArray,c=a.collisionVertexArray,h=s.anchorX,f=s.anchorY;this._addCollisionDebugVertex(p,c,o,h,f,new i(t,e)),this._addCollisionDebugVertex(p,c,o,h,f,new i(r,e)),this._addCollisionDebugVertex(p,c,o,h,f,new i(r,n)),this._addCollisionDebugVertex(p,c,o,h,f,new i(t,n)),u.vertexLength+=4;var y=a.indexArray;y.emplaceBack(l,l+1),y.emplaceBack(l+1,l+2),y.emplaceBack(l+2,l+3),y.emplaceBack(l+3,l),u.primitiveLength+=4;},vl.prototype.addDebugCollisionBoxes=function(t,e,r,n){for(var i=t;i<e;i++){var a=this.collisionBoxArray.get(i);this.addCollisionDebugVertices(a.x1,a.y1,a.x2,a.y2,n?this.textCollisionBox:this.iconCollisionBox,a.anchorPoint,r);}},vl.prototype.generateCollisionDebugBuffers=function(){this.hasDebugData()&&this.destroyDebugData(),this.textCollisionBox=new ml(Oi,Ks.members,Xi),this.iconCollisionBox=new ml(Oi,Ks.members,Xi);for(var t=0;t<this.symbolInstances.length;t++){var e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e,!1),this.addDebugCollisionBoxes(e.verticalIconBoxStartIndex,e.verticalIconBoxEndIndex,e,!1);}},vl.prototype._deserializeCollisionBoxesForSymbol=function(t,e,r,n,i,a,o,s,u){for(var l={},p=e;p<r;p++){var c=t.get(p);l.textBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},l.textFeatureIndex=c.featureIndex;break}for(var h=n;h<i;h++){var f=t.get(h);l.verticalTextBox={x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},l.verticalTextFeatureIndex=f.featureIndex;break}for(var y=a;y<o;y++){var d=t.get(y);l.iconBox={x1:d.x1,y1:d.y1,x2:d.x2,y2:d.y2,anchorPointX:d.anchorPointX,anchorPointY:d.anchorPointY},l.iconFeatureIndex=d.featureIndex;break}for(var m=s;m<u;m++){var v=t.get(m);l.verticalIconBox={x1:v.x1,y1:v.y1,x2:v.x2,y2:v.y2,anchorPointX:v.anchorPointX,anchorPointY:v.anchorPointY},l.verticalIconFeatureIndex=v.featureIndex;break}return l},vl.prototype.deserializeCollisionBoxes=function(t){this.collisionArrays=[];for(var e=0;e<this.symbolInstances.length;e++){var r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex,r.verticalIconBoxStartIndex,r.verticalIconBoxEndIndex));}},vl.prototype.hasTextData=function(){return this.text.segments.get().length>0},vl.prototype.hasIconData=function(){return this.icon.segments.get().length>0},vl.prototype.hasDebugData=function(){return this.textCollisionBox&&this.iconCollisionBox},vl.prototype.hasTextCollisionBoxData=function(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0},vl.prototype.hasIconCollisionBoxData=function(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0},vl.prototype.addIndicesForPlacedSymbol=function(t,e){for(var r=t.placedSymbolArray.get(e),n=r.vertexStartIndex+4*r.numGlyphs,i=r.vertexStartIndex;i<n;i+=4)t.indexArray.emplaceBack(i,i+1,i+2),t.indexArray.emplaceBack(i+1,i+2,i+3);},vl.prototype.getSortedSymbolIndexes=function(t){if(this.sortedAngle===t&&void 0!==this.symbolInstanceIndexes)return this.symbolInstanceIndexes;for(var e=Math.sin(t),r=Math.cos(t),n=[],i=[],a=[],o=0;o<this.symbolInstances.length;++o){a.push(o);var s=this.symbolInstances.get(o);n.push(0|Math.round(e*s.anchorX+r*s.anchorY)),i.push(s.featureIndex);}return a.sort((function(t,e){return n[t]-n[e]||i[e]-i[t]})),a},vl.prototype.addToSortKeyRanges=function(t,e){var r=this.sortKeyRanges[this.sortKeyRanges.length-1];r&&r.sortKey===e?r.symbolInstanceEnd=t+1:this.sortKeyRanges.push({sortKey:e,symbolInstanceStart:t,symbolInstanceEnd:t+1});},vl.prototype.sortFeatures=function(t){var e=this;if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var r=0,n=this.symbolInstanceIndexes;r<n.length;r+=1){var i=this.symbolInstances.get(n[r]);this.featureSortOrder.push(i.featureIndex),[i.rightJustifiedTextSymbolIndex,i.centerJustifiedTextSymbolIndex,i.leftJustifiedTextSymbolIndex].forEach((function(t,r,n){t>=0&&n.indexOf(t)===r&&e.addIndicesForPlacedSymbol(e.text,t);})),i.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,i.verticalPlacedTextSymbolIndex),i.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,i.placedIconSymbolIndex),i.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,i.verticalPlacedIconSymbolIndex);}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray);}},On(\"SymbolBucket\",vl,{omit:[\"layers\",\"collisionBoxArray\",\"features\",\"compareText\"]}),vl.MAX_GLYPHS=65535,vl.addDynamicAttributes=fl;var gl=new wi({\"symbol-placement\":new mi(Et.layout_symbol[\"symbol-placement\"]),\"symbol-spacing\":new mi(Et.layout_symbol[\"symbol-spacing\"]),\"symbol-avoid-edges\":new mi(Et.layout_symbol[\"symbol-avoid-edges\"]),\"symbol-sort-key\":new vi(Et.layout_symbol[\"symbol-sort-key\"]),\"symbol-z-order\":new mi(Et.layout_symbol[\"symbol-z-order\"]),\"icon-allow-overlap\":new mi(Et.layout_symbol[\"icon-allow-overlap\"]),\"icon-ignore-placement\":new mi(Et.layout_symbol[\"icon-ignore-placement\"]),\"icon-optional\":new mi(Et.layout_symbol[\"icon-optional\"]),\"icon-rotation-alignment\":new mi(Et.layout_symbol[\"icon-rotation-alignment\"]),\"icon-size\":new vi(Et.layout_symbol[\"icon-size\"]),\"icon-text-fit\":new mi(Et.layout_symbol[\"icon-text-fit\"]),\"icon-text-fit-padding\":new mi(Et.layout_symbol[\"icon-text-fit-padding\"]),\"icon-image\":new vi(Et.layout_symbol[\"icon-image\"]),\"icon-rotate\":new vi(Et.layout_symbol[\"icon-rotate\"]),\"icon-padding\":new mi(Et.layout_symbol[\"icon-padding\"]),\"icon-keep-upright\":new mi(Et.layout_symbol[\"icon-keep-upright\"]),\"icon-offset\":new vi(Et.layout_symbol[\"icon-offset\"]),\"icon-anchor\":new vi(Et.layout_symbol[\"icon-anchor\"]),\"icon-pitch-alignment\":new mi(Et.layout_symbol[\"icon-pitch-alignment\"]),\"text-pitch-alignment\":new mi(Et.layout_symbol[\"text-pitch-alignment\"]),\"text-rotation-alignment\":new mi(Et.layout_symbol[\"text-rotation-alignment\"]),\"text-field\":new vi(Et.layout_symbol[\"text-field\"]),\"text-font\":new vi(Et.layout_symbol[\"text-font\"]),\"text-size\":new vi(Et.layout_symbol[\"text-size\"]),\"text-max-width\":new vi(Et.layout_symbol[\"text-max-width\"]),\"text-line-height\":new mi(Et.layout_symbol[\"text-line-height\"]),\"text-letter-spacing\":new vi(Et.layout_symbol[\"text-letter-spacing\"]),\"text-justify\":new vi(Et.layout_symbol[\"text-justify\"]),\"text-radial-offset\":new vi(Et.layout_symbol[\"text-radial-offset\"]),\"text-variable-anchor\":new mi(Et.layout_symbol[\"text-variable-anchor\"]),\"text-anchor\":new vi(Et.layout_symbol[\"text-anchor\"]),\"text-max-angle\":new mi(Et.layout_symbol[\"text-max-angle\"]),\"text-writing-mode\":new mi(Et.layout_symbol[\"text-writing-mode\"]),\"text-rotate\":new vi(Et.layout_symbol[\"text-rotate\"]),\"text-padding\":new mi(Et.layout_symbol[\"text-padding\"]),\"text-keep-upright\":new mi(Et.layout_symbol[\"text-keep-upright\"]),\"text-transform\":new vi(Et.layout_symbol[\"text-transform\"]),\"text-offset\":new vi(Et.layout_symbol[\"text-offset\"]),\"text-allow-overlap\":new mi(Et.layout_symbol[\"text-allow-overlap\"]),\"text-ignore-placement\":new mi(Et.layout_symbol[\"text-ignore-placement\"]),\"text-optional\":new mi(Et.layout_symbol[\"text-optional\"])}),xl={paint:new wi({\"icon-opacity\":new vi(Et.paint_symbol[\"icon-opacity\"]),\"icon-color\":new vi(Et.paint_symbol[\"icon-color\"]),\"icon-halo-color\":new vi(Et.paint_symbol[\"icon-halo-color\"]),\"icon-halo-width\":new vi(Et.paint_symbol[\"icon-halo-width\"]),\"icon-halo-blur\":new vi(Et.paint_symbol[\"icon-halo-blur\"]),\"icon-translate\":new mi(Et.paint_symbol[\"icon-translate\"]),\"icon-translate-anchor\":new mi(Et.paint_symbol[\"icon-translate-anchor\"]),\"text-opacity\":new vi(Et.paint_symbol[\"text-opacity\"]),\"text-color\":new vi(Et.paint_symbol[\"text-color\"],{runtimeType:jt,getOverride:function(t){return t.textColor},hasOverride:function(t){return !!t.textColor}}),\"text-halo-color\":new vi(Et.paint_symbol[\"text-halo-color\"]),\"text-halo-width\":new vi(Et.paint_symbol[\"text-halo-width\"]),\"text-halo-blur\":new vi(Et.paint_symbol[\"text-halo-blur\"]),\"text-translate\":new mi(Et.paint_symbol[\"text-translate\"]),\"text-translate-anchor\":new mi(Et.paint_symbol[\"text-translate-anchor\"])}),layout:gl},bl=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:Lt,this.defaultValue=t;};bl.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},bl.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression);},bl.prototype.outputDefined=function(){return !1},bl.prototype.serialize=function(){return null},On(\"FormatSectionOverride\",bl,{omit:[\"defaultValue\"]});var wl=function(t){function e(e){t.call(this,e,xl);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.recalculate=function(e,r){if(t.prototype.recalculate.call(this,e,r),\"auto\"===this.layout.get(\"icon-rotation-alignment\")&&(this.layout._values[\"icon-rotation-alignment\"]=\"point\"!==this.layout.get(\"symbol-placement\")?\"map\":\"viewport\"),\"auto\"===this.layout.get(\"text-rotation-alignment\")&&(this.layout._values[\"text-rotation-alignment\"]=\"point\"!==this.layout.get(\"symbol-placement\")?\"map\":\"viewport\"),\"auto\"===this.layout.get(\"text-pitch-alignment\")&&(this.layout._values[\"text-pitch-alignment\"]=this.layout.get(\"text-rotation-alignment\")),\"auto\"===this.layout.get(\"icon-pitch-alignment\")&&(this.layout._values[\"icon-pitch-alignment\"]=this.layout.get(\"icon-rotation-alignment\")),\"point\"===this.layout.get(\"symbol-placement\")){var n=this.layout.get(\"text-writing-mode\");if(n){for(var i=[],a=0,o=n;a<o.length;a+=1){var s=o[a];i.indexOf(s)<0&&i.push(s);}this.layout._values[\"text-writing-mode\"]=i;}else this.layout._values[\"text-writing-mode\"]=[\"horizontal\"];}this._setPaintOverrides();},e.prototype.getValueAndResolveTokens=function(t,e,r,n){var i=this.layout.get(t).evaluate(e,{},r,n),a=this._unevaluatedLayout._values[t];return a.isDataDriven()||Gr(a.value)||!i?i:function(t,e){return e.replace(/{([^{}]+)}/g,(function(e,r){return r in t?String(t[r]):\"\"}))}(e.properties,i)},e.prototype.createBucket=function(t){return new vl(t)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return !1},e.prototype._setPaintOverrides=function(){for(var t=0,r=xl.paint.overridableProperties;t<r.length;t+=1){var n=r[t];if(e.hasPaintOverride(this.layout,n)){var i,a=this.paint.get(n),o=new bl(a),s=new Kr(o,a.property.specification);i=\"constant\"===a.value.kind||\"source\"===a.value.kind?new Xr(\"source\",s):new Jr(\"composite\",s,a.value.zoomStops,a.value._interpolationType),this.paint._values[n]=new yi(a.property,i,a.parameters);}}},e.prototype._handleOverridablePaintPropertyUpdate=function(t,r,n){return !(!this.layout||r.isDataDriven()||n.isDataDriven())&&e.hasPaintOverride(this.layout,t)},e.hasPaintOverride=function(t,e){var r=t.get(\"text-field\"),n=xl.paint.properties[e],i=!1,a=function(t){for(var e=0,r=t;e<r.length;e+=1)if(n.overrides&&n.overrides.hasOverride(r[e]))return void(i=!0)};if(\"constant\"===r.value.kind&&r.value.value instanceof ne)a(r.value.value.sections);else if(\"source\"===r.value.kind){var o=function(t){i||(t instanceof le&&se(t.value)===Gt?a(t.value.sections):t instanceof fe?a(t.sections):t.eachChild(o));},s=r.value;s._styleExpression&&o(s._styleExpression.expression);}return i},e}(_i),_l={paint:new wi({\"background-color\":new mi(Et.paint_background[\"background-color\"]),\"background-pattern\":new xi(Et.paint_background[\"background-pattern\"]),\"background-opacity\":new mi(Et.paint_background[\"background-opacity\"])})},Al=function(t){function e(e){t.call(this,e,_l);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(_i),Sl={paint:new wi({\"raster-opacity\":new mi(Et.paint_raster[\"raster-opacity\"]),\"raster-hue-rotate\":new mi(Et.paint_raster[\"raster-hue-rotate\"]),\"raster-brightness-min\":new mi(Et.paint_raster[\"raster-brightness-min\"]),\"raster-brightness-max\":new mi(Et.paint_raster[\"raster-brightness-max\"]),\"raster-saturation\":new mi(Et.paint_raster[\"raster-saturation\"]),\"raster-contrast\":new mi(Et.paint_raster[\"raster-contrast\"]),\"raster-resampling\":new mi(Et.paint_raster[\"raster-resampling\"]),\"raster-fade-duration\":new mi(Et.paint_raster[\"raster-fade-duration\"])})},kl=function(t){function e(e){t.call(this,e,Sl);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(_i),Il=function(t){function e(e){t.call(this,e,{}),this.implementation=e;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.is3D=function(){return \"3d\"===this.implementation.renderingMode},e.prototype.hasOffscreenPass=function(){return void 0!==this.implementation.prerender},e.prototype.recalculate=function(){},e.prototype.updateTransitions=function(){},e.prototype.hasTransition=function(){},e.prototype.serialize=function(){},e.prototype.onAdd=function(t){this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl);},e.prototype.onRemove=function(t){this.implementation.onRemove&&this.implementation.onRemove(t,t.painter.context.gl);},e}(_i),zl={circle:co,heatmap:_o,hillshade:So,fill:ps,\"fill-extrusion\":zs,line:Rs,symbol:wl,background:Al,raster:kl},Cl=o.HTMLImageElement,El=o.HTMLCanvasElement,Pl=o.HTMLVideoElement,Ml=o.ImageData,Bl=o.ImageBitmap,Tl=function(t,e,r,n){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this.update(e,n);};Tl.prototype.update=function(t,e,r){var n=t.width,i=t.height,a=!(this.size&&this.size[0]===n&&this.size[1]===i||r),o=this.context,s=o.gl;if(this.useMipmap=Boolean(e&&e.useMipmap),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format===s.RGBA&&(!e||!1!==e.premultiply)),a)this.size=[n,i],t instanceof Cl||t instanceof El||t instanceof Pl||t instanceof Ml||Bl&&t instanceof Bl?s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,s.UNSIGNED_BYTE,t):s.texImage2D(s.TEXTURE_2D,0,this.format,n,i,0,this.format,s.UNSIGNED_BYTE,t.data);else {var u=r||{x:0,y:0},l=u.x,p=u.y;t instanceof Cl||t instanceof El||t instanceof Pl||t instanceof Ml||Bl&&t instanceof Bl?s.texSubImage2D(s.TEXTURE_2D,0,l,p,s.RGBA,s.UNSIGNED_BYTE,t):s.texSubImage2D(s.TEXTURE_2D,0,l,p,n,i,s.RGBA,s.UNSIGNED_BYTE,t.data);}this.useMipmap&&this.isSizePowerOfTwo()&&s.generateMipmap(s.TEXTURE_2D);},Tl.prototype.bind=function(t,e,r){var n=this.context.gl;n.bindTexture(n.TEXTURE_2D,this.texture),r!==n.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(r=n.LINEAR),t!==this.filter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,r||t),this.filter=t),e!==this.wrap&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap=e);},Tl.prototype.isSizePowerOfTwo=function(){return this.size[0]===this.size[1]&&Math.log(this.size[0])/Math.LN2%1==0},Tl.prototype.destroy=function(){this.context.gl.deleteTexture(this.texture),this.texture=null;};var Vl=function(t){var e=this;this._callback=t,this._triggered=!1,\"undefined\"!=typeof MessageChannel&&(this._channel=new MessageChannel,this._channel.port2.onmessage=function(){e._triggered=!1,e._callback();});};Vl.prototype.trigger=function(){var t=this;this._triggered||(this._triggered=!0,this._channel?this._channel.port1.postMessage(!0):setTimeout((function(){t._triggered=!1,t._callback();}),0));},Vl.prototype.remove=function(){delete this._channel,this._callback=function(){};};var Fl=function(t,e,r){this.target=t,this.parent=e,this.mapId=r,this.callbacks={},this.tasks={},this.taskQueue=[],this.cancelCallbacks={},v([\"receive\",\"process\"],this),this.invoker=new Vl(this.process),this.target.addEventListener(\"message\",this.receive,!1),this.globalScope=I()?t:o;};function Dl(t,e,r){var n=2*Math.PI*6378137/256/Math.pow(2,r);return [t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}Fl.prototype.send=function(t,e,r,n,i){var a=this;void 0===i&&(i=!1);var o=Math.round(1e18*Math.random()).toString(36).substring(0,10);r&&(this.callbacks[o]=r);var s=E(this.globalScope)?void 0:[];return this.target.postMessage({id:o,type:t,hasCallback:!!r,targetMapId:n,mustQueue:i,sourceMapId:this.mapId,data:qn(e,s)},s),{cancel:function(){r&&delete a.callbacks[o],a.target.postMessage({id:o,type:\"<cancel>\",targetMapId:n,sourceMapId:a.mapId});}}},Fl.prototype.receive=function(t){var e=t.data,r=e.id;if(r&&(!e.targetMapId||this.mapId===e.targetMapId))if(\"<cancel>\"===e.type){delete this.tasks[r];var n=this.cancelCallbacks[r];delete this.cancelCallbacks[r],n&&n();}else I()||e.mustQueue?(this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger()):this.processTask(r,e);},Fl.prototype.process=function(){if(this.taskQueue.length){var t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length&&this.invoker.trigger(),e&&this.processTask(t,e);}},Fl.prototype.processTask=function(t,e){var r=this;if(\"<response>\"===e.type){var n=this.callbacks[t];delete this.callbacks[t],n&&(e.error?n(Nn(e.error)):n(null,Nn(e.data)));}else {var i=!1,a=E(this.globalScope)?void 0:[],o=e.hasCallback?function(e,n){i=!0,delete r.cancelCallbacks[t],r.target.postMessage({id:t,type:\"<response>\",sourceMapId:r.mapId,error:e?qn(e):null,data:qn(n,a)},a);}:function(t){i=!0;},s=null,u=Nn(e.data);if(this.parent[e.type])s=this.parent[e.type](e.sourceMapId,u,o);else if(this.parent.getWorkerSource){var l=e.type.split(\".\");s=this.parent.getWorkerSource(e.sourceMapId,l[0],u.source)[l[1]](u,o);}else o(new Error(\"Could not find function \"+e.type));!i&&s&&s.cancel&&(this.cancelCallbacks[t]=s.cancel);}},Fl.prototype.remove=function(){this.invoker.remove(),this.target.removeEventListener(\"message\",this.receive,!1);};var Ll=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]));};Ll.prototype.setNorthEast=function(t){return this._ne=t instanceof Ol?new Ol(t.lng,t.lat):Ol.convert(t),this},Ll.prototype.setSouthWest=function(t){return this._sw=t instanceof Ol?new Ol(t.lng,t.lat):Ol.convert(t),this},Ll.prototype.extend=function(t){var e,r,n=this._sw,i=this._ne;if(t instanceof Ol)e=t,r=t;else {if(!(t instanceof Ll))return Array.isArray(t)?4===t.length||t.every(Array.isArray)?this.extend(Ll.convert(t)):this.extend(Ol.convert(t)):this;if(r=t._ne,!(e=t._sw)||!r)return this}return n||i?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),i.lng=Math.max(r.lng,i.lng),i.lat=Math.max(r.lat,i.lat)):(this._sw=new Ol(e.lng,e.lat),this._ne=new Ol(r.lng,r.lat)),this},Ll.prototype.getCenter=function(){return new Ol((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Ll.prototype.getSouthWest=function(){return this._sw},Ll.prototype.getNorthEast=function(){return this._ne},Ll.prototype.getNorthWest=function(){return new Ol(this.getWest(),this.getNorth())},Ll.prototype.getSouthEast=function(){return new Ol(this.getEast(),this.getSouth())},Ll.prototype.getWest=function(){return this._sw.lng},Ll.prototype.getSouth=function(){return this._sw.lat},Ll.prototype.getEast=function(){return this._ne.lng},Ll.prototype.getNorth=function(){return this._ne.lat},Ll.prototype.toArray=function(){return [this._sw.toArray(),this._ne.toArray()]},Ll.prototype.toString=function(){return \"LngLatBounds(\"+this._sw.toString()+\", \"+this._ne.toString()+\")\"},Ll.prototype.isEmpty=function(){return !(this._sw&&this._ne)},Ll.prototype.contains=function(t){var e=Ol.convert(t),r=e.lng,n=e.lat,i=this._sw.lng<=r&&r<=this._ne.lng;return this._sw.lng>this._ne.lng&&(i=this._sw.lng>=r&&r>=this._ne.lng),this._sw.lat<=n&&n<=this._ne.lat&&i},Ll.convert=function(t){return !t||t instanceof Ll?t:new Ll(t)};var Ol=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid LngLat object: (\"+t+\", \"+e+\")\");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error(\"Invalid LngLat latitude value: must be between -90 and 90\")};Ol.prototype.wrap=function(){return new Ol(c(this.lng,-180,180),this.lat)},Ol.prototype.toArray=function(){return [this.lng,this.lat]},Ol.prototype.toString=function(){return \"LngLat(\"+this.lng+\", \"+this.lat+\")\"},Ol.prototype.distanceTo=function(t){var e=Math.PI/180,r=this.lat*e,n=t.lat*e,i=Math.sin(r)*Math.sin(n)+Math.cos(r)*Math.cos(n)*Math.cos((t.lng-this.lng)*e);return 6371008.8*Math.acos(Math.min(i,1))},Ol.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new Ll(new Ol(this.lng-r,this.lat-e),new Ol(this.lng+r,this.lat+e))},Ol.convert=function(t){if(t instanceof Ol)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Ol(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&\"object\"==typeof t&&null!==t)return new Ol(Number(\"lng\"in t?t.lng:t.lon),Number(t.lat));throw new Error(\"`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]\")};var Rl=2*Math.PI*6371008.8;function Ul(t){return Rl*Math.cos(t*Math.PI/180)}function jl(t){return (180+t)/360}function ql(t){return (180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Nl(t,e){return t/Ul(e)}function Kl(t){return 360/Math.PI*Math.atan(Math.exp((180-360*t)*Math.PI/180))-90}var Gl=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r;};Gl.fromLngLat=function(t,e){void 0===e&&(e=0);var r=Ol.convert(t);return new Gl(jl(r.lng),ql(r.lat),Nl(e,r.lat))},Gl.prototype.toLngLat=function(){return new Ol(360*this.x-180,Kl(this.y))},Gl.prototype.toAltitude=function(){return this.z*Ul(Kl(this.y))},Gl.prototype.meterInMercatorCoordinateUnits=function(){return 1/Rl*(t=Kl(this.y),1/Math.cos(t*Math.PI/180));var t;};var Zl=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=Hl(0,t,t,e,r);};Zl.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Zl.prototype.url=function(t,e){var r,n,i,a,o,s=(n=this.y,i=this.z,a=Dl(256*(r=this.x),256*(n=Math.pow(2,i)-n-1),i),o=Dl(256*(r+1),256*(n+1),i),a[0]+\",\"+a[1]+\",\"+o[0]+\",\"+o[1]),u=function(t,e,r){for(var n,i=\"\",a=t;a>0;a--)i+=(e&(n=1<<a-1)?1:0)+(r&n?2:0);return i}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace(\"{prefix}\",(this.x%16).toString(16)+(this.y%16).toString(16)).replace(\"{z}\",String(this.z)).replace(\"{x}\",String(this.x)).replace(\"{y}\",String(\"tms\"===e?Math.pow(2,this.z)-this.y-1:this.y)).replace(\"{quadkey}\",u).replace(\"{bbox-epsg-3857}\",s)},Zl.prototype.getTilePoint=function(t){var e=Math.pow(2,this.z);return new i(8192*(t.x*e-this.x),8192*(t.y*e-this.y))},Zl.prototype.toString=function(){return this.z+\"/\"+this.x+\"/\"+this.y};var Xl=function(t,e){this.wrap=t,this.canonical=e,this.key=Hl(t,e.z,e.z,e.x,e.y);},Jl=function(t,e,r,n,i){this.overscaledZ=t,this.wrap=e,this.canonical=new Zl(r,+n,+i),this.key=Hl(e,t,r,n,i);};function Hl(t,e,r,n,i){(t*=2)<0&&(t=-1*t-1);var a=1<<r;return (a*a*t+a*i+n).toString(36)+r.toString(36)+e.toString(36)}Jl.prototype.equals=function(t){return this.overscaledZ===t.overscaledZ&&this.wrap===t.wrap&&this.canonical.equals(t.canonical)},Jl.prototype.scaledTo=function(t){var e=this.canonical.z-t;return t>this.canonical.z?new Jl(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Jl(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},Jl.prototype.calculateScaledKey=function(t,e){var r=this.canonical.z-t;return t>this.canonical.z?Hl(this.wrap*+e,t,this.canonical.z,this.canonical.x,this.canonical.y):Hl(this.wrap*+e,t,t,this.canonical.x>>r,this.canonical.y>>r)},Jl.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return !1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ<this.overscaledZ&&t.canonical.x===this.canonical.x>>e&&t.canonical.y===this.canonical.y>>e},Jl.prototype.children=function(t){if(this.overscaledZ>=t)return [new Jl(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return [new Jl(e,this.wrap,e,r,n),new Jl(e,this.wrap,e,r+1,n),new Jl(e,this.wrap,e,r,n+1),new Jl(e,this.wrap,e,r+1,n+1)]},Jl.prototype.isLessThan=function(t){return this.wrap<t.wrap||!(this.wrap>t.wrap)&&(this.overscaledZ<t.overscaledZ||!(this.overscaledZ>t.overscaledZ)&&(this.canonical.x<t.canonical.x||!(this.canonical.x>t.canonical.x)&&this.canonical.y<t.canonical.y))},Jl.prototype.wrapped=function(){return new Jl(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},Jl.prototype.unwrapTo=function(t){return new Jl(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},Jl.prototype.overscaleFactor=function(){return Math.pow(2,this.overscaledZ-this.canonical.z)},Jl.prototype.toUnwrapped=function(){return new Xl(this.wrap,this.canonical)},Jl.prototype.toString=function(){return this.overscaledZ+\"/\"+this.canonical.x+\"/\"+this.canonical.y},Jl.prototype.getTilePoint=function(t){return this.canonical.getTilePoint(new Gl(t.x-this.wrap,t.y))},On(\"CanonicalTileID\",Zl),On(\"OverscaledTileID\",Jl,{omit:[\"posMatrix\"]});var Yl=function(t,e,r){if(this.uid=t,e.height!==e.width)throw new RangeError(\"DEM tiles must be square\");if(r&&\"mapbox\"!==r&&\"terrarium\"!==r)return A('\"'+r+'\" is not a valid encoding type. Valid types include \"mapbox\" and \"terrarium\".');this.stride=e.height;var n=this.dim=e.height-2;this.data=new Uint32Array(e.data.buffer),this.encoding=r||\"mapbox\";for(var i=0;i<n;i++)this.data[this._idx(-1,i)]=this.data[this._idx(0,i)],this.data[this._idx(n,i)]=this.data[this._idx(n-1,i)],this.data[this._idx(i,-1)]=this.data[this._idx(i,0)],this.data[this._idx(i,n)]=this.data[this._idx(i,n-1)];this.data[this._idx(-1,-1)]=this.data[this._idx(0,0)],this.data[this._idx(n,-1)]=this.data[this._idx(n-1,0)],this.data[this._idx(-1,n)]=this.data[this._idx(0,n-1)],this.data[this._idx(n,n)]=this.data[this._idx(n-1,n-1)];};Yl.prototype.get=function(t,e){var r=new Uint8Array(this.data.buffer),n=4*this._idx(t,e);return (\"terrarium\"===this.encoding?this._unpackTerrarium:this._unpackMapbox)(r[n],r[n+1],r[n+2])},Yl.prototype.getUnpackVector=function(){return \"terrarium\"===this.encoding?[256,1,1/256,32768]:[6553.6,25.6,.1,1e4]},Yl.prototype._idx=function(t,e){if(t<-1||t>=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError(\"out of range source coordinates for DEM data\");return (e+1)*this.stride+(t+1)},Yl.prototype._unpackMapbox=function(t,e,r){return (256*t*256+256*e+r)/10-1e4},Yl.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},Yl.prototype.getPixels=function(){return new xo({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Yl.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error(\"dem dimension mismatch\");var n=e*this.dim,i=e*this.dim+this.dim,a=r*this.dim,o=r*this.dim+this.dim;switch(e){case-1:n=i-1;break;case 1:i=n+1;}switch(r){case-1:a=o-1;break;case 1:o=a+1;}for(var s=-e*this.dim,u=-r*this.dim,l=a;l<o;l++)for(var p=n;p<i;p++)this.data[this._idx(p,l)]=t.data[this._idx(p+s,l+u)];},On(\"DEMData\",Yl);var $l=function(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r;}};$l.prototype.encode=function(t){return this._stringToNumber[t]},$l.prototype.decode=function(t){return this._numberToString[t]};var Wl=function(t,e,r,n,i){this.type=\"Feature\",this._vectorTileFeature=t,t._z=e,t._x=r,t._y=n,this.properties=t.properties,this.id=i;},Ql={geometry:{configurable:!0}};Ql.geometry.get=function(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},Ql.geometry.set=function(t){this._geometry=t;},Wl.prototype.toJSON=function(){var t={geometry:this.geometry};for(var e in this)\"_geometry\"!==e&&\"_vectorTileFeature\"!==e&&(t[e]=this[e]);return t},Object.defineProperties(Wl.prototype,Ql);var tp=function(){this.state={},this.stateChanges={},this.deletedStates={};};tp.prototype.updateState=function(t,e,r){var n=String(e);if(this.stateChanges[t]=this.stateChanges[t]||{},this.stateChanges[t][n]=this.stateChanges[t][n]||{},h(this.stateChanges[t][n],r),null===this.deletedStates[t])for(var i in this.deletedStates[t]={},this.state[t])i!==n&&(this.deletedStates[t][i]=null);else if(this.deletedStates[t]&&null===this.deletedStates[t][n])for(var a in this.deletedStates[t][n]={},this.state[t][n])r[a]||(this.deletedStates[t][n][a]=null);else for(var o in r)this.deletedStates[t]&&this.deletedStates[t][n]&&null===this.deletedStates[t][n][o]&&delete this.deletedStates[t][n][o];},tp.prototype.removeFeatureState=function(t,e,r){if(null!==this.deletedStates[t]){var n=String(e);if(this.deletedStates[t]=this.deletedStates[t]||{},r&&void 0!==e)null!==this.deletedStates[t][n]&&(this.deletedStates[t][n]=this.deletedStates[t][n]||{},this.deletedStates[t][n][r]=null);else if(void 0!==e)if(this.stateChanges[t]&&this.stateChanges[t][n])for(r in this.deletedStates[t][n]={},this.stateChanges[t][n])this.deletedStates[t][n][r]=null;else this.deletedStates[t][n]=null;else this.deletedStates[t]=null;}},tp.prototype.getState=function(t,e){var r=String(e),n=h({},(this.state[t]||{})[r],(this.stateChanges[t]||{})[r]);if(null===this.deletedStates[t])return {};if(this.deletedStates[t]){var i=this.deletedStates[t][e];if(null===i)return {};for(var a in i)delete n[a];}return n},tp.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e);},tp.prototype.coalesceChanges=function(t,e){var r={};for(var n in this.stateChanges){this.state[n]=this.state[n]||{};var i={};for(var a in this.stateChanges[n])this.state[n][a]||(this.state[n][a]={}),h(this.state[n][a],this.stateChanges[n][a]),i[a]=this.state[n][a];r[n]=i;}for(var o in this.deletedStates){this.state[o]=this.state[o]||{};var s={};if(null===this.deletedStates[o])for(var u in this.state[o])s[u]={},this.state[o][u]={};else for(var l in this.deletedStates[o]){if(null===this.deletedStates[o][l])this.state[o][l]={};else for(var p=0,c=Object.keys(this.deletedStates[o][l]);p<c.length;p+=1)delete this.state[o][l][c[p]];s[l]=this.state[o][l];}r[o]=r[o]||{},h(r[o],s);}if(this.stateChanges={},this.deletedStates={},0!==Object.keys(r).length)for(var f in t)t[f].setFeatureState(r,e);};var ep=function(t,e){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=new Tn(8192,16,0),this.grid3D=new Tn(8192,16,0),this.featureIndexArray=new aa,this.promoteId=e;};function rp(t,e,r,n,i){return x(t,(function(t,a){var o=e instanceof di?e.get(a):null;return o&&o.evaluate?o.evaluate(r,n,i):o}))}function np(t){for(var e=1/0,r=1/0,n=-1/0,i=-1/0,a=0,o=t;a<o.length;a+=1){var s=o[a];e=Math.min(e,s.x),r=Math.min(r,s.y),n=Math.max(n,s.x),i=Math.max(i,s.y);}return {minX:e,minY:r,maxX:n,maxY:i}}function ip(t,e){return e-t}ep.prototype.insert=function(t,e,r,n,i,a){var o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,n,i);for(var s=a?this.grid3D:this.grid,u=0;u<e.length;u++){for(var l=e[u],p=[1/0,1/0,-1/0,-1/0],c=0;c<l.length;c++){var h=l[c];p[0]=Math.min(p[0],h.x),p[1]=Math.min(p[1],h.y),p[2]=Math.max(p[2],h.x),p[3]=Math.max(p[3],h.y);}p[0]<8192&&p[1]<8192&&p[2]>=0&&p[3]>=0&&s.insert(o,p[0],p[1],p[2],p[3]);}},ep.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new bs.VectorTile(new Ys(this.rawTileData)).layers,this.sourceLayerCoder=new $l(this.vtLayers?Object.keys(this.vtLayers).sort():[\"_geojsonTileLayer\"])),this.vtLayers},ep.prototype.query=function(t,e,r,n){var a=this;this.loadVTLayers();for(var o=t.params||{},s=8192/t.tileSize/t.scale,u=on(o.filter),l=t.queryGeometry,p=t.queryPadding*s,c=np(l),h=this.grid.query(c.minX-p,c.minY-p,c.maxX+p,c.maxY+p),f=np(t.cameraQueryGeometry),y=this.grid3D.query(f.minX-p,f.minY-p,f.maxX+p,f.maxY+p,(function(e,r,n,a){return function(t,e,r,n,a){for(var o=0,s=t;o<s.length;o+=1){var u=s[o];if(e<=u.x&&r<=u.y&&n>=u.x&&a>=u.y)return !0}var l=[new i(e,r),new i(e,a),new i(n,a),new i(n,r)];if(t.length>2)for(var p=0,c=l;p<c.length;p+=1)if(Wa(t,c[p]))return !0;for(var h=0;h<t.length-1;h++)if(Qa(t[h],t[h+1],l))return !0;return !1}(t.cameraQueryGeometry,e-p,r-p,n+p,a+p)})),d=0,m=y;d<m.length;d+=1)h.push(m[d]);h.sort(ip);for(var v,g={},x=function(i){var p=h[i];if(p!==v){v=p;var c=a.featureIndexArray.get(p),f=null;a.loadMatchingFeature(g,c.bucketIndex,c.sourceLayerIndex,c.featureIndex,u,o.layers,o.availableImages,e,r,n,(function(e,r,n){return f||(f=Ra(e)),r.queryIntersectsFeature(l,e,n,f,a.z,t.transform,s,t.pixelPosMatrix)}));}},b=0;b<h.length;b++)x(b);return g},ep.prototype.loadMatchingFeature=function(t,e,r,n,i,a,o,s,u,l,p){var c=this.bucketLayerIDs[e];if(!a||function(t,e){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>=0)return !0;return !1}(a,c)){var f=this.sourceLayerCoder.decode(r),y=this.vtLayers[f].feature(n);if(i.needGeometry){var d=Ua(y,!0);if(!i.filter(new si(this.tileID.overscaledZ),d,this.tileID.canonical))return}else if(!i.filter(new si(this.tileID.overscaledZ),y))return;for(var m=this.getId(y,f),v=0;v<c.length;v++){var g=c[v];if(!(a&&a.indexOf(g)<0)){var x=s[g];if(x){var b={};void 0!==m&&l&&(b=l.getState(x.sourceLayer||\"_geojsonTileLayer\",m));var w=h({},u[g]);w.paint=rp(w.paint,x.paint,y,b,o),w.layout=rp(w.layout,x.layout,y,b,o);var _=!p||p(y,x,b);if(_){var A=new Wl(y,this.z,this.x,this.y,m);A.layer=w;var S=t[g];void 0===S&&(S=t[g]=[]),S.push({featureIndex:n,feature:A,intersectionZ:_});}}}}}},ep.prototype.lookupSymbolFeatures=function(t,e,r,n,i,a,o,s){var u={};this.loadVTLayers();for(var l=on(i),p=0,c=t;p<c.length;p+=1)this.loadMatchingFeature(u,r,n,c[p],l,a,o,s,e);return u},ep.prototype.hasLayer=function(t){for(var e=0,r=this.bucketLayerIDs;e<r.length;e+=1)for(var n=0,i=r[e];n<i.length;n+=1)if(t===i[n])return !0;return !1},ep.prototype.getId=function(t,e){var r=t.id;return this.promoteId&&\"boolean\"==typeof(r=t.properties[\"string\"==typeof this.promoteId?this.promoteId:this.promoteId[e]])&&(r=Number(r)),r},On(\"FeatureIndex\",ep,{omit:[\"rawTileData\",\"sourceLayerCoder\"]});var ap=function(t,e){this.tileID=t,this.uid=y(),this.uses=0,this.tileSize=e,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.hasRTLText=!1,this.dependencies={},this.expiredRequestCount=0,this.state=\"loading\";};ap.prototype.registerFadeDuration=function(t){var e=t+this.timeAdded;e<O.now()||this.fadeEndTime&&e<this.fadeEndTime||(this.fadeEndTime=e);},ap.prototype.wasRequested=function(){return \"errored\"===this.state||\"loaded\"===this.state||\"reloading\"===this.state},ap.prototype.loadVectorData=function(t,e,r){if(this.hasData()&&this.unloadVectorData(),this.state=\"loaded\",t){for(var n in t.featureIndex&&(this.latestFeatureIndex=t.featureIndex,t.rawTileData?(this.latestRawTileData=t.rawTileData,this.latestFeatureIndex.rawTileData=t.rawTileData):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData)),this.collisionBoxArray=t.collisionBoxArray,this.buckets=function(t,e){var r={};if(!e)return r;for(var n=function(){var t=a[i],n=t.layerIds.map((function(t){return e.getLayer(t)})).filter(Boolean);if(0!==n.length){t.layers=n,t.stateDependentLayerIds&&(t.stateDependentLayers=t.stateDependentLayerIds.map((function(t){return n.filter((function(e){return e.id===t}))[0]})));for(var o=0,s=n;o<s.length;o+=1)r[s[o].id]=t;}},i=0,a=t;i<a.length;i+=1)n();return r}(t.buckets,e.style),this.hasSymbolBuckets=!1,this.buckets){var i=this.buckets[n];if(i instanceof vl){if(this.hasSymbolBuckets=!0,!r)break;i.justReloaded=!0;}}if(this.hasRTLText=!1,this.hasSymbolBuckets)for(var a in this.buckets){var o=this.buckets[a];if(o instanceof vl&&o.hasRTLText){this.hasRTLText=!0,oi.isLoading()||oi.isLoaded()||\"deferred\"!==ii()||ai();break}}for(var s in this.queryPadding=0,this.buckets){var u=this.buckets[s];this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(s).queryRadius(u));}t.imageAtlas&&(this.imageAtlas=t.imageAtlas),t.glyphAtlasImage&&(this.glyphAtlasImage=t.glyphAtlasImage);}else this.collisionBoxArray=new $i;},ap.prototype.unloadVectorData=function(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.imageAtlas&&(this.imageAtlas=null),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.latestFeatureIndex=null,this.state=\"unloaded\";},ap.prototype.getBucket=function(t){return this.buckets[t.id]},ap.prototype.upload=function(t){for(var e in this.buckets){var r=this.buckets[e];r.uploadPending()&&r.upload(t);}var n=t.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Tl(t,this.imageAtlas.image,n.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasTexture=new Tl(t,this.glyphAtlasImage,n.ALPHA),this.glyphAtlasImage=null);},ap.prototype.prepare=function(t){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(t,this.imageAtlasTexture);},ap.prototype.queryRenderedFeatures=function(t,e,r,n,i,a,o,s,u,l){return this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:n,cameraQueryGeometry:i,scale:a,tileSize:this.tileSize,pixelPosMatrix:l,transform:s,params:o,queryPadding:this.queryPadding*u},t,e,r):{}},ap.prototype.querySourceFeatures=function(t,e){var r=this.latestFeatureIndex;if(r&&r.rawTileData){var n=r.loadVTLayers(),i=e?e.sourceLayer:\"\",a=n._geojsonTileLayer||n[i];if(a)for(var o=on(e&&e.filter),s=this.tileID.canonical,u=s.z,l=s.x,p=s.y,c={z:u,x:l,y:p},h=0;h<a.length;h++){var f=a.feature(h);if(o.needGeometry){var y=Ua(f,!0);if(!o.filter(new si(this.tileID.overscaledZ),y,this.tileID.canonical))continue}else if(!o.filter(new si(this.tileID.overscaledZ),f))continue;var d=r.getId(f,i),m=new Wl(f,u,l,p,d);m.tile=c,t.push(m);}}},ap.prototype.hasData=function(){return \"loaded\"===this.state||\"reloading\"===this.state||\"expired\"===this.state},ap.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},ap.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var r=z(t.cacheControl);r[\"max-age\"]&&(this.expirationTime=Date.now()+1e3*r[\"max-age\"]);}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var n=Date.now(),i=!1;if(this.expirationTime>n)i=!1;else if(e)if(this.expirationTime<e)i=!0;else {var a=this.expirationTime-e;a?this.expirationTime=n+Math.max(a,3e4):i=!0;}else i=!0;i?(this.expiredRequestCount++,this.state=\"expired\"):this.expiredRequestCount=0;}},ap.prototype.getExpiryTimeout=function(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},ap.prototype.setFeatureState=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData&&0!==Object.keys(t).length){var r=this.latestFeatureIndex.loadVTLayers();for(var n in this.buckets)if(e.style.hasLayer(n)){var i=this.buckets[n],a=i.layers[0].sourceLayer||\"_geojsonTileLayer\",o=r[a],s=t[a];if(o&&s&&0!==Object.keys(s).length){i.update(s,o,this.imageAtlas&&this.imageAtlas.patternPositions||{});var u=e&&e.style&&e.style.getLayer(n);u&&(this.queryPadding=Math.max(this.queryPadding,u.queryRadius(i)));}}}},ap.prototype.holdingForFade=function(){return void 0!==this.symbolFadeHoldUntil},ap.prototype.symbolFadeFinished=function(){return !this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<O.now()},ap.prototype.clearFadeHold=function(){this.symbolFadeHoldUntil=void 0;},ap.prototype.setHoldDuration=function(t){this.symbolFadeHoldUntil=O.now()+t;},ap.prototype.setDependencies=function(t,e){for(var r={},n=0,i=e;n<i.length;n+=1)r[i[n]]=!0;this.dependencies[t]=r;},ap.prototype.hasDependency=function(t,e){for(var r=0,n=t;r<n.length;r+=1){var i=this.dependencies[n[r]];if(i)for(var a=0,o=e;a<o.length;a+=1)if(i[o[a]])return !0}return !1};var op=o.performance,sp=function(t){this._marks={start:[t.url,\"start\"].join(\"#\"),end:[t.url,\"end\"].join(\"#\"),measure:t.url.toString()},op.mark(this._marks.start);};sp.prototype.finish=function(){op.mark(this._marks.end);var t=op.getEntriesByName(this._marks.measure);return 0===t.length&&(op.measure(this._marks.measure,this._marks.start,this._marks.end),t=op.getEntriesByName(this._marks.measure),op.clearMarks(this._marks.start),op.clearMarks(this._marks.end),op.clearMeasures(this._marks.measure)),t},t.Actor=Fl,t.AlphaImage=go,t.CanonicalTileID=Zl,t.CollisionBoxArray=$i,t.Color=te,t.DEMData=Yl,t.DataConstantProperty=mi,t.DictionaryCoder=$l,t.EXTENT=8192,t.ErrorEvent=zt,t.EvaluationParameters=si,t.Event=It,t.Evented=Ct,t.FeatureIndex=ep,t.FillBucket=ss,t.FillExtrusionBucket=Ss,t.ImageAtlas=bu,t.ImagePosition=gu,t.LineBucket=Fs,t.LngLat=Ol,t.LngLatBounds=Ll,t.MercatorCoordinate=Gl,t.ONE_EM=24,t.OverscaledTileID=Jl,t.Point=i,t.Point$1=i,t.Properties=wi,t.Protobuf=Ys,t.RGBAImage=xo,t.RequestManager=G,t.RequestPerformance=sp,t.ResourceType=yt,t.SegmentVector=sa,t.SourceFeatureState=tp,t.StructArrayLayout1ui2=Ji,t.StructArrayLayout2f1f2i16=Ri,t.StructArrayLayout2i4=Ci,t.StructArrayLayout3ui6=ji,t.StructArrayLayout4i8=Ei,t.SymbolBucket=vl,t.Texture=Tl,t.Tile=ap,t.Transitionable=pi,t.Uniform1f=ba,t.Uniform1i=xa,t.Uniform2f=wa,t.Uniform3f=_a,t.Uniform4f=Aa,t.UniformColor=Sa,t.UniformMatrix4f=Ia,t.UnwrappedTileID=Xl,t.ValidationError=Pt,t.WritingMode=wu,t.ZoomHistory=Kn,t.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t},t.addDynamicAttributes=fl,t.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var n=t.length,i=new Array(t.length),a=null;t.forEach((function(t,o){e(t,(function(t,e){t&&(a=t),i[o]=e,0==--n&&r(a,i);}));}));},t.bezier=u,t.bindAll=v,t.browser=O,t.cacheEntryPossiblyAdded=function(t){++ht>ut&&(t.getActor().send(\"enforceCacheSizeLimit\",st),ht=0);},t.clamp=p,t.clearTileCache=function(t){var e=o.caches.delete(\"mapbox-tiles\");t&&e.catch(t).then((function(){return t()}));},t.clipLine=Zu,t.clone=function(t){var e=new ao(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=w,t.clone$2=function(t){var e=new ao(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},t.collisionCircleLayout=Gs,t.config=R,t.create=function(){var t=new ao(16);return ao!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new ao(9);return ao!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new ao(4);return ao!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=Zr,t.createLayout=Ii,t.createStyleLayer=function(t){return \"custom\"===t.type?new Il(t):new zl[t.type](t)},t.cross=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],u=r[2];return t[0]=i*u-a*s,t[1]=a*o-n*u,t[2]=n*s-i*o,t},t.deepEqual=function t(e,r){if(Array.isArray(e)){if(!Array.isArray(r)||e.length!==r.length)return !1;for(var n=0;n<e.length;n++)if(!t(e[n],r[n]))return !1;return !0}if(\"object\"==typeof e&&null!==e&&null!==r){if(\"object\"!=typeof r)return !1;if(Object.keys(e).length!==Object.keys(r).length)return !1;for(var i in e)if(!t(e[i],r[i]))return !1;return !0}return e===r},t.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},t.dot$1=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},t.ease=l,t.emitValidationErrors=Bn,t.endsWith=g,t.enforceCacheSizeLimit=function(t){lt(),tt&&tt.then((function(e){e.keys().then((function(r){for(var n=0;n<r.length-t;n++)e.delete(r[n]);}));}));},t.evaluateSizeForFeature=Lu,t.evaluateSizeForZoom=Ou,t.evaluateVariableOffset=al,t.evented=ni,t.extend=h,t.featureFilter=on,t.filterObject=b,t.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},t.getAnchorAlignment=Bu,t.getAnchorJustification=ol,t.getArrayBuffer=bt,t.getImage=At,t.getJSON=function(t,e){return xt(h(t,{type:\"json\"}),e)},t.getRTLTextPluginStatus=ii,t.getReferrer=mt,t.getVideo=function(t,e){var r,n,i=o.document.createElement(\"video\");i.muted=!0,i.onloadstart=function(){e(null,i);};for(var a=0;a<t.length;a++){var s=o.document.createElement(\"source\");r=t[a],n=void 0,(n=o.document.createElement(\"a\")).href=r,(n.protocol!==o.document.location.protocol||n.host!==o.document.location.host)&&(i.crossOrigin=\"Anonymous\"),s.src=t[a],i.appendChild(s);}return {cancel:function(){}}},t.identity=oo,t.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],u=e[6],l=e[7],p=e[8],c=e[9],h=e[10],f=e[11],y=e[12],d=e[13],m=e[14],v=e[15],g=r*s-n*o,x=r*u-i*o,b=r*l-a*o,w=n*u-i*s,_=n*l-a*s,A=i*l-a*u,S=p*d-c*y,k=p*m-h*y,I=p*v-f*y,z=c*m-h*d,C=c*v-f*d,E=h*v-f*m,P=g*E-x*C+b*z+w*I-_*k+A*S;return P?(t[0]=(s*E-u*C+l*z)*(P=1/P),t[1]=(i*C-n*E-a*z)*P,t[2]=(d*A-m*_+v*w)*P,t[3]=(h*_-c*A-f*w)*P,t[4]=(u*I-o*E-l*k)*P,t[5]=(r*E-i*I+a*k)*P,t[6]=(m*b-y*A-v*x)*P,t[7]=(p*A-h*b+f*x)*P,t[8]=(o*C-s*I+l*S)*P,t[9]=(n*I-r*C-a*S)*P,t[10]=(y*_-d*b+v*g)*P,t[11]=(c*b-p*_-f*g)*P,t[12]=(s*k-o*z-u*S)*P,t[13]=(r*z-n*k+i*S)*P,t[14]=(d*x-y*w-m*g)*P,t[15]=(p*w-c*x+h*g)*P,t):null},t.isChar=Gn,t.isMapboxURL=Z,t.keysDifference=function(t,e){var r=[];for(var n in t)n in e||r.push(n);return r},t.makeRequest=xt,t.mapObject=x,t.mercatorXfromLng=jl,t.mercatorYfromLat=ql,t.mercatorZfromAltitude=Nl,t.mul=lo,t.multiply=so,t.mvt=bs,t.nextPowerOfTwo=function(t){return t<=1?1:Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},t.normalize=function(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a)),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a,t},t.number=Ke,t.offscreenCanvasSupported=ft,t.ortho=function(t,e,r,n,i,a,o){var s=1/(e-r),u=1/(n-i),l=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*u,t[14]=(o+a)*l,t[15]=1,t},t.parseGlyphPBF=function(t){return new Ys(t).readFields(yu,[])},t.pbf=Ys,t.performSymbolLayout=function(t,e,r,n,i,a,o){t.createArrays(),t.tilePixelRatio=8192/(512*t.overscaling),t.compareText={},t.iconsNeedLinear=!1;var s=t.layers[0].layout,u=t.layers[0]._unevaluatedLayout._values,l={};if(\"composite\"===t.textSizeData.kind){var p=t.textSizeData,c=p.maxZoom;l.compositeTextSizes=[u[\"text-size\"].possiblyEvaluate(new si(p.minZoom),o),u[\"text-size\"].possiblyEvaluate(new si(c),o)];}if(\"composite\"===t.iconSizeData.kind){var h=t.iconSizeData,f=h.maxZoom;l.compositeIconSizes=[u[\"icon-size\"].possiblyEvaluate(new si(h.minZoom),o),u[\"icon-size\"].possiblyEvaluate(new si(f),o)];}l.layoutTextSize=u[\"text-size\"].possiblyEvaluate(new si(t.zoom+1),o),l.layoutIconSize=u[\"icon-size\"].possiblyEvaluate(new si(t.zoom+1),o),l.textMaxSize=u[\"text-size\"].possiblyEvaluate(new si(18));for(var y=24*s.get(\"text-line-height\"),d=\"map\"===s.get(\"text-rotation-alignment\")&&\"point\"!==s.get(\"symbol-placement\"),m=s.get(\"text-keep-upright\"),v=s.get(\"text-size\"),g=function(){var a=b[x],u=s.get(\"text-font\").evaluate(a,{},o).join(\",\"),p=v.evaluate(a,{},o),c=l.layoutTextSize.evaluate(a,{},o),h=l.layoutIconSize.evaluate(a,{},o),f={horizontal:{},vertical:void 0},g=a.text,w=[0,0];if(g){var _=g.toString(),S=24*s.get(\"text-letter-spacing\").evaluate(a,{},o),k=function(t){for(var e=0,r=t;e<r.length;e+=1)if(n=r[e].charCodeAt(0),Gn.Arabic(n)||Gn[\"Arabic Supplement\"](n)||Gn[\"Arabic Extended-A\"](n)||Gn[\"Arabic Presentation Forms-A\"](n)||Gn[\"Arabic Presentation Forms-B\"](n))return !1;var n;return !0}(_)?S:0,I=s.get(\"text-anchor\").evaluate(a,{},o),z=s.get(\"text-variable-anchor\");if(!z){var C=s.get(\"text-radial-offset\").evaluate(a,{},o);w=C?al(I,[24*C,il]):s.get(\"text-offset\").evaluate(a,{},o).map((function(t){return 24*t}));}var E=d?\"center\":s.get(\"text-justify\").evaluate(a,{},o),P=s.get(\"symbol-placement\"),M=\"point\"===P?24*s.get(\"text-max-width\").evaluate(a,{},o):0,B=function(){t.allowVerticalPlacement&&Zn(_)&&(f.vertical=Su(g,e,r,i,u,M,y,I,\"left\",k,w,wu.vertical,!0,P,c,p));};if(!d&&z){for(var T=\"auto\"===E?z.map((function(t){return ol(t)})):[E],V=!1,F=0;F<T.length;F++){var D=T[F];if(!f.horizontal[D])if(V)f.horizontal[D]=f.horizontal[0];else {var L=Su(g,e,r,i,u,M,y,\"center\",D,k,w,wu.horizontal,!1,P,c,p);L&&(f.horizontal[D]=L,V=1===L.positionedLines.length);}}B();}else {\"auto\"===E&&(E=ol(I));var O=Su(g,e,r,i,u,M,y,I,E,k,w,wu.horizontal,!1,P,c,p);O&&(f.horizontal[E]=O),B(),Zn(_)&&d&&m&&(f.vertical=Su(g,e,r,i,u,M,y,I,E,k,w,wu.vertical,!1,P,c,p));}}var R=void 0,U=!1;if(a.icon&&a.icon.name){var j=n[a.icon.name];j&&(R=function(t,e,r){var n=Bu(r),i=e[0]-t.displaySize[0]*n.horizontalAlign,a=e[1]-t.displaySize[1]*n.verticalAlign;return {image:t,top:a,bottom:a+t.displaySize[1],left:i,right:i+t.displaySize[0]}}(i[a.icon.name],s.get(\"icon-offset\").evaluate(a,{},o),s.get(\"icon-anchor\").evaluate(a,{},o)),U=j.sdf,void 0===t.sdfIcons?t.sdfIcons=j.sdf:t.sdfIcons!==j.sdf&&A(\"Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer\"),(j.pixelRatio!==t.pixelRatio||0!==s.get(\"icon-rotate\").constantOr(1))&&(t.iconsNeedLinear=!0));}var q=ul(f.horizontal)||f.vertical;t.iconsInText=!!q&&q.iconsInText,(q||R)&&function(t,e,r,n,i,a,o,s,u,l,p){var c=a.textMaxSize.evaluate(e,{});void 0===c&&(c=o);var h,f=t.layers[0].layout,y=f.get(\"icon-offset\").evaluate(e,{},p),d=ul(r.horizontal),m=o/24,v=t.tilePixelRatio*m,g=t.tilePixelRatio*c/24,x=t.tilePixelRatio*s,b=t.tilePixelRatio*f.get(\"symbol-spacing\"),w=f.get(\"text-padding\")*t.tilePixelRatio,_=f.get(\"icon-padding\")*t.tilePixelRatio,S=f.get(\"text-max-angle\")/180*Math.PI,k=\"map\"===f.get(\"text-rotation-alignment\")&&\"point\"!==f.get(\"symbol-placement\"),I=\"map\"===f.get(\"icon-rotation-alignment\")&&\"point\"!==f.get(\"symbol-placement\"),z=f.get(\"symbol-placement\"),C=b/2,E=f.get(\"icon-text-fit\");n&&\"none\"!==E&&(t.allowVerticalPlacement&&r.vertical&&(h=Vu(n,r.vertical,E,f.get(\"icon-text-fit-padding\"),y,m)),d&&(n=Vu(n,d,E,f.get(\"icon-text-fit-padding\"),y,m)));var P=function(s,c){c.x<0||c.x>=8192||c.y<0||c.y>=8192||function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,w,_,S,k){var I,z,C,E,P,M=t.addToLineVertexArray(e,r),B=0,T=0,V=0,F=0,D=-1,L=-1,O={},R=ha(\"\"),U=0,j=0;if(void 0===s._unevaluatedLayout.getValue(\"text-radial-offset\")?(U=(I=s.layout.get(\"text-offset\").evaluate(b,{},S).map((function(t){return 24*t})))[0],j=I[1]):(U=24*s.layout.get(\"text-radial-offset\").evaluate(b,{},S),j=il),t.allowVerticalPlacement&&n.vertical){var q=s.layout.get(\"text-rotate\").evaluate(b,{},S)+90;E=new Wu(u,e,l,p,c,n.vertical,h,f,y,q),o&&(P=new Wu(u,e,l,p,c,o,m,v,y,q));}if(i){var N=s.layout.get(\"icon-rotate\").evaluate(b,{}),K=\"none\"!==s.layout.get(\"icon-text-fit\"),G=Xu(i,N,_,K),Z=o?Xu(o,N,_,K):void 0;C=new Wu(u,e,l,p,c,i,m,v,!1,N),B=4*G.length;var X=t.iconSizeData,J=null;\"source\"===X.kind?(J=[128*s.layout.get(\"icon-size\").evaluate(b,{})])[0]>32640&&A(t.layerIds[0]+': Value for \"icon-size\" is >= 255. Reduce your \"icon-size\".'):\"composite\"===X.kind&&((J=[128*w.compositeIconSizes[0].evaluate(b,{},S),128*w.compositeIconSizes[1].evaluate(b,{},S)])[0]>32640||J[1]>32640)&&A(t.layerIds[0]+': Value for \"icon-size\" is >= 255. Reduce your \"icon-size\".'),t.addSymbols(t.icon,G,J,x,g,b,!1,e,M.lineStartIndex,M.lineLength,-1,S),D=t.icon.placedSymbolArray.length-1,Z&&(T=4*Z.length,t.addSymbols(t.icon,Z,J,x,g,b,wu.vertical,e,M.lineStartIndex,M.lineLength,-1,S),L=t.icon.placedSymbolArray.length-1);}for(var H in n.horizontal){var Y=n.horizontal[H];if(!z){R=ha(Y.text);var $=s.layout.get(\"text-rotate\").evaluate(b,{},S);z=new Wu(u,e,l,p,c,Y,h,f,y,$);}var W=1===Y.positionedLines.length;if(V+=sl(t,e,Y,a,s,y,b,d,M,n.vertical?wu.horizontal:wu.horizontalOnly,W?Object.keys(n.horizontal):[H],O,D,w,S),W)break}n.vertical&&(F+=sl(t,e,n.vertical,a,s,y,b,d,M,wu.vertical,[\"vertical\"],O,L,w,S));var Q=z?z.boxStartIndex:t.collisionBoxArray.length,tt=z?z.boxEndIndex:t.collisionBoxArray.length,et=E?E.boxStartIndex:t.collisionBoxArray.length,rt=E?E.boxEndIndex:t.collisionBoxArray.length,nt=C?C.boxStartIndex:t.collisionBoxArray.length,it=C?C.boxEndIndex:t.collisionBoxArray.length,at=P?P.boxStartIndex:t.collisionBoxArray.length,ot=P?P.boxEndIndex:t.collisionBoxArray.length,st=-1,ut=function(t,e){return t&&t.circleDiameter?Math.max(t.circleDiameter,e):e};st=ut(z,st),st=ut(E,st),st=ut(C,st);var lt=(st=ut(P,st))>-1?1:0;lt&&(st*=k/24),t.glyphOffsetArray.length>=vl.MAX_GLYPHS&&A(\"Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907\"),void 0!==b.sortKey&&t.addToSortKeyRanges(t.symbolInstances.length,b.sortKey),t.symbolInstances.emplaceBack(e.x,e.y,O.right>=0?O.right:-1,O.center>=0?O.center:-1,O.left>=0?O.left:-1,O.vertical||-1,D,L,R,Q,tt,et,rt,nt,it,at,ot,l,V,F,B,T,lt,0,h,U,j,st);}(t,c,s,r,n,i,h,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,v,w,k,u,x,_,I,y,e,a,l,p,o);};if(\"line\"===z)for(var M=0,B=Zu(e.geometry,0,0,8192,8192);M<B.length;M+=1)for(var T=B[M],V=0,F=Gu(T,b,S,r.vertical||d,n,24,g,t.overscaling,8192);V<F.length;V+=1){var D=F[V];d&&ll(t,d.text,C,D)||P(T,D);}else if(\"line-center\"===z)for(var L=0,O=e.geometry;L<O.length;L+=1){var R=O[L];if(R.length>1){var U=Ku(R,S,r.vertical||d,n,24,g);U&&P(R,U);}}else if(\"Polygon\"===e.type)for(var j=0,q=ns(e.geometry,0);j<q.length;j+=1){var N=q[j],K=el(N,16);P(N[0],new Fu(K.x,K.y,0));}else if(\"LineString\"===e.type)for(var G=0,Z=e.geometry;G<Z.length;G+=1){var X=Z[G];P(X,new Fu(X[0].x,X[0].y,0));}else if(\"Point\"===e.type)for(var J=0,H=e.geometry;J<H.length;J+=1)for(var Y=0,$=H[J];Y<$.length;Y+=1){var W=$[Y];P([W],new Fu(W.x,W.y,0));}}(t,a,f,R,n,l,c,h,w,U,o);},x=0,b=t.features;x<b.length;x+=1)g();a&&t.generateCollisionDebugBuffers();},t.perspective=function(t,e,r,n,i){var a,o=1/Math.tan(e/2);return t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=i&&i!==1/0?(t[10]=(i+n)*(a=1/(n-i)),t[14]=2*i*n*a):(t[10]=-1,t[14]=-2*n),t},t.pick=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n];i in t&&(r[i]=t[i]);}return r},t.plugin=oi,t.polygonIntersectsPolygon=Na,t.postMapLoadEvent=ot,t.postTurnstileEvent=it,t.potpack=vu,t.refProperties=[\"type\",\"source\",\"source-layer\",\"minzoom\",\"maxzoom\",\"filter\",\"layout\"],t.register=On,t.registerForPluginStateChange=function(t){return t({pluginStatus:Qn,pluginURL:ti}),ni.on(\"pluginStateChange\",t),t},t.renderColorRamp=wo,t.rotate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),u=Math.cos(r);return t[0]=n*u+a*s,t[1]=i*u+o*s,t[2]=n*-s+a*u,t[3]=i*-s+o*u,t},t.rotateX=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],u=e[7],l=e[8],p=e[9],c=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+l*n,t[5]=o*i+p*n,t[6]=s*i+c*n,t[7]=u*i+h*n,t[8]=l*i-a*n,t[9]=p*i-o*n,t[10]=c*i-s*n,t[11]=h*i-u*n,t},t.rotateZ=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],u=e[3],l=e[4],p=e[5],c=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+l*n,t[1]=o*i+p*n,t[2]=s*i+c*n,t[3]=u*i+h*n,t[4]=l*i-a*n,t[5]=p*i-o*n,t[6]=c*i-s*n,t[7]=h*i-u*n,t},t.scale=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},t.scale$1=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t},t.scale$2=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t},t.setCacheLimits=function(t,e){st=t,ut=e;},t.setRTLTextPlugin=function(t,e,r){if(void 0===r&&(r=!1),\"deferred\"===Qn||\"loading\"===Qn||\"loaded\"===Qn)throw new Error(\"setRTLTextPlugin cannot be called multiple times.\");ti=O.resolveURL(t),Qn=\"deferred\",Wn=e,ri(),r||ai();},t.sphericalToCartesian=function(t){var e=t[0],r=t[1],n=t[2];return r+=90,r*=Math.PI/180,n*=Math.PI/180,{x:e*Math.cos(r)*Math.sin(n),y:e*Math.sin(r)*Math.sin(n),z:e*Math.cos(n)}},t.sqrLen=function(t){var e=t[0],r=t[1];return e*e+r*r},t.styleSpec=Et,t.sub=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t},t.symbolSize=Ru,t.transformMat3=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t},t.transformMat4=po,t.translate=function(t,e,r){var n,i,a,o,s,u,l,p,c,h,f,y,d=r[0],m=r[1],v=r[2];return e===t?(t[12]=e[0]*d+e[4]*m+e[8]*v+e[12],t[13]=e[1]*d+e[5]*m+e[9]*v+e[13],t[14]=e[2]*d+e[6]*m+e[10]*v+e[14],t[15]=e[3]*d+e[7]*m+e[11]*v+e[15]):(i=e[1],a=e[2],o=e[3],s=e[4],u=e[5],l=e[6],p=e[7],c=e[8],h=e[9],f=e[10],y=e[11],t[0]=n=e[0],t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=u,t[6]=l,t[7]=p,t[8]=c,t[9]=h,t[10]=f,t[11]=y,t[12]=n*d+s*m+c*v+e[12],t[13]=i*d+u*m+h*v+e[13],t[14]=a*d+l*m+f*v+e[14],t[15]=o*d+p*m+y*v+e[15]),t},t.triggerPluginCompletionEvent=ei,t.uniqueId=y,t.validateCustomStyleLayer=function(t){var e=[],r=t.id;return void 0===r&&e.push({message:\"layers.\"+r+': missing required property \"id\"'}),void 0===t.render&&e.push({message:\"layers.\"+r+': missing required method \"render\"'}),t.renderingMode&&\"2d\"!==t.renderingMode&&\"3d\"!==t.renderingMode&&e.push({message:\"layers.\"+r+': property \"renderingMode\" must be either \"2d\" or \"3d\"'}),e},t.validateLight=En,t.validateStyle=Cn,t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.vectorTile=bs,t.version=\"1.13.3\",t.warnOnce=A,t.webpSupported=U,t.window=o,t.wrap=c;}));\n\ndefine([\"./shared\"],(function(e){\"use strict\";function t(e){var r=typeof e;if(\"number\"===r||\"boolean\"===r||\"string\"===r||null==e)return JSON.stringify(e);if(Array.isArray(e)){for(var i=\"[\",o=0,n=e;o<n.length;o+=1)i+=t(n[o])+\",\";return i+\"]\"}for(var a=Object.keys(e).sort(),s=\"{\",l=0;l<a.length;l++)s+=JSON.stringify(a[l])+\":\"+t(e[a[l]])+\",\";return s+\"}\"}function r(r){for(var i=\"\",o=0,n=e.refProperties;o<n.length;o+=1)i+=\"/\"+t(r[n[o]]);return i}var i=function(e){this.keyCache={},e&&this.replace(e);};i.prototype.replace=function(e){this._layerConfigs={},this._layers={},this.update(e,[]);},i.prototype.update=function(t,i){for(var o=this,n=0,a=t;n<a.length;n+=1){var s=a[n];this._layerConfigs[s.id]=s;var l=this._layers[s.id]=e.createStyleLayer(s);l._featureFilter=e.featureFilter(l.filter),this.keyCache[s.id]&&delete this.keyCache[s.id];}for(var u=0,h=i;u<h.length;u+=1){var c=h[u];delete this.keyCache[c],delete this._layerConfigs[c],delete this._layers[c];}this.familiesBySource={};for(var p=0,f=function(e,t){for(var i={},o=0;o<e.length;o++){var n=t&&t[e[o].id]||r(e[o]);t&&(t[e[o].id]=n);var a=i[n];a||(a=i[n]=[]),a.push(e[o]);}var s=[];for(var l in i)s.push(i[l]);return s}(e.values(this._layerConfigs),this.keyCache);p<f.length;p+=1){var d=f[p].map((function(e){return o._layers[e.id]})),g=d[0];if(\"none\"!==g.visibility){var v=g.source||\"\",m=this.familiesBySource[v];m||(m=this.familiesBySource[v]={});var y=g.sourceLayer||\"_geojsonTileLayer\",x=m[y];x||(x=m[y]=[]),x.push(d);}}};var o=function(t){var r={},i=[];for(var o in t){var n=t[o],a=r[o]={};for(var s in n){var l=n[+s];if(l&&0!==l.bitmap.width&&0!==l.bitmap.height){var u={x:0,y:0,w:l.bitmap.width+2,h:l.bitmap.height+2};i.push(u),a[s]={rect:u,metrics:l.metrics};}}}var h=e.potpack(i),c=new e.AlphaImage({width:h.w||1,height:h.h||1});for(var p in t){var f=t[p];for(var d in f){var g=f[+d];if(g&&0!==g.bitmap.width&&0!==g.bitmap.height){var v=r[p][d].rect;e.AlphaImage.copy(g.bitmap,c,{x:0,y:0},{x:v.x+1,y:v.y+1},g.bitmap);}}}this.image=c,this.positions=r;};e.register(\"GlyphAtlas\",o);var n=function(t){this.tileID=new e.OverscaledTileID(t.tileID.overscaledZ,t.tileID.wrap,t.tileID.canonical.z,t.tileID.canonical.x,t.tileID.canonical.y),this.uid=t.uid,this.zoom=t.zoom,this.pixelRatio=t.pixelRatio,this.tileSize=t.tileSize,this.source=t.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=t.showCollisionBoxes,this.collectResourceTiming=!!t.collectResourceTiming,this.returnDependencies=!!t.returnDependencies,this.promoteId=t.promoteId;};function a(t,r,i){for(var o=new e.EvaluationParameters(r),n=0,a=t;n<a.length;n+=1)a[n].recalculate(o,i);}function s(t,r){var i=e.getArrayBuffer(t.request,(function(t,i,o,n){t?r(t):i&&r(null,{vectorTile:new e.vectorTile.VectorTile(new e.pbf(i)),rawData:i,cacheControl:o,expires:n});}));return function(){i.cancel(),r();}}n.prototype.parse=function(t,r,i,n,s){var l=this;this.status=\"parsing\",this.data=t,this.collisionBoxArray=new e.CollisionBoxArray;var u=new e.DictionaryCoder(Object.keys(t.layers).sort()),h=new e.FeatureIndex(this.tileID,this.promoteId);h.bucketLayerIDs=[];var c,p,f,d,g={},v={featureIndex:h,iconDependencies:{},patternDependencies:{},glyphDependencies:{},availableImages:i},m=r.familiesBySource[this.source];for(var y in m){var x=t.layers[y];if(x){1===x.version&&e.warnOnce('Vector tile source \"'+this.source+'\" layer \"'+y+'\" does not use vector tile spec v2 and therefore may have some rendering errors.');for(var w=u.encode(y),S=[],I=0;I<x.length;I++){var M=x.feature(I),b=h.getId(M,y);S.push({feature:M,id:b,index:I,sourceLayerIndex:w});}for(var _=0,k=m[y];_<k.length;_+=1){var P=k[_],T=P[0];T.minzoom&&this.zoom<Math.floor(T.minzoom)||T.maxzoom&&this.zoom>=T.maxzoom||\"none\"!==T.visibility&&(a(P,this.zoom,i),(g[T.id]=T.createBucket({index:h.bucketLayerIDs.length,layers:P,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:w,sourceID:this.source})).populate(S,v,this.tileID.canonical),h.bucketLayerIDs.push(P.map((function(e){return e.id}))));}}}var C=e.mapObject(v.glyphDependencies,(function(e){return Object.keys(e).map(Number)}));Object.keys(C).length?n.send(\"getGlyphs\",{uid:this.uid,stacks:C},(function(e,t){c||(c=e,p=t,z.call(l));})):p={};var D=Object.keys(v.iconDependencies);D.length?n.send(\"getImages\",{icons:D,source:this.source,tileID:this.tileID,type:\"icons\"},(function(e,t){c||(c=e,f=t,z.call(l));})):f={};var L=Object.keys(v.patternDependencies);function z(){if(c)return s(c);if(p&&f&&d){var t=new o(p),r=new e.ImageAtlas(f,d);for(var n in g){var l=g[n];l instanceof e.SymbolBucket?(a(l.layers,this.zoom,i),e.performSymbolLayout(l,p,t.positions,f,r.iconPositions,this.showCollisionBoxes,this.tileID.canonical)):l.hasPattern&&(l instanceof e.LineBucket||l instanceof e.FillBucket||l instanceof e.FillExtrusionBucket)&&(a(l.layers,this.zoom,i),l.addFeatures(v,this.tileID.canonical,r.patternPositions));}this.status=\"done\",s(null,{buckets:e.values(g).filter((function(e){return !e.isEmpty()})),featureIndex:h,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:t.image,imageAtlas:r,glyphMap:this.returnDependencies?p:null,iconMap:this.returnDependencies?f:null,glyphPositions:this.returnDependencies?t.positions:null});}}L.length?n.send(\"getImages\",{icons:L,source:this.source,tileID:this.tileID,type:\"patterns\"},(function(e,t){c||(c=e,d=t,z.call(l));})):d={},z.call(this);};var l=function(e,t,r,i){this.actor=e,this.layerIndex=t,this.availableImages=r,this.loadVectorData=i||s,this.loading={},this.loaded={};};l.prototype.loadTile=function(t,r){var i=this,o=t.uid;this.loading||(this.loading={});var a=!!(t&&t.request&&t.request.collectResourceTiming)&&new e.RequestPerformance(t.request),s=this.loading[o]=new n(t);s.abort=this.loadVectorData(t,(function(t,n){if(delete i.loading[o],t||!n)return s.status=\"done\",i.loaded[o]=s,r(t);var l=n.rawData,u={};n.expires&&(u.expires=n.expires),n.cacheControl&&(u.cacheControl=n.cacheControl);var h={};if(a){var c=a.finish();c&&(h.resourceTiming=JSON.parse(JSON.stringify(c)));}s.vectorTile=n.vectorTile,s.parse(n.vectorTile,i.layerIndex,i.availableImages,i.actor,(function(t,i){if(t||!i)return r(t);r(null,e.extend({rawTileData:l.slice(0)},i,u,h));})),i.loaded=i.loaded||{},i.loaded[o]=s;}));},l.prototype.reloadTile=function(e,t){var r=this,i=this.loaded,o=e.uid,n=this;if(i&&i[o]){var a=i[o];a.showCollisionBoxes=e.showCollisionBoxes;var s=function(e,i){var o=a.reloadCallback;o&&(delete a.reloadCallback,a.parse(a.vectorTile,n.layerIndex,r.availableImages,n.actor,o)),t(e,i);};\"parsing\"===a.status?a.reloadCallback=s:\"done\"===a.status&&(a.vectorTile?a.parse(a.vectorTile,this.layerIndex,this.availableImages,this.actor,s):s());}},l.prototype.abortTile=function(e,t){var r=this.loading,i=e.uid;r&&r[i]&&r[i].abort&&(r[i].abort(),delete r[i]),t();},l.prototype.removeTile=function(e,t){var r=this.loaded,i=e.uid;r&&r[i]&&delete r[i],t();};var u=e.window.ImageBitmap,h=function(){this.loaded={};};function c(e,t){if(0!==e.length){p(e[0],t);for(var r=1;r<e.length;r++)p(e[r],!t);}}function p(e,t){for(var r=0,i=0,o=0,n=e.length,a=n-1;o<n;a=o++){var s=(e[o][0]-e[a][0])*(e[a][1]+e[o][1]),l=r+s;i+=Math.abs(r)>=Math.abs(s)?r-l+s:s-l+r,r=l;}r+i>=0!=!!t&&e.reverse();}h.prototype.loadTile=function(t,r){var i=t.uid,o=t.encoding,n=t.rawImageData,a=u&&n instanceof u?this.getImageData(n):n,s=new e.DEMData(i,a,o);this.loaded=this.loaded||{},this.loaded[i]=s,r(null,s);},h.prototype.getImageData=function(t){this.offscreenCanvas&&this.offscreenCanvasContext||(this.offscreenCanvas=new OffscreenCanvas(t.width,t.height),this.offscreenCanvasContext=this.offscreenCanvas.getContext(\"2d\")),this.offscreenCanvas.width=t.width,this.offscreenCanvas.height=t.height,this.offscreenCanvasContext.drawImage(t,0,0,t.width,t.height);var r=this.offscreenCanvasContext.getImageData(-1,-1,t.width+2,t.height+2);return this.offscreenCanvasContext.clearRect(0,0,this.offscreenCanvas.width,this.offscreenCanvas.height),new e.RGBAImage({width:r.width,height:r.height},r.data)},h.prototype.removeTile=function(e){var t=this.loaded,r=e.uid;t&&t[r]&&delete t[r];};var f=e.vectorTile.VectorTileFeature.prototype.toGeoJSON,d=function(t){this._feature=t,this.extent=e.EXTENT,this.type=t.type,this.properties=t.tags,\"id\"in t&&!isNaN(t.id)&&(this.id=parseInt(t.id,10));};d.prototype.loadGeometry=function(){if(1===this._feature.type){for(var t=[],r=0,i=this._feature.geometry;r<i.length;r+=1){var o=i[r];t.push([new e.Point$1(o[0],o[1])]);}return t}for(var n=[],a=0,s=this._feature.geometry;a<s.length;a+=1){for(var l=[],u=0,h=s[a];u<h.length;u+=1){var c=h[u];l.push(new e.Point$1(c[0],c[1]));}n.push(l);}return n},d.prototype.toGeoJSON=function(e,t,r){return f.call(this,e,t,r)};var g=function(t){this.layers={_geojsonTileLayer:this},this.name=\"_geojsonTileLayer\",this.extent=e.EXTENT,this.length=t.length,this._features=t;};g.prototype.feature=function(e){return new d(this._features[e])};var v=e.vectorTile.VectorTileFeature,m=y;function y(e,t){this.options=t||{},this.features=e,this.length=e.length;}function x(e,t){this.id=\"number\"==typeof e.id?e.id:void 0,this.type=e.type,this.rawGeometry=1===e.type?[e.geometry]:e.geometry,this.properties=e.tags,this.extent=t||4096;}y.prototype.feature=function(e){return new x(this.features[e],this.options.extent)},x.prototype.loadGeometry=function(){var t=this.rawGeometry;this.geometry=[];for(var r=0;r<t.length;r++){for(var i=t[r],o=[],n=0;n<i.length;n++)o.push(new e.Point$1(i[n][0],i[n][1]));this.geometry.push(o);}return this.geometry},x.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var e=this.geometry,t=1/0,r=-1/0,i=1/0,o=-1/0,n=0;n<e.length;n++)for(var a=e[n],s=0;s<a.length;s++){var l=a[s];t=Math.min(t,l.x),r=Math.max(r,l.x),i=Math.min(i,l.y),o=Math.max(o,l.y);}return [t,i,r,o]},x.prototype.toGeoJSON=v.prototype.toGeoJSON;var w=I,S=m;function I(t){var r=new e.pbf;return function(e,t){for(var r in e.layers)t.writeMessage(3,M,e.layers[r]);}(t,r),r.finish()}function M(e,t){var r;t.writeVarintField(15,e.version||1),t.writeStringField(1,e.name||\"\"),t.writeVarintField(5,e.extent||4096);var i={keys:[],values:[],keycache:{},valuecache:{}};for(r=0;r<e.length;r++)i.feature=e.feature(r),t.writeMessage(2,b,i);var o=i.keys;for(r=0;r<o.length;r++)t.writeStringField(3,o[r]);var n=i.values;for(r=0;r<n.length;r++)t.writeMessage(4,C,n[r]);}function b(e,t){var r=e.feature;void 0!==r.id&&t.writeVarintField(1,r.id),t.writeMessage(2,_,e),t.writeVarintField(3,r.type),t.writeMessage(4,T,r);}function _(e,t){var r=e.feature,i=e.keys,o=e.values,n=e.keycache,a=e.valuecache;for(var s in r.properties){var l=n[s];void 0===l&&(i.push(s),n[s]=l=i.length-1),t.writeVarint(l);var u=r.properties[s],h=typeof u;\"string\"!==h&&\"boolean\"!==h&&\"number\"!==h&&(u=JSON.stringify(u));var c=h+\":\"+u,p=a[c];void 0===p&&(o.push(u),a[c]=p=o.length-1),t.writeVarint(p);}}function k(e,t){return (t<<3)+(7&e)}function P(e){return e<<1^e>>31}function T(e,t){for(var r=e.loadGeometry(),i=e.type,o=0,n=0,a=r.length,s=0;s<a;s++){var l=r[s],u=1;1===i&&(u=l.length),t.writeVarint(k(1,u));for(var h=3===i?l.length-1:l.length,c=0;c<h;c++){1===c&&1!==i&&t.writeVarint(k(2,h-1));var p=l[c].x-o,f=l[c].y-n;t.writeVarint(P(p)),t.writeVarint(P(f)),o+=p,n+=f;}3===i&&t.writeVarint(k(7,1));}}function C(e,t){var r=typeof e;\"string\"===r?t.writeStringField(1,e):\"boolean\"===r?t.writeBooleanField(7,e):\"number\"===r&&(e%1!=0?t.writeDoubleField(3,e):e<0?t.writeSVarintField(6,e):t.writeVarintField(5,e));}function D(e,t,r,i){L(e,r,i),L(t,2*r,2*i),L(t,2*r+1,2*i+1);}function L(e,t,r){var i=e[t];e[t]=e[r],e[r]=i;}function z(e,t,r,i){var o=e-r,n=t-i;return o*o+n*n}w.fromVectorTileJs=I,w.fromGeojsonVt=function(e,t){t=t||{};var r={};for(var i in e)r[i]=new m(e[i].features,t),r[i].name=i,r[i].version=t.version,r[i].extent=t.extent;return I({layers:r})},w.GeoJSONWrapper=S;var O=function(e){return e[0]},E=function(e){return e[1]},F=function(e,t,r,i,o){void 0===t&&(t=O),void 0===r&&(r=E),void 0===i&&(i=64),void 0===o&&(o=Float64Array),this.nodeSize=i,this.points=e;for(var n=e.length<65536?Uint16Array:Uint32Array,a=this.ids=new n(e.length),s=this.coords=new o(2*e.length),l=0;l<e.length;l++)a[l]=l,s[2*l]=t(e[l]),s[2*l+1]=r(e[l]);!function e(t,r,i,o,n,a){if(!(n-o<=i)){var s=o+n>>1;!function e(t,r,i,o,n,a){for(;n>o;){if(n-o>600){var s=n-o+1,l=i-o+1,u=Math.log(s),h=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*h*(s-h)/s)*(l-s/2<0?-1:1);e(t,r,i,Math.max(o,Math.floor(i-l*h/s+c)),Math.min(n,Math.floor(i+(s-l)*h/s+c)),a);}var p=r[2*i+a],f=o,d=n;for(D(t,r,o,i),r[2*n+a]>p&&D(t,r,o,n);f<d;){for(D(t,r,f,d),f++,d--;r[2*f+a]<p;)f++;for(;r[2*d+a]>p;)d--;}r[2*o+a]===p?D(t,r,o,d):D(t,r,++d,n),d<=i&&(o=d+1),i<=d&&(n=d-1);}}(t,r,s,o,n,a%2),e(t,r,i,o,s-1,a+1),e(t,r,i,s+1,n,a+1);}}(a,s,i,0,a.length-1,0);};F.prototype.range=function(e,t,r,i){return function(e,t,r,i,o,n,a){for(var s,l,u=[0,e.length-1,0],h=[];u.length;){var c=u.pop(),p=u.pop(),f=u.pop();if(p-f<=a)for(var d=f;d<=p;d++)l=t[2*d+1],(s=t[2*d])>=r&&s<=o&&l>=i&&l<=n&&h.push(e[d]);else {var g=Math.floor((f+p)/2);l=t[2*g+1],(s=t[2*g])>=r&&s<=o&&l>=i&&l<=n&&h.push(e[g]);var v=(c+1)%2;(0===c?r<=s:i<=l)&&(u.push(f),u.push(g-1),u.push(v)),(0===c?o>=s:n>=l)&&(u.push(g+1),u.push(p),u.push(v));}}return h}(this.ids,this.coords,e,t,r,i,this.nodeSize)},F.prototype.within=function(e,t,r){return function(e,t,r,i,o,n){for(var a=[0,e.length-1,0],s=[],l=o*o;a.length;){var u=a.pop(),h=a.pop(),c=a.pop();if(h-c<=n)for(var p=c;p<=h;p++)z(t[2*p],t[2*p+1],r,i)<=l&&s.push(e[p]);else {var f=Math.floor((c+h)/2),d=t[2*f],g=t[2*f+1];z(d,g,r,i)<=l&&s.push(e[f]);var v=(u+1)%2;(0===u?r-o<=d:i-o<=g)&&(a.push(c),a.push(f-1),a.push(v)),(0===u?r+o>=d:i+o>=g)&&(a.push(f+1),a.push(h),a.push(v));}}return s}(this.ids,this.coords,e,t,r,this.nodeSize)};var N={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(e){return e}},J=function(e){this.options=V(Object.create(N),e),this.trees=new Array(this.options.maxZoom+1);};function Z(e,t,r,i,o){return {x:e,y:t,zoom:1/0,id:r,parentId:-1,numPoints:i,properties:o}}function A(e,t){var r=e.geometry.coordinates,i=r[1];return {x:Y(r[0]),y:j(i),zoom:1/0,index:t,parentId:-1}}function B(e){return {type:\"Feature\",id:e.id,properties:G(e),geometry:{type:\"Point\",coordinates:[(i=e.x,360*(i-.5)),(t=e.y,r=(180-360*t)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var t,r,i;}function G(e){var t=e.numPoints,r=t>=1e4?Math.round(t/1e3)+\"k\":t>=1e3?Math.round(t/100)/10+\"k\":t;return V(V({},e.properties),{cluster:!0,cluster_id:e.id,point_count:t,point_count_abbreviated:r})}function Y(e){return e/360+.5}function j(e){var t=Math.sin(e*Math.PI/180),r=.5-.25*Math.log((1+t)/(1-t))/Math.PI;return r<0?0:r>1?1:r}function V(e,t){for(var r in t)e[r]=t[r];return e}function X(e){return e.x}function W(e){return e.y}function R(e,t,r,i,o,n){var a=o-r,s=n-i;if(0!==a||0!==s){var l=((e-r)*a+(t-i)*s)/(a*a+s*s);l>1?(r=o,i=n):l>0&&(r+=a*l,i+=s*l);}return (a=e-r)*a+(s=t-i)*s}function q(e,t,r,i){var o={id:void 0===e?null:e,type:t,geometry:r,tags:i,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(e){var t=e.geometry,r=e.type;if(\"Point\"===r||\"MultiPoint\"===r||\"LineString\"===r)U(e,t);else if(\"Polygon\"===r||\"MultiLineString\"===r)for(var i=0;i<t.length;i++)U(e,t[i]);else if(\"MultiPolygon\"===r)for(i=0;i<t.length;i++)for(var o=0;o<t[i].length;o++)U(e,t[i][o]);}(o),o}function U(e,t){for(var r=0;r<t.length;r+=3)e.minX=Math.min(e.minX,t[r]),e.minY=Math.min(e.minY,t[r+1]),e.maxX=Math.max(e.maxX,t[r]),e.maxY=Math.max(e.maxY,t[r+1]);}function $(e,t,r,i){if(t.geometry){var o=t.geometry.coordinates,n=t.geometry.type,a=Math.pow(r.tolerance/((1<<r.maxZoom)*r.extent),2),s=[],l=t.id;if(r.promoteId?l=t.properties[r.promoteId]:r.generateId&&(l=i||0),\"Point\"===n)H(o,s);else if(\"MultiPoint\"===n)for(var u=0;u<o.length;u++)H(o[u],s);else if(\"LineString\"===n)K(o,s,a,!1);else if(\"MultiLineString\"===n){if(r.lineMetrics){for(u=0;u<o.length;u++)K(o[u],s=[],a,!1),e.push(q(l,\"LineString\",s,t.properties));return}Q(o,s,a,!1);}else if(\"Polygon\"===n)Q(o,s,a,!0);else {if(\"MultiPolygon\"!==n){if(\"GeometryCollection\"===n){for(u=0;u<t.geometry.geometries.length;u++)$(e,{id:l,geometry:t.geometry.geometries[u],properties:t.properties},r,i);return}throw new Error(\"Input data is not a valid GeoJSON object.\")}for(u=0;u<o.length;u++){var h=[];Q(o[u],h,a,!0),s.push(h);}}e.push(q(l,n,s,t.properties));}}function H(e,t){t.push(ee(e[0])),t.push(te(e[1])),t.push(0);}function K(e,t,r,i){for(var o,n,a=0,s=0;s<e.length;s++){var l=ee(e[s][0]),u=te(e[s][1]);t.push(l),t.push(u),t.push(0),s>0&&(a+=i?(o*u-l*n)/2:Math.sqrt(Math.pow(l-o,2)+Math.pow(u-n,2))),o=l,n=u;}var h=t.length-3;t[2]=1,function e(t,r,i,o){for(var n,a=o,s=i-r>>1,l=i-r,u=t[r],h=t[r+1],c=t[i],p=t[i+1],f=r+3;f<i;f+=3){var d=R(t[f],t[f+1],u,h,c,p);if(d>a)n=f,a=d;else if(d===a){var g=Math.abs(f-s);g<l&&(n=f,l=g);}}a>o&&(n-r>3&&e(t,r,n,o),t[n+2]=a,i-n>3&&e(t,n,i,o));}(t,0,h,r),t[h+2]=1,t.size=Math.abs(a),t.start=0,t.end=t.size;}function Q(e,t,r,i){for(var o=0;o<e.length;o++){var n=[];K(e[o],n,r,i),t.push(n);}}function ee(e){return e/360+.5}function te(e){var t=Math.sin(e*Math.PI/180),r=.5-.25*Math.log((1+t)/(1-t))/Math.PI;return r<0?0:r>1?1:r}function re(e,t,r,i,o,n,a,s){if(i/=t,n>=(r/=t)&&a<i)return e;if(a<r||n>=i)return null;for(var l=[],u=0;u<e.length;u++){var h=e[u],c=h.geometry,p=h.type,f=0===o?h.minX:h.minY,d=0===o?h.maxX:h.maxY;if(f>=r&&d<i)l.push(h);else if(!(d<r||f>=i)){var g=[];if(\"Point\"===p||\"MultiPoint\"===p)ie(c,g,r,i,o);else if(\"LineString\"===p)oe(c,g,r,i,o,!1,s.lineMetrics);else if(\"MultiLineString\"===p)ae(c,g,r,i,o,!1);else if(\"Polygon\"===p)ae(c,g,r,i,o,!0);else if(\"MultiPolygon\"===p)for(var v=0;v<c.length;v++){var m=[];ae(c[v],m,r,i,o,!0),m.length&&g.push(m);}if(g.length){if(s.lineMetrics&&\"LineString\"===p){for(v=0;v<g.length;v++)l.push(q(h.id,p,g[v],h.tags));continue}\"LineString\"!==p&&\"MultiLineString\"!==p||(1===g.length?(p=\"LineString\",g=g[0]):p=\"MultiLineString\"),\"Point\"!==p&&\"MultiPoint\"!==p||(p=3===g.length?\"Point\":\"MultiPoint\"),l.push(q(h.id,p,g,h.tags));}}}return l.length?l:null}function ie(e,t,r,i,o){for(var n=0;n<e.length;n+=3){var a=e[n+o];a>=r&&a<=i&&(t.push(e[n]),t.push(e[n+1]),t.push(e[n+2]));}}function oe(e,t,r,i,o,n,a){for(var s,l,u=ne(e),h=0===o?le:ue,c=e.start,p=0;p<e.length-3;p+=3){var f=e[p],d=e[p+1],g=e[p+2],v=e[p+3],m=e[p+4],y=0===o?f:d,x=0===o?v:m,w=!1;a&&(s=Math.sqrt(Math.pow(f-v,2)+Math.pow(d-m,2))),y<r?x>r&&(l=h(u,f,d,v,m,r),a&&(u.start=c+s*l)):y>i?x<i&&(l=h(u,f,d,v,m,i),a&&(u.start=c+s*l)):se(u,f,d,g),x<r&&y>=r&&(l=h(u,f,d,v,m,r),w=!0),x>i&&y<=i&&(l=h(u,f,d,v,m,i),w=!0),!n&&w&&(a&&(u.end=c+s*l),t.push(u),u=ne(e)),a&&(c+=s);}var S=e.length-3;f=e[S],d=e[S+1],g=e[S+2],(y=0===o?f:d)>=r&&y<=i&&se(u,f,d,g),S=u.length-3,n&&S>=3&&(u[S]!==u[0]||u[S+1]!==u[1])&&se(u,u[0],u[1],u[2]),u.length&&t.push(u);}function ne(e){var t=[];return t.size=e.size,t.start=e.start,t.end=e.end,t}function ae(e,t,r,i,o,n){for(var a=0;a<e.length;a++)oe(e[a],t,r,i,o,n,!1);}function se(e,t,r,i){e.push(t),e.push(r),e.push(i);}function le(e,t,r,i,o,n){var a=(n-t)/(i-t);return e.push(n),e.push(r+(o-r)*a),e.push(1),a}function ue(e,t,r,i,o,n){var a=(n-r)/(o-r);return e.push(t+(i-t)*a),e.push(n),e.push(1),a}function he(e,t){for(var r=[],i=0;i<e.length;i++){var o,n=e[i],a=n.type;if(\"Point\"===a||\"MultiPoint\"===a||\"LineString\"===a)o=ce(n.geometry,t);else if(\"MultiLineString\"===a||\"Polygon\"===a){o=[];for(var s=0;s<n.geometry.length;s++)o.push(ce(n.geometry[s],t));}else if(\"MultiPolygon\"===a)for(o=[],s=0;s<n.geometry.length;s++){for(var l=[],u=0;u<n.geometry[s].length;u++)l.push(ce(n.geometry[s][u],t));o.push(l);}r.push(q(n.id,a,o,n.tags));}return r}function ce(e,t){var r=[];r.size=e.size,void 0!==e.start&&(r.start=e.start,r.end=e.end);for(var i=0;i<e.length;i+=3)r.push(e[i]+t,e[i+1],e[i+2]);return r}function pe(e,t){if(e.transformed)return e;var r,i,o,n=1<<e.z,a=e.x,s=e.y;for(r=0;r<e.features.length;r++){var l=e.features[r],u=l.geometry,h=l.type;if(l.geometry=[],1===h)for(i=0;i<u.length;i+=2)l.geometry.push(fe(u[i],u[i+1],t,n,a,s));else for(i=0;i<u.length;i++){var c=[];for(o=0;o<u[i].length;o+=2)c.push(fe(u[i][o],u[i][o+1],t,n,a,s));l.geometry.push(c);}}return e.transformed=!0,e}function fe(e,t,r,i,o,n){return [Math.round(r*(e*i-o)),Math.round(r*(t*i-n))]}function de(e,t,r,i,o){for(var n=t===o.maxZoom?0:o.tolerance/((1<<t)*o.extent),a={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:i,z:t,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s=0;s<e.length;s++){a.numFeatures++,ge(a,e[s],n,o);var l=e[s].minX,u=e[s].minY,h=e[s].maxX,c=e[s].maxY;l<a.minX&&(a.minX=l),u<a.minY&&(a.minY=u),h>a.maxX&&(a.maxX=h),c>a.maxY&&(a.maxY=c);}return a}function ge(e,t,r,i){var o=t.geometry,n=t.type,a=[];if(\"Point\"===n||\"MultiPoint\"===n)for(var s=0;s<o.length;s+=3)a.push(o[s]),a.push(o[s+1]),e.numPoints++,e.numSimplified++;else if(\"LineString\"===n)ve(a,o,e,r,!1,!1);else if(\"MultiLineString\"===n||\"Polygon\"===n)for(s=0;s<o.length;s++)ve(a,o[s],e,r,\"Polygon\"===n,0===s);else if(\"MultiPolygon\"===n)for(var l=0;l<o.length;l++){var u=o[l];for(s=0;s<u.length;s++)ve(a,u[s],e,r,!0,0===s);}if(a.length){var h=t.tags||null;if(\"LineString\"===n&&i.lineMetrics){for(var c in h={},t.tags)h[c]=t.tags[c];h.mapbox_clip_start=o.start/o.size,h.mapbox_clip_end=o.end/o.size;}var p={geometry:a,type:\"Polygon\"===n||\"MultiPolygon\"===n?3:\"LineString\"===n||\"MultiLineString\"===n?2:1,tags:h};null!==t.id&&(p.id=t.id),e.features.push(p);}}function ve(e,t,r,i,o,n){var a=i*i;if(i>0&&t.size<(o?a:i))r.numPoints+=t.length/3;else {for(var s=[],l=0;l<t.length;l+=3)(0===i||t[l+2]>a)&&(r.numSimplified++,s.push(t[l]),s.push(t[l+1])),r.numPoints++;o&&function(e,t){for(var r=0,i=0,o=e.length,n=o-2;i<o;n=i,i+=2)r+=(e[i]-e[n])*(e[i+1]+e[n+1]);if(r>0===t)for(i=0,o=e.length;i<o/2;i+=2){var a=e[i],s=e[i+1];e[i]=e[o-2-i],e[i+1]=e[o-1-i],e[o-2-i]=a,e[o-1-i]=s;}}(s,n),e.push(s);}}function me(e,t){var r=(t=this.options=function(e,t){for(var r in t)e[r]=t[r];return e}(Object.create(this.options),t)).debug;if(r&&console.time(\"preprocess data\"),t.maxZoom<0||t.maxZoom>24)throw new Error(\"maxZoom should be in the 0-24 range\");if(t.promoteId&&t.generateId)throw new Error(\"promoteId and generateId cannot be used together.\");var i=function(e,t){var r=[];if(\"FeatureCollection\"===e.type)for(var i=0;i<e.features.length;i++)$(r,e.features[i],t,i);else $(r,\"Feature\"===e.type?e:{geometry:e},t);return r}(e,t);this.tiles={},this.tileCoords=[],r&&(console.timeEnd(\"preprocess data\"),console.log(\"index: maxZoom: %d, maxPoints: %d\",t.indexMaxZoom,t.indexMaxPoints),console.time(\"generate tiles\"),this.stats={},this.total=0),(i=function(e,t){var r=t.buffer/t.extent,i=e,o=re(e,1,-1-r,r,0,-1,2,t),n=re(e,1,1-r,2+r,0,-1,2,t);return (o||n)&&(i=re(e,1,-r,1+r,0,-1,2,t)||[],o&&(i=he(o,1).concat(i)),n&&(i=i.concat(he(n,-1)))),i}(i,t)).length&&this.splitTile(i,0,0,0),r&&(i.length&&console.log(\"features: %d, points: %d\",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd(\"generate tiles\"),console.log(\"tiles generated:\",this.total,JSON.stringify(this.stats)));}function ye(e,t,r){return 32*((1<<e)*r+t)+e}function xe(e,t){var r=e.tileID.canonical;if(!this._geoJSONIndex)return t(null,null);var i=this._geoJSONIndex.getTile(r.z,r.x,r.y);if(!i)return t(null,null);var o=new g(i.features),n=w(o);0===n.byteOffset&&n.byteLength===n.buffer.byteLength||(n=new Uint8Array(n)),t(null,{vectorTile:o,rawData:n.buffer});}J.prototype.load=function(e){var t=this.options,r=t.log,i=t.minZoom,o=t.maxZoom,n=t.nodeSize;r&&console.time(\"total time\");var a=\"prepare \"+e.length+\" points\";r&&console.time(a),this.points=e;for(var s=[],l=0;l<e.length;l++)e[l].geometry&&s.push(A(e[l],l));this.trees[o+1]=new F(s,X,W,n,Float32Array),r&&console.timeEnd(a);for(var u=o;u>=i;u--){var h=+Date.now();s=this._cluster(s,u),this.trees[u]=new F(s,X,W,n,Float32Array),r&&console.log(\"z%d: %d clusters in %dms\",u,s.length,+Date.now()-h);}return r&&console.timeEnd(\"total time\"),this},J.prototype.getClusters=function(e,t){var r=((e[0]+180)%360+360)%360-180,i=Math.max(-90,Math.min(90,e[1])),o=180===e[2]?180:((e[2]+180)%360+360)%360-180,n=Math.max(-90,Math.min(90,e[3]));if(e[2]-e[0]>=360)r=-180,o=180;else if(r>o){var a=this.getClusters([r,i,180,n],t),s=this.getClusters([-180,i,o,n],t);return a.concat(s)}for(var l=this.trees[this._limitZoom(t)],u=[],h=0,c=l.range(Y(r),j(n),Y(o),j(i));h<c.length;h+=1){var p=l.points[c[h]];u.push(p.numPoints?B(p):this.points[p.index]);}return u},J.prototype.getChildren=function(e){var t=this._getOriginId(e),r=this._getOriginZoom(e),i=\"No cluster with the specified id.\",o=this.trees[r];if(!o)throw new Error(i);var n=o.points[t];if(!n)throw new Error(i);for(var a=this.options.radius/(this.options.extent*Math.pow(2,r-1)),s=[],l=0,u=o.within(n.x,n.y,a);l<u.length;l+=1){var h=o.points[u[l]];h.parentId===e&&s.push(h.numPoints?B(h):this.points[h.index]);}if(0===s.length)throw new Error(i);return s},J.prototype.getLeaves=function(e,t,r){var i=[];return this._appendLeaves(i,e,t=t||10,r=r||0,0),i},J.prototype.getTile=function(e,t,r){var i=this.trees[this._limitZoom(e)],o=Math.pow(2,e),n=this.options,a=n.radius/n.extent,s=(r-a)/o,l=(r+1+a)/o,u={features:[]};return this._addTileFeatures(i.range((t-a)/o,s,(t+1+a)/o,l),i.points,t,r,o,u),0===t&&this._addTileFeatures(i.range(1-a/o,s,1,l),i.points,o,r,o,u),t===o-1&&this._addTileFeatures(i.range(0,s,a/o,l),i.points,-1,r,o,u),u.features.length?u:null},J.prototype.getClusterExpansionZoom=function(e){for(var t=this._getOriginZoom(e)-1;t<=this.options.maxZoom;){var r=this.getChildren(e);if(t++,1!==r.length)break;e=r[0].properties.cluster_id;}return t},J.prototype._appendLeaves=function(e,t,r,i,o){for(var n=0,a=this.getChildren(t);n<a.length;n+=1){var s=a[n],l=s.properties;if(l&&l.cluster?o+l.point_count<=i?o+=l.point_count:o=this._appendLeaves(e,l.cluster_id,r,i,o):o<i?o++:e.push(s),e.length===r)break}return o},J.prototype._addTileFeatures=function(e,t,r,i,o,n){for(var a=0,s=e;a<s.length;a+=1){var l=t[s[a]],u=l.numPoints,h={type:1,geometry:[[Math.round(this.options.extent*(l.x*o-r)),Math.round(this.options.extent*(l.y*o-i))]],tags:u?G(l):this.points[l.index].properties},c=void 0;u?c=l.id:this.options.generateId?c=l.index:this.points[l.index].id&&(c=this.points[l.index].id),void 0!==c&&(h.id=c),n.features.push(h);}},J.prototype._limitZoom=function(e){return Math.max(this.options.minZoom,Math.min(+e,this.options.maxZoom+1))},J.prototype._cluster=function(e,t){for(var r=[],i=this.options,o=i.reduce,n=i.minPoints,a=i.radius/(i.extent*Math.pow(2,t)),s=0;s<e.length;s++){var l=e[s];if(!(l.zoom<=t)){l.zoom=t;for(var u=this.trees[t+1],h=u.within(l.x,l.y,a),c=l.numPoints||1,p=c,f=0,d=h;f<d.length;f+=1){var g=u.points[d[f]];g.zoom>t&&(p+=g.numPoints||1);}if(p>=n){for(var v=l.x*c,m=l.y*c,y=o&&c>1?this._map(l,!0):null,x=(s<<5)+(t+1)+this.points.length,w=0,S=h;w<S.length;w+=1){var I=u.points[S[w]];if(!(I.zoom<=t)){I.zoom=t;var M=I.numPoints||1;v+=I.x*M,m+=I.y*M,I.parentId=x,o&&(y||(y=this._map(l,!0)),o(y,this._map(I)));}}l.parentId=x,r.push(Z(v/p,m/p,x,p,y));}else if(r.push(l),p>1)for(var b=0,_=h;b<_.length;b+=1){var k=u.points[_[b]];k.zoom<=t||(k.zoom=t,r.push(k));}}}return r},J.prototype._getOriginId=function(e){return e-this.points.length>>5},J.prototype._getOriginZoom=function(e){return (e-this.points.length)%32},J.prototype._map=function(e,t){if(e.numPoints)return t?V({},e.properties):e.properties;var r=this.points[e.index].properties,i=this.options.map(r);return t&&i===r?V({},i):i},me.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},me.prototype.splitTile=function(e,t,r,i,o,n,a){for(var s=[e,t,r,i],l=this.options,u=l.debug;s.length;){i=s.pop(),r=s.pop(),t=s.pop(),e=s.pop();var h=1<<t,c=ye(t,r,i),p=this.tiles[c];if(!p&&(u>1&&console.time(\"creation\"),p=this.tiles[c]=de(e,t,r,i,l),this.tileCoords.push({z:t,x:r,y:i}),u)){u>1&&(console.log(\"tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\",t,r,i,p.numFeatures,p.numPoints,p.numSimplified),console.timeEnd(\"creation\"));var f=\"z\"+t;this.stats[f]=(this.stats[f]||0)+1,this.total++;}if(p.source=e,o){if(t===l.maxZoom||t===o)continue;var d=1<<o-t;if(r!==Math.floor(n/d)||i!==Math.floor(a/d))continue}else if(t===l.indexMaxZoom||p.numPoints<=l.indexMaxPoints)continue;if(p.source=null,0!==e.length){u>1&&console.time(\"clipping\");var g,v,m,y,x,w,S=.5*l.buffer/l.extent,I=.5-S,M=.5+S,b=1+S;g=v=m=y=null,x=re(e,h,r-S,r+M,0,p.minX,p.maxX,l),w=re(e,h,r+I,r+b,0,p.minX,p.maxX,l),e=null,x&&(g=re(x,h,i-S,i+M,1,p.minY,p.maxY,l),v=re(x,h,i+I,i+b,1,p.minY,p.maxY,l),x=null),w&&(m=re(w,h,i-S,i+M,1,p.minY,p.maxY,l),y=re(w,h,i+I,i+b,1,p.minY,p.maxY,l),w=null),u>1&&console.timeEnd(\"clipping\"),s.push(g||[],t+1,2*r,2*i),s.push(v||[],t+1,2*r,2*i+1),s.push(m||[],t+1,2*r+1,2*i),s.push(y||[],t+1,2*r+1,2*i+1);}}},me.prototype.getTile=function(e,t,r){var i=this.options,o=i.extent,n=i.debug;if(e<0||e>24)return null;var a=1<<e,s=ye(e,t=(t%a+a)%a,r);if(this.tiles[s])return pe(this.tiles[s],o);n>1&&console.log(\"drilling down to z%d-%d-%d\",e,t,r);for(var l,u=e,h=t,c=r;!l&&u>0;)u--,h=Math.floor(h/2),c=Math.floor(c/2),l=this.tiles[ye(u,h,c)];return l&&l.source?(n>1&&console.log(\"found parent tile z%d-%d-%d\",u,h,c),n>1&&console.time(\"drilling down\"),this.splitTile(l.source,u,h,c,e,t,r),n>1&&console.timeEnd(\"drilling down\"),this.tiles[s]?pe(this.tiles[s],o):null):null};var we=function(t){function r(e,r,i,o){t.call(this,e,r,i,xe),o&&(this.loadGeoJSON=o);}return t&&(r.__proto__=t),(r.prototype=Object.create(t&&t.prototype)).constructor=r,r.prototype.loadData=function(e,t){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=t,this._pendingLoadDataParams=e,this._state&&\"Idle\"!==this._state?this._state=\"NeedsLoadData\":(this._state=\"Coalescing\",this._loadData());},r.prototype._loadData=function(){var t=this;if(this._pendingCallback&&this._pendingLoadDataParams){var r=this._pendingCallback,i=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var o=!!(i&&i.request&&i.request.collectResourceTiming)&&new e.RequestPerformance(i.request);this.loadGeoJSON(i,(function(n,a){if(n||!a)return r(n);if(\"object\"!=typeof a)return r(new Error(\"Input data given to '\"+i.source+\"' is not a valid GeoJSON object.\"));!function e(t,r){var i,o=t&&t.type;if(\"FeatureCollection\"===o)for(i=0;i<t.features.length;i++)e(t.features[i],r);else if(\"GeometryCollection\"===o)for(i=0;i<t.geometries.length;i++)e(t.geometries[i],r);else if(\"Feature\"===o)e(t.geometry,r);else if(\"Polygon\"===o)c(t.coordinates,r);else if(\"MultiPolygon\"===o)for(i=0;i<t.coordinates.length;i++)c(t.coordinates[i],r);return t}(a,!0);try{if(i.filter){var s=e.createExpression(i.filter,{type:\"boolean\",\"property-type\":\"data-driven\",overridable:!1,transition:!1});if(\"error\"===s.result)throw new Error(s.value.map((function(e){return e.key+\": \"+e.message})).join(\", \"));var l=a.features.filter((function(e){return s.value.evaluate({zoom:0},e)}));a={type:\"FeatureCollection\",features:l};}t._geoJSONIndex=i.cluster?new J(function(t){var r=t.superclusterOptions,i=t.clusterProperties;if(!i||!r)return r;for(var o={},n={},a={accumulated:null,zoom:0},s={properties:null},l=Object.keys(i),u=0,h=l;u<h.length;u+=1){var c=h[u],p=i[c],f=p[0],d=e.createExpression(p[1]),g=e.createExpression(\"string\"==typeof f?[f,[\"accumulated\"],[\"get\",c]]:f);o[c]=d.value,n[c]=g.value;}return r.map=function(e){s.properties=e;for(var t={},r=0,i=l;r<i.length;r+=1){var n=i[r];t[n]=o[n].evaluate(a,s);}return t},r.reduce=function(e,t){s.properties=t;for(var r=0,i=l;r<i.length;r+=1){var o=i[r];a.accumulated=e[o],e[o]=n[o].evaluate(a,s);}},r}(i)).load(a.features):function(e,t){return new me(e,t)}(a,i.geojsonVtOptions);}catch(n){return r(n)}t.loaded={};var u={};if(o){var h=o.finish();h&&(u.resourceTiming={},u.resourceTiming[i.source]=JSON.parse(JSON.stringify(h)));}r(null,u);}));}},r.prototype.coalesce=function(){\"Coalescing\"===this._state?this._state=\"Idle\":\"NeedsLoadData\"===this._state&&(this._state=\"Coalescing\",this._loadData());},r.prototype.reloadTile=function(e,r){var i=this.loaded;return i&&i[e.uid]?t.prototype.reloadTile.call(this,e,r):this.loadTile(e,r)},r.prototype.loadGeoJSON=function(t,r){if(t.request)e.getJSON(t.request,r);else {if(\"string\"!=typeof t.data)return r(new Error(\"Input data given to '\"+t.source+\"' is not a valid GeoJSON object.\"));try{return r(null,JSON.parse(t.data))}catch(e){return r(new Error(\"Input data given to '\"+t.source+\"' is not a valid GeoJSON object.\"))}}},r.prototype.removeSource=function(e,t){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),t();},r.prototype.getClusterExpansionZoom=function(e,t){try{t(null,this._geoJSONIndex.getClusterExpansionZoom(e.clusterId));}catch(e){t(e);}},r.prototype.getClusterChildren=function(e,t){try{t(null,this._geoJSONIndex.getChildren(e.clusterId));}catch(e){t(e);}},r.prototype.getClusterLeaves=function(e,t){try{t(null,this._geoJSONIndex.getLeaves(e.clusterId,e.limit,e.offset));}catch(e){t(e);}},r}(l),Se=function(t){var r=this;this.self=t,this.actor=new e.Actor(t,this),this.layerIndexes={},this.availableImages={},this.workerSourceTypes={vector:l,geojson:we},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(e,t){if(r.workerSourceTypes[e])throw new Error('Worker source with name \"'+e+'\" already registered.');r.workerSourceTypes[e]=t;},this.self.registerRTLTextPlugin=function(t){if(e.plugin.isParsed())throw new Error(\"RTL text plugin already registered.\");e.plugin.applyArabicShaping=t.applyArabicShaping,e.plugin.processBidirectionalText=t.processBidirectionalText,e.plugin.processStyledBidirectionalText=t.processStyledBidirectionalText;};};return Se.prototype.setReferrer=function(e,t){this.referrer=t;},Se.prototype.setImages=function(e,t,r){for(var i in this.availableImages[e]=t,this.workerSources[e]){var o=this.workerSources[e][i];for(var n in o)o[n].availableImages=t;}r();},Se.prototype.setLayers=function(e,t,r){this.getLayerIndex(e).replace(t),r();},Se.prototype.updateLayers=function(e,t,r){this.getLayerIndex(e).update(t.layers,t.removedIds),r();},Se.prototype.loadTile=function(e,t,r){this.getWorkerSource(e,t.type,t.source).loadTile(t,r);},Se.prototype.loadDEMTile=function(e,t,r){this.getDEMWorkerSource(e,t.source).loadTile(t,r);},Se.prototype.reloadTile=function(e,t,r){this.getWorkerSource(e,t.type,t.source).reloadTile(t,r);},Se.prototype.abortTile=function(e,t,r){this.getWorkerSource(e,t.type,t.source).abortTile(t,r);},Se.prototype.removeTile=function(e,t,r){this.getWorkerSource(e,t.type,t.source).removeTile(t,r);},Se.prototype.removeDEMTile=function(e,t){this.getDEMWorkerSource(e,t.source).removeTile(t);},Se.prototype.removeSource=function(e,t,r){if(this.workerSources[e]&&this.workerSources[e][t.type]&&this.workerSources[e][t.type][t.source]){var i=this.workerSources[e][t.type][t.source];delete this.workerSources[e][t.type][t.source],void 0!==i.removeSource?i.removeSource(t,r):r();}},Se.prototype.loadWorkerSource=function(e,t,r){try{this.self.importScripts(t.url),r();}catch(e){r(e.toString());}},Se.prototype.syncRTLPluginState=function(t,r,i){try{e.plugin.setState(r);var o=e.plugin.getPluginURL();if(e.plugin.isLoaded()&&!e.plugin.isParsed()&&null!=o){this.self.importScripts(o);var n=e.plugin.isParsed();i(n?void 0:new Error(\"RTL Text Plugin failed to import scripts from \"+o),n);}}catch(e){i(e.toString());}},Se.prototype.getAvailableImages=function(e){var t=this.availableImages[e];return t||(t=[]),t},Se.prototype.getLayerIndex=function(e){var t=this.layerIndexes[e];return t||(t=this.layerIndexes[e]=new i),t},Se.prototype.getWorkerSource=function(e,t,r){var i=this;return this.workerSources[e]||(this.workerSources[e]={}),this.workerSources[e][t]||(this.workerSources[e][t]={}),this.workerSources[e][t][r]||(this.workerSources[e][t][r]=new this.workerSourceTypes[t]({send:function(t,r,o){i.actor.send(t,r,o,e);}},this.getLayerIndex(e),this.getAvailableImages(e))),this.workerSources[e][t][r]},Se.prototype.getDEMWorkerSource=function(e,t){return this.demWorkerSources[e]||(this.demWorkerSources[e]={}),this.demWorkerSources[e][t]||(this.demWorkerSources[e][t]=new h),this.demWorkerSources[e][t]},Se.prototype.enforceCacheSizeLimit=function(t,r){e.enforceCacheSizeLimit(r);},\"undefined\"!=typeof WorkerGlobalScope&&\"undefined\"!=typeof self&&self instanceof WorkerGlobalScope&&(self.worker=new Se(self)),Se}));\n\ndefine([\"./shared\"],(function(t){\"use strict\";var e=t.createCommonjsModule((function(t){function e(t){return !i(t)}function i(t){return \"undefined\"==typeof window||\"undefined\"==typeof document?\"not a browser\":Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray?Function.prototype&&Function.prototype.bind?Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions?\"JSON\"in window&&\"parse\"in JSON&&\"stringify\"in JSON?function(){if(!(\"Worker\"in window&&\"Blob\"in window&&\"URL\"in window))return !1;var t,e,i=new Blob([\"\"],{type:\"text/javascript\"}),o=URL.createObjectURL(i);try{e=new Worker(o),t=!0;}catch(e){t=!1;}return e&&e.terminate(),URL.revokeObjectURL(o),t}()?\"Uint8ClampedArray\"in window?ArrayBuffer.isView?function(){var t=document.createElement(\"canvas\");t.width=t.height=1;var e=t.getContext(\"2d\");if(!e)return !1;var i=e.getImageData(0,0,1,1);return i&&i.width===t.width}()?(void 0===o[i=t&&t.failIfMajorPerformanceCaveat]&&(o[i]=function(t){var i=function(t){var i=document.createElement(\"canvas\"),o=Object.create(e.webGLContextAttributes);return o.failIfMajorPerformanceCaveat=t,i.probablySupportsContext?i.probablySupportsContext(\"webgl\",o)||i.probablySupportsContext(\"experimental-webgl\",o):i.supportsContext?i.supportsContext(\"webgl\",o)||i.supportsContext(\"experimental-webgl\",o):i.getContext(\"webgl\",o)||i.getContext(\"experimental-webgl\",o)}(t);if(!i)return !1;var o=i.createShader(i.VERTEX_SHADER);return !(!o||i.isContextLost())&&(i.shaderSource(o,\"void main() {}\"),i.compileShader(o),!0===i.getShaderParameter(o,i.COMPILE_STATUS))}(i)),o[i]?void 0:\"insufficient WebGL support\"):\"insufficient Canvas/getImageData support\":\"insufficient ArrayBuffer support\":\"insufficient Uint8ClampedArray support\":\"insufficient worker support\":\"insufficient JSON support\":\"insufficient Object support\":\"insufficient Function support\":\"insufficent Array support\";var i;}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e,window.mapboxgl.notSupportedReason=i);var o={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0};})),i={create:function(e,i,o){var r=t.window.document.createElement(e);return void 0!==i&&(r.className=i),o&&o.appendChild(r),r},createNS:function(e,i){return t.window.document.createElementNS(e,i)}},o=t.window.document&&t.window.document.documentElement.style;function r(t){if(!o)return t[0];for(var e=0;e<t.length;e++)if(t[e]in o)return t[e];return t[0]}var a,n=r([\"userSelect\",\"MozUserSelect\",\"WebkitUserSelect\",\"msUserSelect\"]);i.disableDrag=function(){o&&n&&(a=o[n],o[n]=\"none\");},i.enableDrag=function(){o&&n&&(o[n]=a);};var s=r([\"transform\",\"WebkitTransform\"]);i.setTransform=function(t,e){t.style[s]=e;};var l=!1;try{var c=Object.defineProperty({},\"passive\",{get:function(){l=!0;}});t.window.addEventListener(\"test\",c,c),t.window.removeEventListener(\"test\",c,c);}catch(t){l=!1;}i.addEventListener=function(t,e,i,o){void 0===o&&(o={}),t.addEventListener(e,i,\"passive\"in o&&l?o:o.capture);},i.removeEventListener=function(t,e,i,o){void 0===o&&(o={}),t.removeEventListener(e,i,\"passive\"in o&&l?o:o.capture);};var u=function(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener(\"click\",u,!0);};function h(t){var e=t.userImage;return !!(e&&e.render&&e.render())&&(t.data.replace(new Uint8Array(e.data.buffer)),!0)}i.suppressClick=function(){t.window.addEventListener(\"click\",u,!0),t.window.setTimeout((function(){t.window.removeEventListener(\"click\",u,!0);}),0);},i.mousePos=function(e,i){var o=e.getBoundingClientRect();return new t.Point(i.clientX-o.left-e.clientLeft,i.clientY-o.top-e.clientTop)},i.touchPos=function(e,i){for(var o=e.getBoundingClientRect(),r=[],a=0;a<i.length;a++)r.push(new t.Point(i[a].clientX-o.left-e.clientLeft,i[a].clientY-o.top-e.clientTop));return r},i.mouseButton=function(e){return void 0!==t.window.InstallTrigger&&2===e.button&&e.ctrlKey&&t.window.navigator.platform.toUpperCase().indexOf(\"MAC\")>=0?0:e.button},i.remove=function(t){t.parentNode&&t.parentNode.removeChild(t);};var p=function(e){function i(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0;}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.isLoaded=function(){return this.loaded},i.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,i=this.requestors;e<i.length;e+=1){var o=i[e];this._notify(o.ids,o.callback);}this.requestors=[];}},i.prototype.getImage=function(t){return this.images[t]},i.prototype.addImage=function(t,e){this._validate(t,e)&&(this.images[t]=e);},i.prototype._validate=function(e,i){var o=!0;return this._validateStretch(i.stretchX,i.data&&i.data.width)||(this.fire(new t.ErrorEvent(new Error('Image \"'+e+'\" has invalid \"stretchX\" value'))),o=!1),this._validateStretch(i.stretchY,i.data&&i.data.height)||(this.fire(new t.ErrorEvent(new Error('Image \"'+e+'\" has invalid \"stretchY\" value'))),o=!1),this._validateContent(i.content,i)||(this.fire(new t.ErrorEvent(new Error('Image \"'+e+'\" has invalid \"content\" value'))),o=!1),o},i.prototype._validateStretch=function(t,e){if(!t)return !0;for(var i=0,o=0,r=t;o<r.length;o+=1){var a=r[o];if(a[0]<i||a[1]<a[0]||e<a[1])return !1;i=a[1];}return !0},i.prototype._validateContent=function(t,e){return !(t&&(4!==t.length||t[0]<0||e.data.width<t[0]||t[1]<0||e.data.height<t[1]||t[2]<0||e.data.width<t[2]||t[3]<0||e.data.height<t[3]||t[2]<t[0]||t[3]<t[1]))},i.prototype.updateImage=function(t,e){e.version=this.images[t].version+1,this.images[t]=e,this.updatedImages[t]=!0;},i.prototype.removeImage=function(t){var e=this.images[t];delete this.images[t],delete this.patterns[t],e.userImage&&e.userImage.onRemove&&e.userImage.onRemove();},i.prototype.listImages=function(){return Object.keys(this.images)},i.prototype.getImages=function(t,e){var i=!0;if(!this.isLoaded())for(var o=0,r=t;o<r.length;o+=1)this.images[r[o]]||(i=!1);this.isLoaded()||i?this._notify(t,e):this.requestors.push({ids:t,callback:e});},i.prototype._notify=function(e,i){for(var o={},r=0,a=e;r<a.length;r+=1){var n=a[r];this.images[n]||this.fire(new t.Event(\"styleimagemissing\",{id:n}));var s=this.images[n];s?o[n]={data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,stretchX:s.stretchX,stretchY:s.stretchY,content:s.content,hasRenderCallback:Boolean(s.userImage&&s.userImage.render)}:t.warnOnce('Image \"'+n+'\" could not be loaded. Please make sure you have added the image with map.addImage() or a \"sprite\" property in your style. You can provide missing images by listening for the \"styleimagemissing\" map event.');}i(null,o);},i.prototype.getPixelSize=function(){var t=this.atlasImage;return {width:t.width,height:t.height}},i.prototype.getPattern=function(e){var i=this.patterns[e],o=this.getImage(e);if(!o)return null;if(i&&i.position.version===o.version)return i.position;if(i)i.position.version=o.version;else {var r={w:o.data.width+2,h:o.data.height+2,x:0,y:0},a=new t.ImagePosition(r,o);this.patterns[e]={bin:r,position:a};}return this._updatePatternAtlas(),this.patterns[e].position},i.prototype.bind=function(e){var i=e.gl;this.atlasTexture?this.dirty&&(this.atlasTexture.update(this.atlasImage),this.dirty=!1):this.atlasTexture=new t.Texture(e,this.atlasImage,i.RGBA),this.atlasTexture.bind(i.LINEAR,i.CLAMP_TO_EDGE);},i.prototype._updatePatternAtlas=function(){var e=[];for(var i in this.patterns)e.push(this.patterns[i].bin);var o=t.potpack(e),r=o.w,a=o.h,n=this.atlasImage;for(var s in n.resize({width:r||1,height:a||1}),this.patterns){var l=this.patterns[s].bin,c=l.x+1,u=l.y+1,h=this.images[s].data,p=h.width,d=h.height;t.RGBAImage.copy(h,n,{x:0,y:0},{x:c,y:u},{width:p,height:d}),t.RGBAImage.copy(h,n,{x:0,y:d-1},{x:c,y:u-1},{width:p,height:1}),t.RGBAImage.copy(h,n,{x:0,y:0},{x:c,y:u+d},{width:p,height:1}),t.RGBAImage.copy(h,n,{x:p-1,y:0},{x:c-1,y:u},{width:1,height:d}),t.RGBAImage.copy(h,n,{x:0,y:0},{x:c+p,y:u},{width:1,height:d});}this.dirty=!0;},i.prototype.beginFrame=function(){this.callbackDispatchedThisFrame={};},i.prototype.dispatchRenderCallbacks=function(t){for(var e=0,i=t;e<i.length;e+=1){var o=i[e];if(!this.callbackDispatchedThisFrame[o]){this.callbackDispatchedThisFrame[o]=!0;var r=this.images[o];h(r)&&this.updateImage(o,r);}}},i}(t.Evented),d=m,_=m,f=1e20;function m(t,e,i,o,r,a){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=o||.25,this.fontFamily=r||\"sans-serif\",this.fontWeight=a||\"normal\",this.radius=i||8;var n=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement(\"canvas\"),this.canvas.width=this.canvas.height=n,this.ctx=this.canvas.getContext(\"2d\"),this.ctx.font=this.fontWeight+\" \"+this.fontSize+\"px \"+this.fontFamily,this.ctx.textBaseline=\"middle\",this.ctx.fillStyle=\"black\",this.gridOuter=new Float64Array(n*n),this.gridInner=new Float64Array(n*n),this.f=new Float64Array(n),this.d=new Float64Array(n),this.z=new Float64Array(n+1),this.v=new Int16Array(n),this.middle=Math.round(n/2*(navigator.userAgent.indexOf(\"Gecko/\")>=0?1.2:1));}function g(t,e,i,o,r,a,n){for(var s=0;s<e;s++){for(var l=0;l<i;l++)o[l]=t[l*e+s];for(v(o,r,a,n,i),l=0;l<i;l++)t[l*e+s]=r[l];}for(l=0;l<i;l++){for(s=0;s<e;s++)o[s]=t[l*e+s];for(v(o,r,a,n,e),s=0;s<e;s++)t[l*e+s]=Math.sqrt(r[s]);}}function v(t,e,i,o,r){i[0]=0,o[0]=-f,o[1]=+f;for(var a=1,n=0;a<r;a++){for(var s=(t[a]+a*a-(t[i[n]]+i[n]*i[n]))/(2*a-2*i[n]);s<=o[n];)n--,s=(t[a]+a*a-(t[i[n]]+i[n]*i[n]))/(2*a-2*i[n]);i[++n]=a,o[n]=s,o[n+1]=+f;}for(a=0,n=0;a<r;a++){for(;o[n+1]<a;)n++;e[a]=(a-i[n])*(a-i[n])+t[i[n]];}}m.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),i=new Uint8ClampedArray(this.size*this.size),o=0;o<this.size*this.size;o++){var r=e.data[4*o+3]/255;this.gridOuter[o]=1===r?0:0===r?f:Math.pow(Math.max(0,.5-r),2),this.gridInner[o]=1===r?f:0===r?0:Math.pow(Math.max(0,r-.5),2);}for(g(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),g(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),o=0;o<this.size*this.size;o++)i[o]=Math.max(0,Math.min(255,Math.round(255-255*((this.gridOuter[o]-this.gridInner[o])/this.radius+this.cutoff))));return i},d.default=_;var y=function(t,e){this.requestManager=t,this.localIdeographFontFamily=e,this.entries={};};y.prototype.setURL=function(t){this.url=t;},y.prototype.getGlyphs=function(e,i){var o=this,r=[];for(var a in e)for(var n=0,s=e[a];n<s.length;n+=1)r.push({stack:a,id:s[n]});t.asyncAll(r,(function(t,e){var i=t.stack,r=t.id,a=o.entries[i];a||(a=o.entries[i]={glyphs:{},requests:{},ranges:{}});var n=a.glyphs[r];if(void 0===n){if(n=o._tinySDF(a,i,r))return a.glyphs[r]=n,void e(null,{stack:i,id:r,glyph:n});var s=Math.floor(r/256);if(256*s>65535)e(new Error(\"glyphs > 65535 not supported\"));else if(a.ranges[s])e(null,{stack:i,id:r,glyph:n});else {var l=a.requests[s];l||(l=a.requests[s]=[],y.loadGlyphRange(i,s,o.url,o.requestManager,(function(t,e){if(e){for(var i in e)o._doesCharSupportLocalGlyph(+i)||(a.glyphs[+i]=e[+i]);a.ranges[s]=!0;}for(var r=0,n=l;r<n.length;r+=1)(0,n[r])(t,e);delete a.requests[s];}))),l.push((function(t,o){t?e(t):o&&e(null,{stack:i,id:r,glyph:o[r]||null});}));}}else e(null,{stack:i,id:r,glyph:n});}),(function(t,e){if(t)i(t);else if(e){for(var o={},r=0,a=e;r<a.length;r+=1){var n=a[r],s=n.stack,l=n.id,c=n.glyph;(o[s]||(o[s]={}))[l]=c&&{id:c.id,bitmap:c.bitmap.clone(),metrics:c.metrics};}i(null,o);}}));},y.prototype._doesCharSupportLocalGlyph=function(e){return !!this.localIdeographFontFamily&&(t.isChar[\"CJK Unified Ideographs\"](e)||t.isChar[\"Hangul Syllables\"](e)||t.isChar.Hiragana(e)||t.isChar.Katakana(e))},y.prototype._tinySDF=function(e,i,o){var r=this.localIdeographFontFamily;if(r&&this._doesCharSupportLocalGlyph(o)){var a=e.tinySDF;if(!a){var n=\"400\";/bold/i.test(i)?n=\"900\":/medium/i.test(i)?n=\"500\":/light/i.test(i)&&(n=\"200\"),a=e.tinySDF=new y.TinySDF(24,3,8,.25,r,n);}return {id:o,bitmap:new t.AlphaImage({width:30,height:30},a.draw(String.fromCharCode(o))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},y.loadGlyphRange=function(e,i,o,r,a){var n=256*i,s=n+255,l=r.transformRequest(r.normalizeGlyphsURL(o).replace(\"{fontstack}\",e).replace(\"{range}\",n+\"-\"+s),t.ResourceType.Glyphs);t.getArrayBuffer(l,(function(e,i){if(e)a(e);else if(i){for(var o={},r=0,n=t.parseGlyphPBF(i);r<n.length;r+=1){var s=n[r];o[s.id]=s;}a(null,o);}}));},y.TinySDF=d;var x=function(){this.specification=t.styleSpec.light.position;};x.prototype.possiblyEvaluate=function(e,i){return t.sphericalToCartesian(e.expression.evaluate(i))},x.prototype.interpolate=function(e,i,o){return {x:t.number(e.x,i.x,o),y:t.number(e.y,i.y,o),z:t.number(e.z,i.z,o)}};var b=new t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new x,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),w=function(e){function i(i){e.call(this),this._transitionable=new t.Transitionable(b),this.setLight(i),this._transitioning=this._transitionable.untransitioned();}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.getLight=function(){return this._transitionable.serialize()},i.prototype.setLight=function(e,i){if(void 0===i&&(i={}),!this._validate(t.validateLight,e,i))for(var o in e){var r=e[o];t.endsWith(o,\"-transition\")?this._transitionable.setTransition(o.slice(0,-\"-transition\".length),r):this._transitionable.setValue(o,r);}},i.prototype.updateTransitions=function(t){this._transitioning=this._transitionable.transitioned(t,this._transitioning);},i.prototype.hasTransition=function(){return this._transitioning.hasTransition()},i.prototype.recalculate=function(t){this.properties=this._transitioning.possiblyEvaluate(t);},i.prototype._validate=function(e,i,o){return (!o||!1!==o.validate)&&t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:i,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},i}(t.Evented),T=function(t,e){this.width=t,this.height=e,this.nextRow=0,this.data=new Uint8Array(this.width*this.height),this.dashEntry={};};T.prototype.getDash=function(t,e){var i=t.join(\",\")+String(e);return this.dashEntry[i]||(this.dashEntry[i]=this.addDash(t,e)),this.dashEntry[i]},T.prototype.getDashRanges=function(t,e,i){var o=[],r=t.length%2==1?-t[t.length-1]*i:0,a=t[0]*i,n=!0;o.push({left:r,right:a,isDash:n,zeroLength:0===t[0]});for(var s=t[0],l=1;l<t.length;l++){var c=t[l];o.push({left:r=s*i,right:a=(s+=c)*i,isDash:n=!n,zeroLength:0===c});}return o},T.prototype.addRoundDash=function(t,e,i){for(var o=e/2,r=-i;r<=i;r++)for(var a=this.width*(this.nextRow+i+r),n=0,s=t[n],l=0;l<this.width;l++){l/s.right>1&&(s=t[++n]);var c=Math.abs(l-s.left),u=Math.abs(l-s.right),h=Math.min(c,u),p=void 0,d=r/i*(o+1);if(s.isDash){var _=o-Math.abs(d);p=Math.sqrt(h*h+_*_);}else p=o-Math.sqrt(h*h+d*d);this.data[a+l]=Math.max(0,Math.min(255,p+128));}},T.prototype.addRegularDash=function(t){for(var e=t.length-1;e>=0;--e){var i=t[e],o=t[e+1];i.zeroLength?t.splice(e,1):o&&o.isDash===i.isDash&&(o.left=i.left,t.splice(e,1));}var r=t[0],a=t[t.length-1];r.isDash===a.isDash&&(r.left=a.left-this.width,a.right=r.right+this.width);for(var n=this.width*this.nextRow,s=0,l=t[s],c=0;c<this.width;c++){c/l.right>1&&(l=t[++s]);var u=Math.abs(c-l.left),h=Math.abs(c-l.right),p=Math.min(u,h);this.data[n+c]=Math.max(0,Math.min(255,(l.isDash?p:-p)+128));}},T.prototype.addDash=function(e,i){var o=i?7:0,r=2*o+1;if(this.nextRow+r>this.height)return t.warnOnce(\"LineAtlas out of space\"),null;for(var a=0,n=0;n<e.length;n++)a+=e[n];if(0!==a){var s=this.width/a,l=this.getDashRanges(e,this.width,s);i?this.addRoundDash(l,s,o):this.addRegularDash(l);}var c={y:(this.nextRow+o+.5)/this.height,height:2*o/this.height,width:a};return this.nextRow+=r,this.dirty=!0,c},T.prototype.bind=function(t){var e=t.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.ALPHA,e.UNSIGNED_BYTE,this.data))):(this.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.ALPHA,this.width,this.height,0,e.ALPHA,e.UNSIGNED_BYTE,this.data));};var E=function e(i,o){this.workerPool=i,this.actors=[],this.currentActor=0,this.id=t.uniqueId();for(var r=this.workerPool.acquire(this.id),a=0;a<r.length;a++){var n=new e.Actor(r[a],o,this.id);n.name=\"Worker \"+a,this.actors.push(n);}};function I(e,i,o){var r=function(r,a){if(r)return o(r);if(a){var n=t.pick(t.extend(a,e),[\"tiles\",\"minzoom\",\"maxzoom\",\"attribution\",\"mapbox_logo\",\"bounds\",\"scheme\",\"tileSize\",\"encoding\"]);a.vector_layers&&(n.vectorLayers=a.vector_layers,n.vectorLayerIds=n.vectorLayers.map((function(t){return t.id}))),n.tiles=i.canonicalizeTileset(n,e.url),o(null,n);}};return e.url?t.getJSON(i.transformRequest(i.normalizeSourceURL(e.url),t.ResourceType.Source),r):t.browser.frame((function(){return r(null,e)}))}E.prototype.broadcast=function(e,i,o){t.asyncAll(this.actors,(function(t,o){t.send(e,i,o);}),o=o||function(){});},E.prototype.getActor=function(){return this.currentActor=(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]},E.prototype.remove=function(){this.actors.forEach((function(t){t.remove();})),this.actors=[],this.workerPool.release(this.id);},E.Actor=t.Actor;var P=function(e,i,o){this.bounds=t.LngLatBounds.convert(this.validateBounds(e)),this.minzoom=i||0,this.maxzoom=o||24;};P.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},P.prototype.contains=function(e){var i=Math.pow(2,e.z),o=Math.floor(t.mercatorXfromLng(this.bounds.getWest())*i),r=Math.floor(t.mercatorYfromLat(this.bounds.getNorth())*i),a=Math.ceil(t.mercatorXfromLng(this.bounds.getEast())*i),n=Math.ceil(t.mercatorYfromLat(this.bounds.getSouth())*i);return e.x>=o&&e.x<a&&e.y>=r&&e.y<n};var S=function(e){function i(i,o,r,a){if(e.call(this),this.id=i,this.dispatcher=r,this.type=\"vector\",this.minzoom=0,this.maxzoom=22,this.scheme=\"xyz\",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,this._loaded=!1,t.extend(this,t.pick(o,[\"url\",\"scheme\",\"tileSize\",\"promoteId\"])),this._options=t.extend({type:\"vector\"},o),this._collectResourceTiming=o.collectResourceTiming,512!==this.tileSize)throw new Error(\"vector tile sources must have a tileSize of 512\");this.setEventedParent(a);}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._tileJSONRequest=I(this._options,this.map._requestManager,(function(i,o){e._tileJSONRequest=null,e._loaded=!0,i?e.fire(new t.ErrorEvent(i)):o&&(t.extend(e,o),o.bounds&&(e.tileBounds=new P(o.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(o.tiles,e.map._requestManager._customAccessToken),t.postMapLoadEvent(o.tiles,e.map._getMapId(),e.map._requestManager._skuToken,e.map._requestManager._customAccessToken),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})));}));},i.prototype.loaded=function(){return this._loaded},i.prototype.hasTile=function(t){return !this.tileBounds||this.tileBounds.contains(t.canonical)},i.prototype.onAdd=function(t){this.map=t,this.load();},i.prototype.setSourceProperty=function(t){this._tileJSONRequest&&this._tileJSONRequest.cancel(),t(),this.map.style.sourceCaches[this.id].clearTiles(),this.load();},i.prototype.setTiles=function(t){var e=this;return this.setSourceProperty((function(){e._options.tiles=t;})),this},i.prototype.setUrl=function(t){var e=this;return this.setSourceProperty((function(){e.url=t,e._options.url=t;})),this},i.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null);},i.prototype.serialize=function(){return t.extend({},this._options)},i.prototype.loadTile=function(e,i){var o=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme)),r={request:this.map._requestManager.transformRequest(o,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};function a(o,r){return delete e.request,e.aborted?i(null):o&&404!==o.status?i(o):(r&&r.resourceTiming&&(e.resourceTiming=r.resourceTiming),this.map._refreshExpiredTiles&&r&&e.setExpiryData(r),e.loadVectorData(r,this.map.painter),t.cacheEntryPossiblyAdded(this.dispatcher),i(null),void(e.reloadCallback&&(this.loadTile(e,e.reloadCallback),e.reloadCallback=null)))}r.request.collectResourceTiming=this._collectResourceTiming,e.actor&&\"expired\"!==e.state?\"loading\"===e.state?e.reloadCallback=i:e.request=e.actor.send(\"reloadTile\",r,a.bind(this)):(e.actor=this.dispatcher.getActor(),e.request=e.actor.send(\"loadTile\",r,a.bind(this)));},i.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.actor&&t.actor.send(\"abortTile\",{uid:t.uid,type:this.type,source:this.id},void 0);},i.prototype.unloadTile=function(t){t.unloadVectorData(),t.actor&&t.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id},void 0);},i.prototype.hasTransition=function(){return !1},i}(t.Evented),C=function(e){function i(i,o,r,a){e.call(this),this.id=i,this.dispatcher=r,this.setEventedParent(a),this.type=\"raster\",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme=\"xyz\",this.tileSize=512,this._loaded=!1,this._options=t.extend({type:\"raster\"},o),t.extend(this,t.pick(o,[\"url\",\"scheme\",\"tileSize\"]));}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._tileJSONRequest=I(this._options,this.map._requestManager,(function(i,o){e._tileJSONRequest=null,e._loaded=!0,i?e.fire(new t.ErrorEvent(i)):o&&(t.extend(e,o),o.bounds&&(e.tileBounds=new P(o.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(o.tiles),t.postMapLoadEvent(o.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})));}));},i.prototype.loaded=function(){return this._loaded},i.prototype.onAdd=function(t){this.map=t,this.load();},i.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null);},i.prototype.serialize=function(){return t.extend({},this._options)},i.prototype.hasTile=function(t){return !this.tileBounds||this.tileBounds.contains(t.canonical)},i.prototype.loadTile=function(e,i){var o=this,r=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(r,t.ResourceType.Tile),(function(r,a){if(delete e.request,e.aborted)e.state=\"unloaded\",i(null);else if(r)e.state=\"errored\",i(r);else if(a){o.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var n=o.map.painter.context,s=n.gl;e.texture=o.map.painter.getTileTexture(a.width),e.texture?e.texture.update(a,{useMipmap:!0}):(e.texture=new t.Texture(n,a,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),n.extTextureFilterAnisotropic&&s.texParameterf(s.TEXTURE_2D,n.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,n.extTextureFilterAnisotropicMax)),e.state=\"loaded\",t.cacheEntryPossiblyAdded(o.dispatcher),i(null);}}));},i.prototype.abortTile=function(t,e){t.request&&(t.request.cancel(),delete t.request),e();},i.prototype.unloadTile=function(t,e){t.texture&&this.map.painter.saveTileTexture(t.texture),e();},i.prototype.hasTransition=function(){return !1},i}(t.Evented),z=function(e){function i(i,o,r,a){e.call(this,i,o,r,a),this.type=\"raster-dem\",this.maxzoom=22,this._options=t.extend({type:\"raster-dem\"},o),this.encoding=o.encoding||\"mapbox\";}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.serialize=function(){return {type:\"raster-dem\",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},i.prototype.loadTile=function(e,i){var o=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);function r(t,o){t&&(e.state=\"errored\",i(t)),o&&(e.dem=o,e.needsHillshadePrepare=!0,e.state=\"loaded\",i(null));}e.request=t.getImage(this.map._requestManager.transformRequest(o,t.ResourceType.Tile),function(o,a){if(delete e.request,e.aborted)e.state=\"unloaded\",i(null);else if(o)e.state=\"errored\",i(o);else if(a){this.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var n=t.window.ImageBitmap&&a instanceof t.window.ImageBitmap&&t.offscreenCanvasSupported()?a:t.browser.getImageData(a,1),s={uid:e.uid,coord:e.tileID,source:this.id,rawImageData:n,encoding:this.encoding};e.actor&&\"expired\"!==e.state||(e.actor=this.dispatcher.getActor(),e.actor.send(\"loadDEMTile\",s,r.bind(this)));}}.bind(this)),e.neighboringTiles=this._getNeighboringTiles(e.tileID);},i.prototype._getNeighboringTiles=function(e){var i=e.canonical,o=Math.pow(2,i.z),r=(i.x-1+o)%o,a=0===i.x?e.wrap-1:e.wrap,n=(i.x+1+o)%o,s=i.x+1===o?e.wrap+1:e.wrap,l={};return l[new t.OverscaledTileID(e.overscaledZ,a,i.z,r,i.y).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,i.z,n,i.y).key]={backfilled:!1},i.y>0&&(l[new t.OverscaledTileID(e.overscaledZ,a,i.z,r,i.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,i.z,i.x,i.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,i.z,n,i.y-1).key]={backfilled:!1}),i.y+1<o&&(l[new t.OverscaledTileID(e.overscaledZ,a,i.z,r,i.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,i.z,i.x,i.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,i.z,n,i.y+1).key]={backfilled:!1}),l},i.prototype.unloadTile=function(t){t.demTexture&&this.map.painter.saveTileTexture(t.demTexture),t.fbo&&(t.fbo.destroy(),delete t.fbo),t.dem&&delete t.dem,delete t.neighboringTiles,t.state=\"unloaded\",t.actor&&t.actor.send(\"removeDEMTile\",{uid:t.uid,source:this.id});},i}(C),D=function(e){function i(i,o,r,a){e.call(this),this.id=i,this.type=\"geojson\",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this._loaded=!1,this.actor=r.getActor(),this.setEventedParent(a),this._data=o.data,this._options=t.extend({},o),this._collectResourceTiming=o.collectResourceTiming,this._resourceTiming=[],void 0!==o.maxzoom&&(this.maxzoom=o.maxzoom),o.type&&(this.type=o.type),o.attribution&&(this.attribution=o.attribution),this.promoteId=o.promoteId;var n=t.EXTENT/this.tileSize;this.workerOptions=t.extend({source:this.id,cluster:o.cluster||!1,geojsonVtOptions:{buffer:(void 0!==o.buffer?o.buffer:128)*n,tolerance:(void 0!==o.tolerance?o.tolerance:.375)*n,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:o.lineMetrics||!1,generateId:o.generateId||!1},superclusterOptions:{maxZoom:void 0!==o.clusterMaxZoom?Math.min(o.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,minPoints:Math.max(2,o.clusterMinPoints||2),extent:t.EXTENT,radius:(o.clusterRadius||50)*n,log:!1,generateId:o.generateId||!1},clusterProperties:o.clusterProperties,filter:o.filter},o.workerOptions);}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.load=function(){var e=this;this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(i){if(i)e.fire(new t.ErrorEvent(i));else {var o={dataType:\"source\",sourceDataType:\"metadata\"};e._collectResourceTiming&&e._resourceTiming&&e._resourceTiming.length>0&&(o.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event(\"data\",o));}}));},i.prototype.onAdd=function(t){this.map=t,this.load();},i.prototype.setData=function(e){var i=this;return this._data=e,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(e){if(e)i.fire(new t.ErrorEvent(e));else {var o={dataType:\"source\",sourceDataType:\"content\"};i._collectResourceTiming&&i._resourceTiming&&i._resourceTiming.length>0&&(o.resourceTiming=i._resourceTiming,i._resourceTiming=[]),i.fire(new t.Event(\"data\",o));}})),this},i.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send(\"geojson.getClusterExpansionZoom\",{clusterId:t,source:this.id},e),this},i.prototype.getClusterChildren=function(t,e){return this.actor.send(\"geojson.getClusterChildren\",{clusterId:t,source:this.id},e),this},i.prototype.getClusterLeaves=function(t,e,i,o){return this.actor.send(\"geojson.getClusterLeaves\",{source:this.id,clusterId:t,limit:e,offset:i},o),this},i.prototype._updateWorkerData=function(e){var i=this;this._loaded=!1;var o=t.extend({},this.workerOptions),r=this._data;\"string\"==typeof r?(o.request=this.map._requestManager.transformRequest(t.browser.resolveURL(r),t.ResourceType.Source),o.request.collectResourceTiming=this._collectResourceTiming):o.data=JSON.stringify(r),this.actor.send(this.type+\".loadData\",o,(function(t,r){i._removed||r&&r.abandoned||(i._loaded=!0,r&&r.resourceTiming&&r.resourceTiming[i.id]&&(i._resourceTiming=r.resourceTiming[i.id].slice(0)),i.actor.send(i.type+\".coalesce\",{source:o.source},null),e(t));}));},i.prototype.loaded=function(){return this._loaded},i.prototype.loadTile=function(e,i){var o=this,r=e.actor?\"reloadTile\":\"loadTile\";e.actor=this.actor,e.request=this.actor.send(r,{type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId},(function(t,a){return delete e.request,e.unloadVectorData(),e.aborted?i(null):t?i(t):(e.loadVectorData(a,o.map.painter,\"reloadTile\"===r),i(null))}));},i.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0;},i.prototype.unloadTile=function(t){t.unloadVectorData(),this.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id});},i.prototype.onRemove=function(){this._removed=!0,this.actor.send(\"removeSource\",{type:this.type,source:this.id});},i.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},i.prototype.hasTransition=function(){return !1},i}(t.Evented),A=t.createLayout([{name:\"a_pos\",type:\"Int16\",components:2},{name:\"a_texture_pos\",type:\"Int16\",components:2}]),M=function(e){function i(t,i,o,r){e.call(this),this.id=t,this.dispatcher=o,this.coordinates=i.coordinates,this.type=\"image\",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(r),this.options=i;}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.load=function(e,i){var o=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),(function(r,a){o._loaded=!0,r?o.fire(new t.ErrorEvent(r)):a&&(o.image=a,e&&(o.coordinates=e),i&&i(),o._finishLoading());}));},i.prototype.loaded=function(){return this._loaded},i.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,(function(){e.texture=null;})),this):this},i.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})));},i.prototype.onAdd=function(t){this.map=t,this.load();},i.prototype.setCoordinates=function(e){var i=this;this.coordinates=e;var o=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var i=1/0,o=1/0,r=-1/0,a=-1/0,n=0,s=e;n<s.length;n+=1){var l=s[n];i=Math.min(i,l.x),o=Math.min(o,l.y),r=Math.max(r,l.x),a=Math.max(a,l.y);}var c=Math.max(r-i,a-o),u=Math.max(0,Math.floor(-Math.log(c)/Math.LN2)),h=Math.pow(2,u);return new t.CanonicalTileID(u,Math.floor((i+r)/2*h),Math.floor((o+a)/2*h))}(o),this.minzoom=this.maxzoom=this.tileID.z;var r=o.map((function(t){return i.tileID.getTilePoint(t)._round()}));return this._boundsArray=new t.StructArrayLayout4i8,this._boundsArray.emplaceBack(r[0].x,r[0].y,0,0),this._boundsArray.emplaceBack(r[1].x,r[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(r[3].x,r[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(r[2].x,r[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer&&(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})),this},i.prototype.prepare=function(){if(0!==Object.keys(this.tiles).length&&this.image){var e=this.map.painter.context,i=e.gl;for(var o in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,A.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture=new t.Texture(e,this.image,i.RGBA),this.texture.bind(i.LINEAR,i.CLAMP_TO_EDGE)),this.tiles){var r=this.tiles[o];\"loaded\"!==r.state&&(r.state=\"loaded\",r.texture=this.texture);}}},i.prototype.loadTile=function(t,e){this.tileID&&this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]=t,t.buckets={},e(null)):(t.state=\"errored\",e(null));},i.prototype.serialize=function(){return {type:\"image\",url:this.options.url,coordinates:this.coordinates}},i.prototype.hasTransition=function(){return !1},i}(t.Evented),L=function(e){function i(t,i,o,r){e.call(this,t,i,o,r),this.roundZoom=!0,this.type=\"video\",this.options=i;}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.load=function(){var e=this;this._loaded=!1;var i=this.options;this.urls=[];for(var o=0,r=i.urls;o<r.length;o+=1)this.urls.push(this.map._requestManager.transformRequest(r[o],t.ResourceType.Source).url);t.getVideo(this.urls,(function(i,o){e._loaded=!0,i?e.fire(new t.ErrorEvent(i)):o&&(e.video=o,e.video.loop=!0,e.video.setAttribute(\"playsinline\",\"\"),e.video.addEventListener(\"playing\",(function(){e.map.triggerRepaint();})),e.map&&e.video.play(),e._finishLoading());}));},i.prototype.pause=function(){this.video&&this.video.pause();},i.prototype.play=function(){this.video&&this.video.play();},i.prototype.seek=function(e){if(this.video){var i=this.video.seekable;e<i.start(0)||e>i.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+this.id,null,\"Playback for this video can be set only between the \"+i.start(0)+\" and \"+i.end(0)+\"-second mark.\"))):this.video.currentTime=e;}},i.prototype.getVideo=function(){return this.video},i.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)));},i.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,i=e.gl;for(var o in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,A.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(i.LINEAR,i.CLAMP_TO_EDGE),i.texSubImage2D(i.TEXTURE_2D,0,0,0,i.RGBA,i.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,i.RGBA),this.texture.bind(i.LINEAR,i.CLAMP_TO_EDGE)),this.tiles){var r=this.tiles[o];\"loaded\"!==r.state&&(r.state=\"loaded\",r.texture=this.texture);}}},i.prototype.serialize=function(){return {type:\"video\",urls:this.urls,coordinates:this.coordinates}},i.prototype.hasTransition=function(){return this.video&&!this.video.paused},i}(M),R=function(e){function i(i,o,r,a){e.call(this,i,o,r,a),o.coordinates?Array.isArray(o.coordinates)&&4===o.coordinates.length&&!o.coordinates.some((function(t){return !Array.isArray(t)||2!==t.length||t.some((function(t){return \"number\"!=typeof t}))}))||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'\"coordinates\" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'missing required property \"coordinates\"'))),o.animate&&\"boolean\"!=typeof o.animate&&this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'optional \"animate\" property must be a boolean value'))),o.canvas?\"string\"==typeof o.canvas||o.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'\"canvas\" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'missing required property \"canvas\"'))),this.options=o,this.animate=void 0===o.animate||o.animate;}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error(\"Canvas dimensions cannot be less than or equal to zero.\"))):(this.play=function(){this._playing=!0,this.map.triggerRepaint();},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1);},this._finishLoading());},i.prototype.getCanvas=function(){return this.canvas},i.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play();},i.prototype.onRemove=function(){this.pause();},i.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var i=this.map.painter.context,o=i.gl;for(var r in this.boundsBuffer||(this.boundsBuffer=i.createVertexBuffer(this._boundsArray,A.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(i,this.canvas,o.RGBA,{premultiply:!0}),this.tiles){var a=this.tiles[r];\"loaded\"!==a.state&&(a.state=\"loaded\",a.texture=this.texture);}}},i.prototype.serialize=function(){return {type:\"canvas\",coordinates:this.coordinates}},i.prototype.hasTransition=function(){return this._playing},i.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];t<e.length;t+=1){var i=e[t];if(isNaN(i)||i<=0)return !0}return !1},i}(M),k={vector:S,raster:C,\"raster-dem\":z,geojson:D,video:L,image:M,canvas:R};function B(e,i){var o=t.identity([]);return t.translate(o,o,[1,1,0]),t.scale(o,o,[.5*e.width,.5*e.height,1]),t.multiply(o,o,e.calculatePosMatrix(i.toUnwrapped()))}function O(t,e,i,o,r,a){var n=function(t,e,i){if(t)for(var o=0,r=t;o<r.length;o+=1){var a=e[r[o]];if(a&&a.source===i&&\"fill-extrusion\"===a.type)return !0}else for(var n in e){var s=e[n];if(s.source===i&&\"fill-extrusion\"===s.type)return !0}return !1}(r&&r.layers,e,t.id),s=a.maxPitchScaleFactor(),l=t.tilesIn(o,s,n);l.sort(F);for(var c=[],u=0,h=l;u<h.length;u+=1){var p=h[u];c.push({wrappedTileID:p.tileID.wrapped().key,queryResults:p.tile.queryRenderedFeatures(e,i,t._state,p.queryGeometry,p.cameraQueryGeometry,p.scale,r,a,s,B(t.transform,p.tileID))});}var d=function(t){for(var e={},i={},o=0,r=t;o<r.length;o+=1){var a=r[o],n=a.queryResults,s=a.wrappedTileID,l=i[s]=i[s]||{};for(var c in n)for(var u=n[c],h=l[c]=l[c]||{},p=e[c]=e[c]||[],d=0,_=u;d<_.length;d+=1){var f=_[d];h[f.featureIndex]||(h[f.featureIndex]=!0,p.push(f));}}return e}(c);for(var _ in d)d[_].forEach((function(e){var i=e.feature,o=t.getFeatureState(i.layer[\"source-layer\"],i.id);i.source=i.layer.source,i.layer[\"source-layer\"]&&(i.sourceLayer=i.layer[\"source-layer\"]),i.state=o;}));return d}function F(t,e){var i=t.tileID,o=e.tileID;return i.overscaledZ-o.overscaledZ||i.canonical.y-o.canonical.y||i.wrap-o.wrap||i.canonical.x-o.canonical.x}var U=function(t,e){this.max=t,this.onRemove=e,this.reset();};U.prototype.reset=function(){for(var t in this.data)for(var e=0,i=this.data[t];e<i.length;e+=1){var o=i[e];o.timeout&&clearTimeout(o.timeout),this.onRemove(o.value);}return this.data={},this.order=[],this},U.prototype.add=function(t,e,i){var o=this,r=t.wrapped().key;void 0===this.data[r]&&(this.data[r]=[]);var a={value:e,timeout:void 0};if(void 0!==i&&(a.timeout=setTimeout((function(){o.remove(t,a);}),i)),this.data[r].push(a),this.order.push(r),this.order.length>this.max){var n=this._getAndRemoveByKey(this.order[0]);n&&this.onRemove(n);}return this},U.prototype.has=function(t){return t.wrapped().key in this.data},U.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},U.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},U.prototype.getByKey=function(t){var e=this.data[t];return e?e[0].value:null},U.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},U.prototype.remove=function(t,e){if(!this.has(t))return this;var i=t.wrapped().key,o=void 0===e?0:this.data[i].indexOf(e),r=this.data[i][o];return this.data[i].splice(o,1),r.timeout&&clearTimeout(r.timeout),0===this.data[i].length&&delete this.data[i],this.onRemove(r.value),this.order.splice(this.order.indexOf(i),1),this},U.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e);}return this},U.prototype.filter=function(t){var e=[];for(var i in this.data)for(var o=0,r=this.data[i];o<r.length;o+=1){var a=r[o];t(a.value)||e.push(a);}for(var n=0,s=e;n<s.length;n+=1){var l=s[n];this.remove(l.value.tileID,l);}};var N=function(t,e,i){this.context=t;var o=t.gl;this.buffer=o.createBuffer(),this.dynamicDraw=Boolean(i),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),o.bufferData(o.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?o.DYNAMIC_DRAW:o.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer;};N.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer);},N.prototype.updateData=function(t){var e=this.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer);},N.prototype.destroy=function(){this.buffer&&(this.context.gl.deleteBuffer(this.buffer),delete this.buffer);};var Z={Int8:\"BYTE\",Uint8:\"UNSIGNED_BYTE\",Int16:\"SHORT\",Uint16:\"UNSIGNED_SHORT\",Int32:\"INT\",Uint32:\"UNSIGNED_INT\",Float32:\"FLOAT\"},q=function(t,e,i,o){this.length=e.length,this.attributes=i,this.itemSize=e.bytesPerElement,this.dynamicDraw=o,this.context=t;var r=t.gl;this.buffer=r.createBuffer(),t.bindVertexBuffer.set(this.buffer),r.bufferData(r.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?r.DYNAMIC_DRAW:r.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer;};q.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer);},q.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer);},q.prototype.enableAttributes=function(t,e){for(var i=0;i<this.attributes.length;i++){var o=e.attributes[this.attributes[i].name];void 0!==o&&t.enableVertexAttribArray(o);}},q.prototype.setVertexAttribPointers=function(t,e,i){for(var o=0;o<this.attributes.length;o++){var r=this.attributes[o],a=e.attributes[r.name];void 0!==a&&t.vertexAttribPointer(a,r.components,t[Z[r.type]],!1,this.itemSize,r.offset+this.itemSize*(i||0));}},q.prototype.destroy=function(){this.buffer&&(this.context.gl.deleteBuffer(this.buffer),delete this.buffer);};var j=function(t){this.gl=t.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1;};j.prototype.get=function(){return this.current},j.prototype.set=function(t){},j.prototype.getDefault=function(){return this.default},j.prototype.setDefault=function(){this.set(this.default);};var V=function(e){function i(){e.apply(this,arguments);}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.getDefault=function(){return t.Color.transparent},i.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1);},i}(j),G=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return 1},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearDepth(t),this.current=t,this.dirty=!1);},e}(j),W=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return 0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearStencil(t),this.current=t,this.dirty=!1);},e}(j),X=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return [!0,!0,!0,!0]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1);},e}(j),H=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return !0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthMask(t),this.current=t,this.dirty=!1);},e}(j),K=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return 255},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.stencilMask(t),this.current=t,this.dirty=!1);},e}(j),Y=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return {func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set=function(t){var e=this.current;(t.func!==e.func||t.ref!==e.ref||t.mask!==e.mask||this.dirty)&&(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current=t,this.dirty=!1);},e}(j),J=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){var t=this.gl;return [t.KEEP,t.KEEP,t.KEEP]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||this.dirty)&&(this.gl.stencilOp(t[0],t[1],t[2]),this.current=t,this.dirty=!1);},e}(j),Q=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return !1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current=t,this.dirty=!1;}},e}(j),$=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return [0,1]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.depthRange(t[0],t[1]),this.current=t,this.dirty=!1);},e}(j),tt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return !1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current=t,this.dirty=!1;}},e}(j),et=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.LESS},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthFunc(t),this.current=t,this.dirty=!1);},e}(j),it=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return !1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current=t,this.dirty=!1;}},e}(j),ot=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){var t=this.gl;return [t.ONE,t.ZERO]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.blendFunc(t[0],t[1]),this.current=t,this.dirty=!1);},e}(j),rt=function(e){function i(){e.apply(this,arguments);}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.getDefault=function(){return t.Color.transparent},i.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1);},i}(j),at=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.FUNC_ADD},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.blendEquation(t),this.current=t,this.dirty=!1);},e}(j),nt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return !1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current=t,this.dirty=!1;}},e}(j),st=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.BACK},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.cullFace(t),this.current=t,this.dirty=!1);},e}(j),lt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.CCW},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.frontFace(t),this.current=t,this.dirty=!1);},e}(j),ct=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.useProgram(t),this.current=t,this.dirty=!1);},e}(j),ut=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.TEXTURE0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.activeTexture(t),this.current=t,this.dirty=!1);},e}(j),ht=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){var t=this.gl;return [0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1);},e}(j),pt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current=t,this.dirty=!1;}},e}(j),dt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current=t,this.dirty=!1;}},e}(j),_t=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindTexture(e.TEXTURE_2D,t),this.current=t,this.dirty=!1;}},e}(j),ft=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current=t,this.dirty=!1;}},e}(j),mt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){var e=this.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current=t,this.dirty=!1;},e}(j),gt=function(t){function e(e){t.call(this,e),this.vao=e.extVertexArrayObject;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){this.vao&&(t!==this.current||this.dirty)&&(this.vao.bindVertexArrayOES(t),this.current=t,this.dirty=!1);},e}(j),vt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return 4},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current=t,this.dirty=!1;}},e}(j),yt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return !1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current=t,this.dirty=!1;}},e}(j),xt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return !1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current=t,this.dirty=!1;}},e}(j),bt=function(t){function e(e,i){t.call(this,e),this.context=e,this.parent=i;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e}(j),wt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.setDirty=function(){this.dirty=!0;},e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current=t,this.dirty=!1;}},e}(bt),Tt=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current=t,this.dirty=!1;}},e}(bt),Et=function(t,e,i,o){this.context=t,this.width=e,this.height=i;var r=this.framebuffer=t.gl.createFramebuffer();this.colorAttachment=new wt(t,r),o&&(this.depthAttachment=new Tt(t,r));};Et.prototype.destroy=function(){var t=this.context.gl,e=this.colorAttachment.get();if(e&&t.deleteTexture(e),this.depthAttachment){var i=this.depthAttachment.get();i&&t.deleteRenderbuffer(i);}t.deleteFramebuffer(this.framebuffer);};var It=function(t,e,i){this.func=t,this.mask=e,this.range=i;};It.ReadOnly=!1,It.ReadWrite=!0,It.disabled=new It(519,It.ReadOnly,[0,1]);var Pt=function(t,e,i,o,r,a){this.test=t,this.ref=e,this.mask=i,this.fail=o,this.depthFail=r,this.pass=a;};Pt.disabled=new Pt({func:519,mask:0},0,0,7680,7680,7680);var St=function(t,e,i){this.blendFunction=t,this.blendColor=e,this.mask=i;};St.disabled=new St(St.Replace=[1,0],t.Color.transparent,[!1,!1,!1,!1]),St.unblended=new St(St.Replace,t.Color.transparent,[!0,!0,!0,!0]),St.alphaBlended=new St([1,771],t.Color.transparent,[!0,!0,!0,!0]);var Ct=function(t,e,i){this.enable=t,this.mode=e,this.frontFace=i;};Ct.disabled=new Ct(!1,1029,2305),Ct.backCCW=new Ct(!0,1029,2305);var zt=function(t){this.gl=t,this.extVertexArrayObject=this.gl.getExtension(\"OES_vertex_array_object\"),this.clearColor=new V(this),this.clearDepth=new G(this),this.clearStencil=new W(this),this.colorMask=new X(this),this.depthMask=new H(this),this.stencilMask=new K(this),this.stencilFunc=new Y(this),this.stencilOp=new J(this),this.stencilTest=new Q(this),this.depthRange=new $(this),this.depthTest=new tt(this),this.depthFunc=new et(this),this.blend=new it(this),this.blendFunc=new ot(this),this.blendColor=new rt(this),this.blendEquation=new at(this),this.cullFace=new nt(this),this.cullFaceSide=new st(this),this.frontFace=new lt(this),this.program=new ct(this),this.activeTexture=new ut(this),this.viewport=new ht(this),this.bindFramebuffer=new pt(this),this.bindRenderbuffer=new dt(this),this.bindTexture=new _t(this),this.bindVertexBuffer=new ft(this),this.bindElementBuffer=new mt(this),this.bindVertexArrayOES=this.extVertexArrayObject&&new gt(this),this.pixelStoreUnpack=new vt(this),this.pixelStoreUnpackPremultiplyAlpha=new yt(this),this.pixelStoreUnpackFlipY=new xt(this),this.extTextureFilterAnisotropic=t.getExtension(\"EXT_texture_filter_anisotropic\")||t.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||t.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat=t.getExtension(\"OES_texture_half_float\"),this.extTextureHalfFloat&&(t.getExtension(\"OES_texture_half_float_linear\"),this.extRenderToTextureHalfFloat=t.getExtension(\"EXT_color_buffer_half_float\")),this.extTimerQuery=t.getExtension(\"EXT_disjoint_timer_query\"),this.maxTextureSize=t.getParameter(t.MAX_TEXTURE_SIZE);};zt.prototype.setDefault=function(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault();},zt.prototype.setDirty=function(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.extVertexArrayObject&&(this.bindVertexArrayOES.dirty=!0),this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0;},zt.prototype.createIndexBuffer=function(t,e){return new N(this,t,e)},zt.prototype.createVertexBuffer=function(t,e,i){return new q(this,t,e,i)},zt.prototype.createRenderbuffer=function(t,e,i){var o=this.gl,r=o.createRenderbuffer();return this.bindRenderbuffer.set(r),o.renderbufferStorage(o.RENDERBUFFER,t,e,i),this.bindRenderbuffer.set(null),r},zt.prototype.createFramebuffer=function(t,e,i){return new Et(this,t,e,i)},zt.prototype.clear=function(t){var e=t.color,i=t.depth,o=this.gl,r=0;e&&(r|=o.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!==i&&(r|=o.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(i),this.depthMask.set(!0)),o.clear(r);},zt.prototype.setCullFace=function(t){!1===t.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace));},zt.prototype.setDepthMode=function(t){t.func!==this.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1);},zt.prototype.setStencilMode=function(t){t.test.func!==this.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1);},zt.prototype.setColorMode=function(e){t.deepEqual(e.blendFunction,St.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask);},zt.prototype.unbindVAO=function(){this.extVertexArrayObject&&this.bindVertexArrayOES.set(null);};var Dt=function(e){function i(i,o,r){var a=this;e.call(this),this.id=i,this.dispatcher=r,this.on(\"data\",(function(t){\"source\"===t.dataType&&\"metadata\"===t.sourceDataType&&(a._sourceLoaded=!0),a._sourceLoaded&&!a._paused&&\"source\"===t.dataType&&\"content\"===t.sourceDataType&&(a.reload(),a.transform&&a.update(a.transform));})),this.on(\"error\",(function(){a._sourceErrored=!0;})),this._source=function(e,i,o,r){var a=new k[i.type](e,i,o,r);if(a.id!==e)throw new Error(\"Expected Source id to be \"+e+\" instead of \"+a.id);return t.bindAll([\"load\",\"abort\",\"unload\",\"serialize\",\"prepare\"],a),a}(i,o,r,this),this._tiles={},this._cache=new U(0,this._unloadTile.bind(this)),this._timers={},this._cacheTimers={},this._maxTileCacheSize=null,this._loadedParentTiles={},this._coveredTiles={},this._state=new t.SourceFeatureState;}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.onAdd=function(t){this.map=t,this._maxTileCacheSize=t?t._maxTileCacheSize:null,this._source&&this._source.onAdd&&this._source.onAdd(t);},i.prototype.onRemove=function(t){this._source&&this._source.onRemove&&this._source.onRemove(t);},i.prototype.loaded=function(){if(this._sourceErrored)return !0;if(!this._sourceLoaded)return !1;if(!this._source.loaded())return !1;for(var t in this._tiles){var e=this._tiles[t];if(\"loaded\"!==e.state&&\"errored\"!==e.state)return !1}return !0},i.prototype.getSource=function(){return this._source},i.prototype.pause=function(){this._paused=!0;},i.prototype.resume=function(){if(this._paused){var t=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,t&&this.reload(),this.transform&&this.update(this.transform);}},i.prototype._loadTile=function(t,e){return this._source.loadTile(t,e)},i.prototype._unloadTile=function(t){if(this._source.unloadTile)return this._source.unloadTile(t,(function(){}))},i.prototype._abortTile=function(t){if(this._source.abortTile)return this._source.abortTile(t,(function(){}))},i.prototype.serialize=function(){return this._source.serialize()},i.prototype.prepare=function(t){for(var e in this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles){var i=this._tiles[e];i.upload(t),i.prepare(this.map.style.imageManager);}},i.prototype.getIds=function(){return t.values(this._tiles).map((function(t){return t.tileID})).sort(At).map((function(t){return t.key}))},i.prototype.getRenderableIds=function(e){var i=this,o=[];for(var r in this._tiles)this._isIdRenderable(r,e)&&o.push(this._tiles[r]);return e?o.sort((function(e,o){var r=e.tileID,a=o.tileID,n=new t.Point(r.canonical.x,r.canonical.y)._rotate(i.transform.angle),s=new t.Point(a.canonical.x,a.canonical.y)._rotate(i.transform.angle);return r.overscaledZ-a.overscaledZ||s.y-n.y||s.x-n.x})).map((function(t){return t.tileID.key})):o.map((function(t){return t.tileID})).sort(At).map((function(t){return t.key}))},i.prototype.hasRenderableParent=function(t){var e=this.findLoadedParent(t,0);return !!e&&this._isIdRenderable(e.tileID.key)},i.prototype._isIdRenderable=function(t,e){return this._tiles[t]&&this._tiles[t].hasData()&&!this._coveredTiles[t]&&(e||!this._tiles[t].holdingForFade())},i.prototype.reload=function(){if(this._paused)this._shouldReloadOnResume=!0;else for(var t in this._cache.reset(),this._tiles)\"errored\"!==this._tiles[t].state&&this._reloadTile(t,\"reloading\");},i.prototype._reloadTile=function(t,e){var i=this._tiles[t];i&&(\"loading\"!==i.state&&(i.state=e),this._loadTile(i,this._tileLoaded.bind(this,i,t,e)));},i.prototype._tileLoaded=function(e,i,o,r){if(r)return e.state=\"errored\",void(404!==r.status?this._source.fire(new t.ErrorEvent(r,{tile:e})):this.update(this.transform));e.timeAdded=t.browser.now(),\"expired\"===o&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(i,e),\"raster-dem\"===this.getSource().type&&e.dem&&this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event(\"data\",{dataType:\"source\",tile:e,coord:e.tileID}));},i.prototype._backfillDEM=function(t){for(var e=this.getRenderableIds(),i=0;i<e.length;i++){var o=e[i];if(t.neighboringTiles&&t.neighboringTiles[o]){var r=this.getTileByID(o);a(t,r),a(r,t);}}function a(t,e){t.needsHillshadePrepare=!0;var i=e.tileID.canonical.x-t.tileID.canonical.x,o=e.tileID.canonical.y-t.tileID.canonical.y,r=Math.pow(2,t.tileID.canonical.z),a=e.tileID.key;0===i&&0===o||Math.abs(o)>1||(Math.abs(i)>1&&(1===Math.abs(i+r)?i+=r:1===Math.abs(i-r)&&(i-=r)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,i,o),t.neighboringTiles&&t.neighboringTiles[a]&&(t.neighboringTiles[a].backfilled=!0)));}},i.prototype.getTile=function(t){return this.getTileByID(t.key)},i.prototype.getTileByID=function(t){return this._tiles[t]},i.prototype._retainLoadedChildren=function(t,e,i,o){for(var r in this._tiles){var a=this._tiles[r];if(!(o[r]||!a.hasData()||a.tileID.overscaledZ<=e||a.tileID.overscaledZ>i)){for(var n=a.tileID;a&&a.tileID.overscaledZ>e+1;){var s=a.tileID.scaledTo(a.tileID.overscaledZ-1);(a=this._tiles[s.key])&&a.hasData()&&(n=s);}for(var l=n;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){o[n.key]=n;break}}}},i.prototype.findLoadedParent=function(t,e){if(t.key in this._loadedParentTiles){var i=this._loadedParentTiles[t.key];return i&&i.tileID.overscaledZ>=e?i:null}for(var o=t.overscaledZ-1;o>=e;o--){var r=t.scaledTo(o),a=this._getLoadedTile(r);if(a)return a}},i.prototype._getLoadedTile=function(t){var e=this._tiles[t.key];return e&&e.hasData()?e:this._cache.getByKey(t.wrapped().key)},i.prototype.updateCacheSize=function(t){var e=Math.ceil(t.width/this._source.tileSize)+1,i=Math.ceil(t.height/this._source.tileSize)+1,o=Math.floor(e*i*5),r=\"number\"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,o):o;this._cache.setMaxSize(r);},i.prototype.handleWrapJump=function(t){var e=Math.round((t-(void 0===this._prevLng?t:this._prevLng))/360);if(this._prevLng=t,e){var i={};for(var o in this._tiles){var r=this._tiles[o];r.tileID=r.tileID.unwrapTo(r.tileID.wrap+e),i[r.tileID.key]=r;}for(var a in this._tiles=i,this._timers)clearTimeout(this._timers[a]),delete this._timers[a];for(var n in this._tiles)this._setTileReloadTimer(n,this._tiles[n]);}},i.prototype.update=function(e){var o=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var r;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?r=e.getVisibleUnwrappedCoordinates(this._source.tileID).map((function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)})):(r=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(r=r.filter((function(t){return o._source.hasTile(t)})))):r=[];var a=e.coveringZoomLevel(this._source),n=Math.max(a-i.maxOverzooming,this._source.minzoom),s=Math.max(a+i.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(r,a);if(Mt(this._source.type)){for(var c={},u={},h=0,p=Object.keys(l);h<p.length;h+=1){var d=p[h],_=l[d],f=this._tiles[d];if(f&&!(f.fadeEndTime&&f.fadeEndTime<=t.browser.now())){var m=this.findLoadedParent(_,n);m&&(this._addTile(m.tileID),c[m.tileID.key]=m.tileID),u[d]=_;}}for(var g in this._retainLoadedChildren(u,a,s,l),c)l[g]||(this._coveredTiles[g]=!0,l[g]=c[g]);}for(var v in l)this._tiles[v].clearFadeHold();for(var y=0,x=t.keysDifference(this._tiles,l);y<x.length;y+=1){var b=x[y],w=this._tiles[b];w.hasSymbolBuckets&&!w.holdingForFade()?w.setHoldDuration(this.map._fadeDuration):w.hasSymbolBuckets&&!w.symbolFadeFinished()||this._removeTile(b);}this._updateLoadedParentTileCache();}},i.prototype.releaseSymbolFadeTiles=function(){for(var t in this._tiles)this._tiles[t].holdingForFade()&&this._removeTile(t);},i.prototype._updateRetainedTiles=function(t,e){for(var o={},r={},a=Math.max(e-i.maxOverzooming,this._source.minzoom),n=Math.max(e+i.maxUnderzooming,this._source.minzoom),s={},l=0,c=t;l<c.length;l+=1){var u=c[l],h=this._addTile(u);o[u.key]=u,h.hasData()||e<this._source.maxzoom&&(s[u.key]=u);}this._retainLoadedChildren(s,e,n,o);for(var p=0,d=t;p<d.length;p+=1){var _=d[p],f=this._tiles[_.key];if(!f.hasData()){if(e+1>this._source.maxzoom){var m=_.children(this._source.maxzoom)[0],g=this.getTile(m);if(g&&g.hasData()){o[m.key]=m;continue}}else {var v=_.children(this._source.maxzoom);if(o[v[0].key]&&o[v[1].key]&&o[v[2].key]&&o[v[3].key])continue}for(var y=f.wasRequested(),x=_.overscaledZ-1;x>=a;--x){var b=_.scaledTo(x);if(r[b.key])break;if(r[b.key]=!0,!(f=this.getTile(b))&&y&&(f=this._addTile(b)),f&&(o[b.key]=b,y=f.wasRequested(),f.hasData()))break}}}return o},i.prototype._updateLoadedParentTileCache=function(){for(var t in this._loadedParentTiles={},this._tiles){for(var e=[],i=void 0,o=this._tiles[t].tileID;o.overscaledZ>0;){if(o.key in this._loadedParentTiles){i=this._loadedParentTiles[o.key];break}e.push(o.key);var r=o.scaledTo(o.overscaledZ-1);if(i=this._getLoadedTile(r))break;o=r;}for(var a=0,n=e;a<n.length;a+=1)this._loadedParentTiles[n[a]]=i;}},i.prototype._addTile=function(e){var i=this._tiles[e.key];if(i)return i;(i=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,i),i.tileID=e,this._state.initializeTileState(i,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,i)));var o=Boolean(i);return o||(i=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(i,this._tileLoaded.bind(this,i,e.key,i.state))),i?(i.uses++,this._tiles[e.key]=i,o||this._source.fire(new t.Event(\"dataloading\",{tile:i,coord:i.tileID,dataType:\"source\"})),i):null},i.prototype._setTileReloadTimer=function(t,e){var i=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var o=e.getExpiryTimeout();o&&(this._timers[t]=setTimeout((function(){i._reloadTile(t,\"expired\"),delete i._timers[t];}),o));},i.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()&&\"reloading\"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))));},i.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset();},i.prototype.tilesIn=function(e,i,o){var r=this,a=[],n=this.transform;if(!n)return a;for(var s=o?n.getCameraQueryGeometry(e):e,l=e.map((function(t){return n.pointCoordinate(t)})),c=s.map((function(t){return n.pointCoordinate(t)})),u=this.getIds(),h=1/0,p=1/0,d=-1/0,_=-1/0,f=0,m=c;f<m.length;f+=1){var g=m[f];h=Math.min(h,g.x),p=Math.min(p,g.y),d=Math.max(d,g.x),_=Math.max(_,g.y);}for(var v=function(e){var o=r._tiles[u[e]];if(!o.holdingForFade()){var s=o.tileID,f=Math.pow(2,n.zoom-o.tileID.overscaledZ),m=i*o.queryPadding*t.EXTENT/o.tileSize/f,g=[s.getTilePoint(new t.MercatorCoordinate(h,p)),s.getTilePoint(new t.MercatorCoordinate(d,_))];if(g[0].x-m<t.EXTENT&&g[0].y-m<t.EXTENT&&g[1].x+m>=0&&g[1].y+m>=0){var v=l.map((function(t){return s.getTilePoint(t)})),y=c.map((function(t){return s.getTilePoint(t)}));a.push({tile:o,tileID:s,queryGeometry:v,cameraQueryGeometry:y,scale:f});}}},y=0;y<u.length;y++)v(y);return a},i.prototype.getVisibleCoordinates=function(t){for(var e=this,i=this.getRenderableIds(t).map((function(t){return e._tiles[t].tileID})),o=0,r=i;o<r.length;o+=1){var a=r[o];a.posMatrix=this.transform.calculatePosMatrix(a.toUnwrapped());}return i},i.prototype.hasTransition=function(){if(this._source.hasTransition())return !0;if(Mt(this._source.type))for(var e in this._tiles){var i=this._tiles[e];if(void 0!==i.fadeEndTime&&i.fadeEndTime>=t.browser.now())return !0}return !1},i.prototype.setFeatureState=function(t,e,i){this._state.updateState(t=t||\"_geojsonTileLayer\",e,i);},i.prototype.removeFeatureState=function(t,e,i){this._state.removeFeatureState(t=t||\"_geojsonTileLayer\",e,i);},i.prototype.getFeatureState=function(t,e){return this._state.getState(t=t||\"_geojsonTileLayer\",e)},i.prototype.setDependencies=function(t,e,i){var o=this._tiles[t];o&&o.setDependencies(e,i);},i.prototype.reloadTilesForDependencies=function(t,e){for(var i in this._tiles)this._tiles[i].hasDependency(t,e)&&this._reloadTile(i,\"reloading\");this._cache.filter((function(i){return !i.hasDependency(t,e)}));},i}(t.Evented);function At(t,e){var i=Math.abs(2*t.wrap)-+(t.wrap<0),o=Math.abs(2*e.wrap)-+(e.wrap<0);return t.overscaledZ-e.overscaledZ||o-i||e.canonical.y-t.canonical.y||e.canonical.x-t.canonical.x}function Mt(t){return \"raster\"===t||\"image\"===t||\"video\"===t}function Lt(){return new t.window.Worker(Kr.workerUrl)}Dt.maxOverzooming=10,Dt.maxUnderzooming=3;var Rt=\"mapboxgl_preloaded_worker_pool\",kt=function(){this.active={};};kt.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length<kt.workerCount;)this.workers.push(new Lt);return this.active[t]=!0,this.workers.slice()},kt.prototype.release=function(t){delete this.active[t],0===this.numActive()&&(this.workers.forEach((function(t){t.terminate();})),this.workers=null);},kt.prototype.isPreloaded=function(){return !!this.active[Rt]},kt.prototype.numActive=function(){return Object.keys(this.active).length};var Bt,Ot=Math.floor(t.browser.hardwareConcurrency/2);function Ft(){return Bt||(Bt=new kt),Bt}function Ut(e,i){var o={};for(var r in e)\"ref\"!==r&&(o[r]=e[r]);return t.refProperties.forEach((function(t){t in i&&(o[t]=i[t]);})),o}function Nt(t){t=t.slice();for(var e=Object.create(null),i=0;i<t.length;i++)e[t[i].id]=t[i];for(var o=0;o<t.length;o++)\"ref\"in t[o]&&(t[o]=Ut(t[o],e[t[o].ref]));return t}kt.workerCount=Math.max(Math.min(Ot,6),1);var Zt={setStyle:\"setStyle\",addLayer:\"addLayer\",removeLayer:\"removeLayer\",setPaintProperty:\"setPaintProperty\",setLayoutProperty:\"setLayoutProperty\",setFilter:\"setFilter\",addSource:\"addSource\",removeSource:\"removeSource\",setGeoJSONSourceData:\"setGeoJSONSourceData\",setLayerZoomRange:\"setLayerZoomRange\",setLayerProperty:\"setLayerProperty\",setCenter:\"setCenter\",setZoom:\"setZoom\",setBearing:\"setBearing\",setPitch:\"setPitch\",setSprite:\"setSprite\",setGlyphs:\"setGlyphs\",setTransition:\"setTransition\",setLight:\"setLight\"};function qt(t,e,i){i.push({command:Zt.addSource,args:[t,e[t]]});}function jt(t,e,i){e.push({command:Zt.removeSource,args:[t]}),i[t]=!0;}function Vt(t,e,i,o){jt(t,i,o),qt(t,e,i);}function Gt(e,i,o){var r;for(r in e[o])if(e[o].hasOwnProperty(r)&&\"data\"!==r&&!t.deepEqual(e[o][r],i[o][r]))return !1;for(r in i[o])if(i[o].hasOwnProperty(r)&&\"data\"!==r&&!t.deepEqual(e[o][r],i[o][r]))return !1;return !0}function Wt(e,i,o,r,a,n){var s;for(s in i=i||{},e=e||{})e.hasOwnProperty(s)&&(t.deepEqual(e[s],i[s])||o.push({command:n,args:[r,s,i[s],a]}));for(s in i)i.hasOwnProperty(s)&&!e.hasOwnProperty(s)&&(t.deepEqual(e[s],i[s])||o.push({command:n,args:[r,s,i[s],a]}));}function Xt(t){return t.id}function Ht(t,e){return t[e.id]=e,t}var Kt=function(t,e){this.reset(t,e);};Kt.prototype.reset=function(t,e){this.points=t||[],this._distances=[0];for(var i=1;i<this.points.length;i++)this._distances[i]=this._distances[i-1]+this.points[i].dist(this.points[i-1]);this.length=this._distances[this._distances.length-1],this.padding=Math.min(e||0,.5*this.length),this.paddedLength=this.length-2*this.padding;},Kt.prototype.lerp=function(e){if(1===this.points.length)return this.points[0];e=t.clamp(e,0,1);for(var i=1,o=this._distances[i],r=e*this.paddedLength+this.padding;o<r&&i<this._distances.length;)o=this._distances[++i];var a=i-1,n=this._distances[a],s=o-n,l=s>0?(r-n)/s:0;return this.points[a].mult(1-l).add(this.points[i].mult(l))};var Yt=function(t,e,i){var o=this.boxCells=[],r=this.circleCells=[];this.xCellCount=Math.ceil(t/i),this.yCellCount=Math.ceil(e/i);for(var a=0;a<this.xCellCount*this.yCellCount;a++)o.push([]),r.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=t,this.height=e,this.xScale=this.xCellCount/t,this.yScale=this.yCellCount/e,this.boxUid=0,this.circleUid=0;};function Jt(e,i,o,r,a){var n=t.create();return i?(t.scale(n,n,[1/a,1/a,1]),o||t.rotateZ(n,n,r.angle)):t.multiply(n,r.labelPlaneMatrix,e),n}function Qt(e,i,o,r,a){if(i){var n=t.clone(e);return t.scale(n,n,[a,a,1]),o||t.rotateZ(n,n,-r.angle),n}return r.glCoordMatrix}function $t(e,i){var o=[e.x,e.y,0,1];ue(o,o,i);var r=o[3];return {point:new t.Point(o[0]/r,o[1]/r),signedDistanceFromCamera:r}}function te(t,e){return .5+t/e*.5}function ee(t,e){var i=t[0]/t[3],o=t[1]/t[3];return i>=-e[0]&&i<=e[0]&&o>=-e[1]&&o<=e[1]}function ie(e,i,o,r,a,n,s,l){var c=r?e.textSizeData:e.iconSizeData,u=t.evaluateSizeForZoom(c,o.transform.zoom),h=[256/o.width*2+1,256/o.height*2+1],p=r?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;p.clear();for(var d=e.lineVertexArray,_=r?e.text.placedSymbolArray:e.icon.placedSymbolArray,f=o.transform.width/o.transform.height,m=!1,g=0;g<_.length;g++){var v=_.get(g);if(v.hidden||v.writingMode===t.WritingMode.vertical&&!m)ce(v.numGlyphs,p);else {m=!1;var y=[v.anchorX,v.anchorY,0,1];if(t.transformMat4(y,y,i),ee(y,h)){var x=te(o.transform.cameraToCenterDistance,y[3]),b=t.evaluateSizeForFeature(c,u,v),w=s?b/x:b*x,T=new t.Point(v.anchorX,v.anchorY),E=$t(T,a).point,I={},P=ae(v,w,!1,l,i,a,n,e.glyphOffsetArray,d,p,E,T,I,f);m=P.useVertical,(P.notEnoughRoom||m||P.needsFlipping&&ae(v,w,!0,l,i,a,n,e.glyphOffsetArray,d,p,E,T,I,f).notEnoughRoom)&&ce(v.numGlyphs,p);}else ce(v.numGlyphs,p);}}r?e.text.dynamicLayoutVertexBuffer.updateData(p):e.icon.dynamicLayoutVertexBuffer.updateData(p);}function oe(t,e,i,o,r,a,n,s,l,c,u){var h=s.glyphStartIndex+s.numGlyphs,p=s.lineStartIndex,d=s.lineStartIndex+s.lineLength,_=e.getoffsetX(s.glyphStartIndex),f=e.getoffsetX(h-1),m=se(t*_,i,o,r,a,n,s.segment,p,d,l,c,u);if(!m)return null;var g=se(t*f,i,o,r,a,n,s.segment,p,d,l,c,u);return g?{first:m,last:g}:null}function re(e,i,o,r){return e===t.WritingMode.horizontal&&Math.abs(o.y-i.y)>Math.abs(o.x-i.x)*r?{useVertical:!0}:(e===t.WritingMode.vertical?i.y<o.y:i.x>o.x)?{needsFlipping:!0}:null}function ae(e,i,o,r,a,n,s,l,c,u,h,p,d,_){var f,m=i/24,g=e.lineOffsetX*m,v=e.lineOffsetY*m;if(e.numGlyphs>1){var y=e.glyphStartIndex+e.numGlyphs,x=e.lineStartIndex,b=e.lineStartIndex+e.lineLength,w=oe(m,l,g,v,o,h,p,e,c,n,d);if(!w)return {notEnoughRoom:!0};var T=$t(w.first.point,s).point,E=$t(w.last.point,s).point;if(r&&!o){var I=re(e.writingMode,T,E,_);if(I)return I}f=[w.first];for(var P=e.glyphStartIndex+1;P<y-1;P++)f.push(se(m*l.getoffsetX(P),g,v,o,h,p,e.segment,x,b,c,n,d));f.push(w.last);}else {if(r&&!o){var S=$t(p,a).point,C=e.lineStartIndex+e.segment+1,z=new t.Point(c.getx(C),c.gety(C)),D=$t(z,a),A=D.signedDistanceFromCamera>0?D.point:ne(p,z,S,1,a),M=re(e.writingMode,S,A,_);if(M)return M}var L=se(m*l.getoffsetX(e.glyphStartIndex),g,v,o,h,p,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,c,n,d);if(!L)return {notEnoughRoom:!0};f=[L];}for(var R=0,k=f;R<k.length;R+=1){var B=k[R];t.addDynamicAttributes(u,B.point,B.angle);}return {}}function ne(t,e,i,o,r){var a=$t(t.add(t.sub(e)._unit()),r).point,n=i.sub(a);return i.add(n._mult(o/n.mag()))}function se(e,i,o,r,a,n,s,l,c,u,h,p){var d=r?e-i:e+i,_=d>0?1:-1,f=0;r&&(_*=-1,f=Math.PI),_<0&&(f+=Math.PI);for(var m=_>0?l+s:l+s+1,g=a,v=a,y=0,x=0,b=Math.abs(d),w=[];y+x<=b;){if((m+=_)<l||m>=c)return null;if(v=g,w.push(g),void 0===(g=p[m])){var T=new t.Point(u.getx(m),u.gety(m)),E=$t(T,h);if(E.signedDistanceFromCamera>0)g=p[m]=E.point;else {var I=m-_;g=ne(0===y?n:new t.Point(u.getx(I),u.gety(I)),T,v,b-y+1,h);}}y+=x,x=v.dist(g);}var P=(b-y)/x,S=g.sub(v),C=S.mult(P)._add(v);C._add(S._unit()._perp()._mult(o*_));var z=f+Math.atan2(g.y-v.y,g.x-v.x);return w.push(C),{point:C,angle:z,path:w}}Yt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Yt.prototype.insert=function(t,e,i,o,r){this._forEachCell(e,i,o,r,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(i),this.bboxes.push(o),this.bboxes.push(r);},Yt.prototype.insertCircle=function(t,e,i,o){this._forEachCell(e-o,i-o,e+o,i+o,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(i),this.circles.push(o);},Yt.prototype._insertBoxCell=function(t,e,i,o,r,a){this.boxCells[r].push(a);},Yt.prototype._insertCircleCell=function(t,e,i,o,r,a){this.circleCells[r].push(a);},Yt.prototype._query=function(t,e,i,o,r,a){if(i<0||t>this.width||o<0||e>this.height)return !r&&[];var n=[];if(t<=0&&e<=0&&this.width<=i&&this.height<=o){if(r)return !0;for(var s=0;s<this.boxKeys.length;s++)n.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var l=0;l<this.circleKeys.length;l++){var c=this.circles[3*l],u=this.circles[3*l+1],h=this.circles[3*l+2];n.push({key:this.circleKeys[l],x1:c-h,y1:u-h,x2:c+h,y2:u+h});}return a?n.filter(a):n}return this._forEachCell(t,e,i,o,this._queryCell,n,{hitTest:r,seenUids:{box:{},circle:{}}},a),r?n.length>0:n},Yt.prototype._queryCircle=function(t,e,i,o,r){var a=t-i,n=t+i,s=e-i,l=e+i;if(n<0||a>this.width||l<0||s>this.height)return !o&&[];var c=[];return this._forEachCell(a,s,n,l,this._queryCellCircle,c,{hitTest:o,circle:{x:t,y:e,radius:i},seenUids:{box:{},circle:{}}},r),o?c.length>0:c},Yt.prototype.query=function(t,e,i,o,r){return this._query(t,e,i,o,!1,r)},Yt.prototype.hitTest=function(t,e,i,o,r){return this._query(t,e,i,o,!0,r)},Yt.prototype.hitTestCircle=function(t,e,i,o){return this._queryCircle(t,e,i,!0,o)},Yt.prototype._queryCell=function(t,e,i,o,r,a,n,s){var l=n.seenUids,c=this.boxCells[r];if(null!==c)for(var u=this.bboxes,h=0,p=c;h<p.length;h+=1){var d=p[h];if(!l.box[d]){l.box[d]=!0;var _=4*d;if(t<=u[_+2]&&e<=u[_+3]&&i>=u[_+0]&&o>=u[_+1]&&(!s||s(this.boxKeys[d]))){if(n.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[d],x1:u[_],y1:u[_+1],x2:u[_+2],y2:u[_+3]});}}}var f=this.circleCells[r];if(null!==f)for(var m=this.circles,g=0,v=f;g<v.length;g+=1){var y=v[g];if(!l.circle[y]){l.circle[y]=!0;var x=3*y;if(this._circleAndRectCollide(m[x],m[x+1],m[x+2],t,e,i,o)&&(!s||s(this.circleKeys[y]))){if(n.hitTest)return a.push(!0),!0;var b=m[x],w=m[x+1],T=m[x+2];a.push({key:this.circleKeys[y],x1:b-T,y1:w-T,x2:b+T,y2:w+T});}}}},Yt.prototype._queryCellCircle=function(t,e,i,o,r,a,n,s){var l=n.circle,c=n.seenUids,u=this.boxCells[r];if(null!==u)for(var h=this.bboxes,p=0,d=u;p<d.length;p+=1){var _=d[p];if(!c.box[_]){c.box[_]=!0;var f=4*_;if(this._circleAndRectCollide(l.x,l.y,l.radius,h[f+0],h[f+1],h[f+2],h[f+3])&&(!s||s(this.boxKeys[_])))return a.push(!0),!0}}var m=this.circleCells[r];if(null!==m)for(var g=this.circles,v=0,y=m;v<y.length;v+=1){var x=y[v];if(!c.circle[x]){c.circle[x]=!0;var b=3*x;if(this._circlesCollide(g[b],g[b+1],g[b+2],l.x,l.y,l.radius)&&(!s||s(this.circleKeys[x])))return a.push(!0),!0}}},Yt.prototype._forEachCell=function(t,e,i,o,r,a,n,s){for(var l=this._convertToXCellCoord(t),c=this._convertToYCellCoord(e),u=this._convertToXCellCoord(i),h=this._convertToYCellCoord(o),p=l;p<=u;p++)for(var d=c;d<=h;d++)if(r.call(this,t,e,i,o,this.xCellCount*d+p,a,n,s))return},Yt.prototype._convertToXCellCoord=function(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Yt.prototype._convertToYCellCoord=function(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Yt.prototype._circlesCollide=function(t,e,i,o,r,a){var n=o-t,s=r-e,l=i+a;return l*l>n*n+s*s},Yt.prototype._circleAndRectCollide=function(t,e,i,o,r,a,n){var s=(a-o)/2,l=Math.abs(t-(o+s));if(l>s+i)return !1;var c=(n-r)/2,u=Math.abs(e-(r+c));if(u>c+i)return !1;if(l<=s||u<=c)return !0;var h=l-s,p=u-c;return h*h+p*p<=i*i};var le=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ce(t,e){for(var i=0;i<t;i++){var o=e.length;e.resize(o+4),e.float32.set(le,3*o);}}function ue(t,e,i){var o=e[0],r=e[1];return t[0]=i[0]*o+i[4]*r+i[12],t[1]=i[1]*o+i[5]*r+i[13],t[3]=i[3]*o+i[7]*r+i[15],t}var he=function(t,e,i){void 0===e&&(e=new Yt(t.width+200,t.height+200,25)),void 0===i&&(i=new Yt(t.width+200,t.height+200,25)),this.transform=t,this.grid=e,this.ignoredGrid=i,this.pitchfactor=Math.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary=t.width+100,this.screenBottomBoundary=t.height+100,this.gridRightBoundary=t.width+200,this.gridBottomBoundary=t.height+200;};function pe(e,i,o){return i*(t.EXTENT/(e.tileSize*Math.pow(2,o-e.tileID.overscaledZ)))}he.prototype.placeCollisionBox=function(t,e,i,o,r){var a=this.projectAndGetPerspectiveRatio(o,t.anchorPointX,t.anchorPointY),n=i*a.perspectiveRatio,s=t.x1*n+a.point.x,l=t.y1*n+a.point.y,c=t.x2*n+a.point.x,u=t.y2*n+a.point.y;return !this.isInsideGrid(s,l,c,u)||!e&&this.grid.hitTest(s,l,c,u,r)?{box:[],offscreen:!1}:{box:[s,l,c,u],offscreen:this.isOffscreen(s,l,c,u)}},he.prototype.placeCollisionCircles=function(e,i,o,r,a,n,s,l,c,u,h,p,d){var _=[],f=new t.Point(i.anchorX,i.anchorY),m=$t(f,n),g=te(this.transform.cameraToCenterDistance,m.signedDistanceFromCamera),v=(u?a/g:a*g)/t.ONE_EM,y=$t(f,s).point,x=oe(v,r,i.lineOffsetX*v,i.lineOffsetY*v,!1,y,f,i,o,s,{}),b=!1,w=!1,T=!0;if(x){for(var E=.5*p*g+d,I=new t.Point(-100,-100),P=new t.Point(this.screenRightBoundary,this.screenBottomBoundary),S=new Kt,C=x.first,z=x.last,D=[],A=C.path.length-1;A>=1;A--)D.push(C.path[A]);for(var M=1;M<z.path.length;M++)D.push(z.path[M]);var L=2.5*E;if(l){var R=D.map((function(t){return $t(t,l)}));D=R.some((function(t){return t.signedDistanceFromCamera<=0}))?[]:R.map((function(t){return t.point}));}var k=[];if(D.length>0){for(var B=D[0].clone(),O=D[0].clone(),F=1;F<D.length;F++)B.x=Math.min(B.x,D[F].x),B.y=Math.min(B.y,D[F].y),O.x=Math.max(O.x,D[F].x),O.y=Math.max(O.y,D[F].y);k=B.x>=I.x&&O.x<=P.x&&B.y>=I.y&&O.y<=P.y?[D]:O.x<I.x||B.x>P.x||O.y<I.y||B.y>P.y?[]:t.clipLine([D],I.x,I.y,P.x,P.y);}for(var U=0,N=k;U<N.length;U+=1){var Z;S.reset(N[U],.25*E),Z=S.length<=.5*E?1:Math.ceil(S.paddedLength/L)+1;for(var q=0;q<Z;q++){var j=q/Math.max(Z-1,1),V=S.lerp(j),G=V.x+100,W=V.y+100;_.push(G,W,E,0);var X=G-E,H=W-E,K=G+E,Y=W+E;if(T=T&&this.isOffscreen(X,H,K,Y),w=w||this.isInsideGrid(X,H,K,Y),!e&&this.grid.hitTestCircle(G,W,E,h)&&(b=!0,!c))return {circles:[],offscreen:!1,collisionDetected:b}}}}return {circles:!c&&b||!w?[]:_,offscreen:T,collisionDetected:b}},he.prototype.queryRenderedSymbols=function(e){if(0===e.length||0===this.grid.keysLength()&&0===this.ignoredGrid.keysLength())return {};for(var i=[],o=1/0,r=1/0,a=-1/0,n=-1/0,s=0,l=e;s<l.length;s+=1){var c=l[s],u=new t.Point(c.x+100,c.y+100);o=Math.min(o,u.x),r=Math.min(r,u.y),a=Math.max(a,u.x),n=Math.max(n,u.y),i.push(u);}for(var h={},p={},d=0,_=this.grid.query(o,r,a,n).concat(this.ignoredGrid.query(o,r,a,n));d<_.length;d+=1){var f=_[d],m=f.key;if(void 0===h[m.bucketInstanceId]&&(h[m.bucketInstanceId]={}),!h[m.bucketInstanceId][m.featureIndex]){var g=[new t.Point(f.x1,f.y1),new t.Point(f.x2,f.y1),new t.Point(f.x2,f.y2),new t.Point(f.x1,f.y2)];t.polygonIntersectsPolygon(i,g)&&(h[m.bucketInstanceId][m.featureIndex]=!0,void 0===p[m.bucketInstanceId]&&(p[m.bucketInstanceId]=[]),p[m.bucketInstanceId].push(m.featureIndex));}}return p},he.prototype.insertCollisionBox=function(t,e,i,o,r){(e?this.ignoredGrid:this.grid).insert({bucketInstanceId:i,featureIndex:o,collisionGroupID:r},t[0],t[1],t[2],t[3]);},he.prototype.insertCollisionCircles=function(t,e,i,o,r){for(var a=e?this.ignoredGrid:this.grid,n={bucketInstanceId:i,featureIndex:o,collisionGroupID:r},s=0;s<t.length;s+=4)a.insertCircle(n,t[s],t[s+1],t[s+2]);},he.prototype.projectAndGetPerspectiveRatio=function(e,i,o){var r=[i,o,0,1];return ue(r,r,e),{point:new t.Point((r[0]/r[3]+1)/2*this.transform.width+100,(-r[1]/r[3]+1)/2*this.transform.height+100),perspectiveRatio:.5+this.transform.cameraToCenterDistance/r[3]*.5}},he.prototype.isOffscreen=function(t,e,i,o){return i<100||t>=this.screenRightBoundary||o<100||e>this.screenBottomBoundary},he.prototype.isInsideGrid=function(t,e,i,o){return i>=0&&t<this.gridRightBoundary&&o>=0&&e<this.gridBottomBoundary},he.prototype.getViewportMatrix=function(){var e=t.identity([]);return t.translate(e,e,[-100,-100,0]),e};var de=function(t,e,i,o){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):o&&i?1:0,this.placed=i;};de.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var _e=function(t,e,i,o,r){this.text=new de(t?t.text:null,e,i,r),this.icon=new de(t?t.icon:null,e,o,r);};_e.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var fe=function(t,e,i){this.text=t,this.icon=e,this.skipFade=i;},me=function(){this.invProjMatrix=t.create(),this.viewportMatrix=t.create(),this.circles=[];},ge=function(t,e,i,o,r){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=i,this.bucketIndex=o,this.tileID=r;},ve=function(t){this.crossSourceCollisions=t,this.maxGroupID=0,this.collisionGroups={};};function ye(e,i,o,r,a){var n=t.getAnchorAlignment(e),s=-(n.horizontalAlign-.5)*i,l=-(n.verticalAlign-.5)*o,c=t.evaluateVariableOffset(e,r);return new t.Point(s+c[0]*a,l+c[1]*a)}function xe(e,i,o,r,a,n){var s=e.x1,l=e.x2,c=e.y1,u=e.y2,h=e.anchorPointX,p=e.anchorPointY,d=new t.Point(i,o);return r&&d._rotate(a?n:-n),{x1:s+d.x,y1:c+d.y,x2:l+d.x,y2:u+d.y,anchorPointX:h,anchorPointY:p}}ve.prototype.get=function(t){if(this.crossSourceCollisions)return {ID:0,predicate:null};if(!this.collisionGroups[t]){var e=++this.maxGroupID;this.collisionGroups[t]={ID:e,predicate:function(t){return t.collisionGroupID===e}};}return this.collisionGroups[t]};var be=function(t,e,i,o){this.transform=t.clone(),this.collisionIndex=new he(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=e,this.retainedQueryData={},this.collisionGroups=new ve(i),this.collisionCircleArrays={},this.prevPlacement=o,o&&(o.prevPlacement=void 0),this.placedOrientations={};};function we(t,e,i,o,r){t.emplaceBack(e?1:0,i?1:0,o||0,r||0),t.emplaceBack(e?1:0,i?1:0,o||0,r||0),t.emplaceBack(e?1:0,i?1:0,o||0,r||0),t.emplaceBack(e?1:0,i?1:0,o||0,r||0);}be.prototype.getBucketParts=function(e,i,o,r){var a=o.getBucket(i),n=o.latestFeatureIndex;if(a&&n&&i.id===a.layerIds[0]){var s=o.collisionBoxArray,l=a.layers[0].layout,c=Math.pow(2,this.transform.zoom-o.tileID.overscaledZ),u=o.tileSize/t.EXTENT,h=this.transform.calculatePosMatrix(o.tileID.toUnwrapped()),p=\"map\"===l.get(\"text-pitch-alignment\"),d=\"map\"===l.get(\"text-rotation-alignment\"),_=pe(o,1,this.transform.zoom),f=Jt(h,p,d,this.transform,_),m=null;if(p){var g=Qt(h,p,d,this.transform,_);m=t.multiply([],this.transform.labelPlaneMatrix,g);}this.retainedQueryData[a.bucketInstanceId]=new ge(a.bucketInstanceId,n,a.sourceLayerIndex,a.index,o.tileID);var v={bucket:a,layout:l,posMatrix:h,textLabelPlaneMatrix:f,labelToScreenMatrix:m,scale:c,textPixelRatio:u,holdingForFade:o.holdingForFade(),collisionBoxArray:s,partiallyEvaluatedTextSize:t.evaluateSizeForZoom(a.textSizeData,this.transform.zoom),collisionGroup:this.collisionGroups.get(a.sourceID)};if(r)for(var y=0,x=a.sortKeyRanges;y<x.length;y+=1){var b=x[y];e.push({sortKey:b.sortKey,symbolInstanceStart:b.symbolInstanceStart,symbolInstanceEnd:b.symbolInstanceEnd,parameters:v});}else e.push({symbolInstanceStart:0,symbolInstanceEnd:a.symbolInstances.length,parameters:v});}},be.prototype.attemptAnchorPlacement=function(t,e,i,o,r,a,n,s,l,c,u,h,p,d,_){var f,m=[h.textOffset0,h.textOffset1],g=ye(t,i,o,m,r),v=this.collisionIndex.placeCollisionBox(xe(e,g.x,g.y,a,n,this.transform.angle),u,s,l,c.predicate);if(!_||0!==this.collisionIndex.placeCollisionBox(xe(_,g.x,g.y,a,n,this.transform.angle),u,s,l,c.predicate).box.length)return v.box.length>0?(this.prevPlacement&&this.prevPlacement.variableOffsets[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID].text&&(f=this.prevPlacement.variableOffsets[h.crossTileID].anchor),this.variableOffsets[h.crossTileID]={textOffset:m,width:i,height:o,anchor:t,textBoxScale:r,prevAnchor:f},this.markUsedJustification(p,t,h,d),p.allowVerticalPlacement&&(this.markUsedOrientation(p,d,h),this.placedOrientations[h.crossTileID]=d),{shift:g,placedGlyphBoxes:v}):void 0},be.prototype.placeLayerBucketPart=function(e,i,o){var r=this,a=e.parameters,n=a.bucket,s=a.layout,l=a.posMatrix,c=a.textLabelPlaneMatrix,u=a.labelToScreenMatrix,h=a.textPixelRatio,p=a.holdingForFade,d=a.collisionBoxArray,_=a.partiallyEvaluatedTextSize,f=a.collisionGroup,m=s.get(\"text-optional\"),g=s.get(\"icon-optional\"),v=s.get(\"text-allow-overlap\"),y=s.get(\"icon-allow-overlap\"),x=\"map\"===s.get(\"text-rotation-alignment\"),b=\"map\"===s.get(\"text-pitch-alignment\"),w=\"none\"!==s.get(\"icon-text-fit\"),T=\"viewport-y\"===s.get(\"symbol-z-order\"),E=v&&(y||!n.hasIconData()||g),I=y&&(v||!n.hasTextData()||m);!n.collisionArrays&&d&&n.deserializeCollisionBoxes(d);var P=function(e,a){if(!i[e.crossTileID])if(p)r.placements[e.crossTileID]=new fe(!1,!1,!1);else {var d,T=!1,P=!1,S=!0,C=null,z={box:null,offscreen:null},D={box:null,offscreen:null},A=null,M=null,L=0,R=0,k=0;a.textFeatureIndex?L=a.textFeatureIndex:e.useRuntimeCollisionCircles&&(L=e.featureIndex),a.verticalTextFeatureIndex&&(R=a.verticalTextFeatureIndex);var B=a.textBox;if(B){var O=function(i){var o=t.WritingMode.horizontal;if(n.allowVerticalPlacement&&!i&&r.prevPlacement){var a=r.prevPlacement.placedOrientations[e.crossTileID];a&&(r.placedOrientations[e.crossTileID]=a,r.markUsedOrientation(n,o=a,e));}return o},F=function(i,o){if(n.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&a.verticalTextBox)for(var r=0,s=n.writingModes;r<s.length&&(s[r]===t.WritingMode.vertical?(z=o(),D=z):z=i(),!(z&&z.box&&z.box.length));r+=1);else z=i();};if(s.get(\"text-variable-anchor\")){var U=s.get(\"text-variable-anchor\");if(r.prevPlacement&&r.prevPlacement.variableOffsets[e.crossTileID]){var N=r.prevPlacement.variableOffsets[e.crossTileID];U.indexOf(N.anchor)>0&&(U=U.filter((function(t){return t!==N.anchor}))).unshift(N.anchor);}var Z=function(t,i,o){for(var a=t.x2-t.x1,s=t.y2-t.y1,c=e.textBoxScale,u=w&&!y?i:null,p={box:[],offscreen:!1},d=v?2*U.length:U.length,_=0;_<d;++_){var m=r.attemptAnchorPlacement(U[_%U.length],t,a,s,c,x,b,h,l,f,_>=U.length,e,n,o,u);if(m&&(p=m.placedGlyphBoxes)&&p.box&&p.box.length){T=!0,C=m.shift;break}}return p};F((function(){return Z(B,a.iconBox,t.WritingMode.horizontal)}),(function(){var i=a.verticalTextBox;return n.allowVerticalPlacement&&!(z&&z.box&&z.box.length)&&e.numVerticalGlyphVertices>0&&i?Z(i,a.verticalIconBox,t.WritingMode.vertical):{box:null,offscreen:null}})),z&&(T=z.box,S=z.offscreen);var q=O(z&&z.box);if(!T&&r.prevPlacement){var j=r.prevPlacement.variableOffsets[e.crossTileID];j&&(r.variableOffsets[e.crossTileID]=j,r.markUsedJustification(n,j.anchor,e,q));}}else {var V=function(t,i){var o=r.collisionIndex.placeCollisionBox(t,v,h,l,f.predicate);return o&&o.box&&o.box.length&&(r.markUsedOrientation(n,i,e),r.placedOrientations[e.crossTileID]=i),o};F((function(){return V(B,t.WritingMode.horizontal)}),(function(){var i=a.verticalTextBox;return n.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&i?V(i,t.WritingMode.vertical):{box:null,offscreen:null}})),O(z&&z.box&&z.box.length);}}if(T=(d=z)&&d.box&&d.box.length>0,S=d&&d.offscreen,e.useRuntimeCollisionCircles){var G=n.text.placedSymbolArray.get(e.centerJustifiedTextSymbolIndex),W=t.evaluateSizeForFeature(n.textSizeData,_,G),X=s.get(\"text-padding\");A=r.collisionIndex.placeCollisionCircles(v,G,n.lineVertexArray,n.glyphOffsetArray,W,l,c,u,o,b,f.predicate,e.collisionCircleDiameter,X),T=v||A.circles.length>0&&!A.collisionDetected,S=S&&A.offscreen;}if(a.iconFeatureIndex&&(k=a.iconFeatureIndex),a.iconBox){var H=function(t){var e=w&&C?xe(t,C.x,C.y,x,b,r.transform.angle):t;return r.collisionIndex.placeCollisionBox(e,y,h,l,f.predicate)};P=D&&D.box&&D.box.length&&a.verticalIconBox?(M=H(a.verticalIconBox)).box.length>0:(M=H(a.iconBox)).box.length>0,S=S&&M.offscreen;}var K=m||0===e.numHorizontalGlyphVertices&&0===e.numVerticalGlyphVertices,Y=g||0===e.numIconVertices;if(K||Y?Y?K||(P=P&&T):T=P&&T:P=T=P&&T,T&&d&&d.box&&r.collisionIndex.insertCollisionBox(d.box,s.get(\"text-ignore-placement\"),n.bucketInstanceId,D&&D.box&&R?R:L,f.ID),P&&M&&r.collisionIndex.insertCollisionBox(M.box,s.get(\"icon-ignore-placement\"),n.bucketInstanceId,k,f.ID),A&&(T&&r.collisionIndex.insertCollisionCircles(A.circles,s.get(\"text-ignore-placement\"),n.bucketInstanceId,L,f.ID),o)){var J=n.bucketInstanceId,Q=r.collisionCircleArrays[J];void 0===Q&&(Q=r.collisionCircleArrays[J]=new me);for(var $=0;$<A.circles.length;$+=4)Q.circles.push(A.circles[$+0]),Q.circles.push(A.circles[$+1]),Q.circles.push(A.circles[$+2]),Q.circles.push(A.collisionDetected?1:0);}r.placements[e.crossTileID]=new fe(T||E,P||I,S||n.justReloaded),i[e.crossTileID]=!0;}};if(T)for(var S=n.getSortedSymbolIndexes(this.transform.angle),C=S.length-1;C>=0;--C){var z=S[C];P(n.symbolInstances.get(z),n.collisionArrays[z]);}else for(var D=e.symbolInstanceStart;D<e.symbolInstanceEnd;D++)P(n.symbolInstances.get(D),n.collisionArrays[D]);if(o&&n.bucketInstanceId in this.collisionCircleArrays){var A=this.collisionCircleArrays[n.bucketInstanceId];t.invert(A.invProjMatrix,l),A.viewportMatrix=this.collisionIndex.getViewportMatrix();}n.justReloaded=!1;},be.prototype.markUsedJustification=function(e,i,o,r){var a;a=r===t.WritingMode.vertical?o.verticalPlacedTextSymbolIndex:{left:o.leftJustifiedTextSymbolIndex,center:o.centerJustifiedTextSymbolIndex,right:o.rightJustifiedTextSymbolIndex}[t.getAnchorJustification(i)];for(var n=0,s=[o.leftJustifiedTextSymbolIndex,o.centerJustifiedTextSymbolIndex,o.rightJustifiedTextSymbolIndex,o.verticalPlacedTextSymbolIndex];n<s.length;n+=1){var l=s[n];l>=0&&(e.text.placedSymbolArray.get(l).crossTileID=a>=0&&l!==a?0:o.crossTileID);}},be.prototype.markUsedOrientation=function(e,i,o){for(var r=i===t.WritingMode.horizontal||i===t.WritingMode.horizontalOnly?i:0,a=i===t.WritingMode.vertical?i:0,n=0,s=[o.leftJustifiedTextSymbolIndex,o.centerJustifiedTextSymbolIndex,o.rightJustifiedTextSymbolIndex];n<s.length;n+=1)e.text.placedSymbolArray.get(s[n]).placedOrientation=r;o.verticalPlacedTextSymbolIndex&&(e.text.placedSymbolArray.get(o.verticalPlacedTextSymbolIndex).placedOrientation=a);},be.prototype.commit=function(t){this.commitTime=t,this.zoomAtLastRecencyCheck=this.transform.zoom;var e=this.prevPlacement,i=!1;this.prevZoomAdjustment=e?e.zoomAdjustment(this.transform.zoom):0;var o=e?e.symbolFadeChange(t):1,r=e?e.opacities:{},a=e?e.variableOffsets:{},n=e?e.placedOrientations:{};for(var s in this.placements){var l=this.placements[s],c=r[s];c?(this.opacities[s]=new _e(c,o,l.text,l.icon),i=i||l.text!==c.text.placed||l.icon!==c.icon.placed):(this.opacities[s]=new _e(null,o,l.text,l.icon,l.skipFade),i=i||l.text||l.icon);}for(var u in r){var h=r[u];if(!this.opacities[u]){var p=new _e(h,o,!1,!1);p.isHidden()||(this.opacities[u]=p,i=i||h.text.placed||h.icon.placed);}}for(var d in a)this.variableOffsets[d]||!this.opacities[d]||this.opacities[d].isHidden()||(this.variableOffsets[d]=a[d]);for(var _ in n)this.placedOrientations[_]||!this.opacities[_]||this.opacities[_].isHidden()||(this.placedOrientations[_]=n[_]);i?this.lastPlacementChangeTime=t:\"number\"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=e?e.lastPlacementChangeTime:t);},be.prototype.updateLayerOpacities=function(t,e){for(var i={},o=0,r=e;o<r.length;o+=1){var a=r[o],n=a.getBucket(t);n&&a.latestFeatureIndex&&t.id===n.layerIds[0]&&this.updateBucketOpacities(n,i,a.collisionBoxArray);}},be.prototype.updateBucketOpacities=function(e,i,o){var r=this;e.hasTextData()&&e.text.opacityVertexArray.clear(),e.hasIconData()&&e.icon.opacityVertexArray.clear(),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexArray.clear(),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexArray.clear();var a=e.layers[0].layout,n=new _e(null,0,!1,!1,!0),s=a.get(\"text-allow-overlap\"),l=a.get(\"icon-allow-overlap\"),c=a.get(\"text-variable-anchor\"),u=\"map\"===a.get(\"text-rotation-alignment\"),h=\"map\"===a.get(\"text-pitch-alignment\"),p=\"none\"!==a.get(\"icon-text-fit\"),d=new _e(null,0,s&&(l||!e.hasIconData()||a.get(\"icon-optional\")),l&&(s||!e.hasTextData()||a.get(\"text-optional\")),!0);!e.collisionArrays&&o&&(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData())&&e.deserializeCollisionBoxes(o);for(var _=function(t,e,i){for(var o=0;o<e/4;o++)t.opacityVertexArray.emplaceBack(i);},f=function(o){var a=e.symbolInstances.get(o),s=a.numHorizontalGlyphVertices,l=a.numVerticalGlyphVertices,f=a.crossTileID,m=r.opacities[f];i[f]?m=n:m||(r.opacities[f]=m=d),i[f]=!0;var g=a.numIconVertices>0,v=r.placedOrientations[a.crossTileID],y=v===t.WritingMode.vertical,x=v===t.WritingMode.horizontal||v===t.WritingMode.horizontalOnly;if(s>0||l>0){var b=De(m.text);_(e.text,s,y?Ae:b),_(e.text,l,x?Ae:b);var w=m.text.isHidden();[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=w||y?1:0);})),a.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(a.verticalPlacedTextSymbolIndex).hidden=w||x?1:0);var T=r.variableOffsets[a.crossTileID];T&&r.markUsedJustification(e,T.anchor,a,v);var E=r.placedOrientations[a.crossTileID];E&&(r.markUsedJustification(e,\"left\",a,E),r.markUsedOrientation(e,E,a));}if(g){var I=De(m.icon),P=!(p&&a.verticalPlacedIconSymbolIndex&&y);a.placedIconSymbolIndex>=0&&(_(e.icon,a.numIconVertices,P?I:Ae),e.icon.placedSymbolArray.get(a.placedIconSymbolIndex).hidden=m.icon.isHidden()),a.verticalPlacedIconSymbolIndex>=0&&(_(e.icon,a.numVerticalIconVertices,P?Ae:I),e.icon.placedSymbolArray.get(a.verticalPlacedIconSymbolIndex).hidden=m.icon.isHidden());}if(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData()){var S=e.collisionArrays[o];if(S){var C=new t.Point(0,0);if(S.textBox||S.verticalTextBox){var z=!0;if(c){var D=r.variableOffsets[f];D?(C=ye(D.anchor,D.width,D.height,D.textOffset,D.textBoxScale),u&&C._rotate(h?r.transform.angle:-r.transform.angle)):z=!1;}S.textBox&&we(e.textCollisionBox.collisionVertexArray,m.text.placed,!z||y,C.x,C.y),S.verticalTextBox&&we(e.textCollisionBox.collisionVertexArray,m.text.placed,!z||x,C.x,C.y);}var A=Boolean(!x&&S.verticalIconBox);S.iconBox&&we(e.iconCollisionBox.collisionVertexArray,m.icon.placed,A,p?C.x:0,p?C.y:0),S.verticalIconBox&&we(e.iconCollisionBox.collisionVertexArray,m.icon.placed,!A,p?C.x:0,p?C.y:0);}}},m=0;m<e.symbolInstances.length;m++)f(m);if(e.sortFeatures(this.transform.angle),this.retainedQueryData[e.bucketInstanceId]&&(this.retainedQueryData[e.bucketInstanceId].featureSortOrder=e.featureSortOrder),e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexBuffer&&e.iconCollisionBox.collisionVertexBuffer.updateData(e.iconCollisionBox.collisionVertexArray),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexBuffer&&e.textCollisionBox.collisionVertexBuffer.updateData(e.textCollisionBox.collisionVertexArray),e.bucketInstanceId in this.collisionCircleArrays){var g=this.collisionCircleArrays[e.bucketInstanceId];e.placementInvProjMatrix=g.invProjMatrix,e.placementViewportMatrix=g.viewportMatrix,e.collisionCircleArray=g.circles,delete this.collisionCircleArrays[e.bucketInstanceId];}},be.prototype.symbolFadeChange=function(t){return 0===this.fadeDuration?1:(t-this.commitTime)/this.fadeDuration+this.prevZoomAdjustment},be.prototype.zoomAdjustment=function(t){return Math.max(0,(this.transform.zoom-t)/1.5)},be.prototype.hasTransitions=function(t){return this.stale||t-this.lastPlacementChangeTime<this.fadeDuration},be.prototype.stillRecent=function(t,e){var i=this.zoomAtLastRecencyCheck===e?1-this.zoomAdjustment(e):1;return this.zoomAtLastRecencyCheck=e,this.commitTime+this.fadeDuration*i>t},be.prototype.setStale=function(){this.stale=!0;};var Te=Math.pow(2,25),Ee=Math.pow(2,24),Ie=Math.pow(2,17),Pe=Math.pow(2,16),Se=Math.pow(2,9),Ce=Math.pow(2,8),ze=Math.pow(2,1);function De(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,i=Math.floor(127*t.opacity);return i*Te+e*Ee+i*Ie+e*Pe+i*Se+e*Ce+i*ze+e}var Ae=0,Me=function(t){this._sortAcrossTiles=\"viewport-y\"!==t.layout.get(\"symbol-z-order\")&&void 0!==t.layout.get(\"symbol-sort-key\").constantOr(1),this._currentTileIndex=0,this._currentPartIndex=0,this._seenCrossTileIDs={},this._bucketParts=[];};Me.prototype.continuePlacement=function(t,e,i,o,r){for(var a=this._bucketParts;this._currentTileIndex<t.length;)if(e.getBucketParts(a,o,t[this._currentTileIndex],this._sortAcrossTiles),this._currentTileIndex++,r())return !0;for(this._sortAcrossTiles&&(this._sortAcrossTiles=!1,a.sort((function(t,e){return t.sortKey-e.sortKey})));this._currentPartIndex<a.length;)if(e.placeLayerBucketPart(a[this._currentPartIndex],this._seenCrossTileIDs,i),this._currentPartIndex++,r())return !0;return !1};var Le=function(t,e,i,o,r,a,n){this.placement=new be(t,r,a,n),this._currentPlacementIndex=e.length-1,this._forceFullPlacement=i,this._showCollisionBoxes=o,this._done=!1;};Le.prototype.isDone=function(){return this._done},Le.prototype.continuePlacement=function(e,i,o){for(var r=this,a=t.browser.now(),n=function(){var e=t.browser.now()-a;return !r._forceFullPlacement&&e>2};this._currentPlacementIndex>=0;){var s=i[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if(\"symbol\"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new Me(s)),this._inProgressLayer.continuePlacement(o[s.source],this.placement,this._showCollisionBoxes,s,n))return;delete this._inProgressLayer;}this._currentPlacementIndex--;}this._done=!0;},Le.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Re=512/t.EXTENT/2,ke=function(t,e,i){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=i;for(var o=0;o<e.length;o++){var r=e.get(o),a=r.key;this.indexedSymbolInstances[a]||(this.indexedSymbolInstances[a]=[]),this.indexedSymbolInstances[a].push({crossTileID:r.crossTileID,coord:this.getScaledCoordinates(r,t)});}};ke.prototype.getScaledCoordinates=function(e,i){var o=Re/Math.pow(2,i.canonical.z-this.tileID.canonical.z);return {x:Math.floor((i.canonical.x*t.EXTENT+e.anchorX)*o),y:Math.floor((i.canonical.y*t.EXTENT+e.anchorY)*o)}},ke.prototype.findMatches=function(t,e,i){for(var o=this.tileID.canonical.z<e.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),r=0;r<t.length;r++){var a=t.get(r);if(!a.crossTileID){var n=this.indexedSymbolInstances[a.key];if(n)for(var s=this.getScaledCoordinates(a,e),l=0,c=n;l<c.length;l+=1){var u=c[l];if(Math.abs(u.coord.x-s.x)<=o&&Math.abs(u.coord.y-s.y)<=o&&!i[u.crossTileID]){i[u.crossTileID]=!0,a.crossTileID=u.crossTileID;break}}}}};var Be=function(){this.maxCrossTileID=0;};Be.prototype.generate=function(){return ++this.maxCrossTileID};var Oe=function(){this.indexes={},this.usedCrossTileIDs={},this.lng=0;};Oe.prototype.handleWrapJump=function(t){var e=Math.round((t-this.lng)/360);if(0!==e)for(var i in this.indexes){var o=this.indexes[i],r={};for(var a in o){var n=o[a];n.tileID=n.tileID.unwrapTo(n.tileID.wrap+e),r[n.tileID.key]=n;}this.indexes[i]=r;}this.lng=t;},Oe.prototype.addBucket=function(t,e,i){if(this.indexes[t.overscaledZ]&&this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId===e.bucketInstanceId)return !1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key]);}for(var o=0;o<e.symbolInstances.length;o++)e.symbolInstances.get(o).crossTileID=0;this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]={});var r=this.usedCrossTileIDs[t.overscaledZ];for(var a in this.indexes){var n=this.indexes[a];if(Number(a)>t.overscaledZ)for(var s in n){var l=n[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,r);}else {var c=n[t.scaledTo(Number(a)).key];c&&c.findMatches(e.symbolInstances,t,r);}}for(var u=0;u<e.symbolInstances.length;u++){var h=e.symbolInstances.get(u);h.crossTileID||(h.crossTileID=i.generate(),r[h.crossTileID]=!0);}return void 0===this.indexes[t.overscaledZ]&&(this.indexes[t.overscaledZ]={}),this.indexes[t.overscaledZ][t.key]=new ke(t,e.symbolInstances,e.bucketInstanceId),!0},Oe.prototype.removeBucketCrossTileIDs=function(t,e){for(var i in e.indexedSymbolInstances)for(var o=0,r=e.indexedSymbolInstances[i];o<r.length;o+=1)delete this.usedCrossTileIDs[t][r[o].crossTileID];},Oe.prototype.removeStaleBuckets=function(t){var e=!1;for(var i in this.indexes){var o=this.indexes[i];for(var r in o)t[o[r].bucketInstanceId]||(this.removeBucketCrossTileIDs(i,o[r]),delete o[r],e=!0);}return e};var Fe=function(){this.layerIndexes={},this.crossTileIDs=new Be,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={};};Fe.prototype.addLayer=function(t,e,i){var o=this.layerIndexes[t.id];void 0===o&&(o=this.layerIndexes[t.id]=new Oe);var r=!1,a={};o.handleWrapJump(i);for(var n=0,s=e;n<s.length;n+=1){var l=s[n],c=l.getBucket(t);c&&t.id===c.layerIds[0]&&(c.bucketInstanceId||(c.bucketInstanceId=++this.maxBucketInstanceId),o.addBucket(l.tileID,c,this.crossTileIDs)&&(r=!0),a[c.bucketInstanceId]=!0);}return o.removeStaleBuckets(a)&&(r=!0),r},Fe.prototype.pruneUnusedLayers=function(t){var e={};for(var i in t.forEach((function(t){e[t]=!0;})),this.layerIndexes)e[i]||delete this.layerIndexes[i];};var Ue=function(e,i){return t.emitValidationErrors(e,i&&i.filter((function(t){return \"source.canvas\"!==t.identifier})))},Ne=t.pick(Zt,[\"addLayer\",\"removeLayer\",\"setPaintProperty\",\"setLayoutProperty\",\"setFilter\",\"addSource\",\"removeSource\",\"setLayerZoomRange\",\"setLight\",\"setTransition\",\"setGeoJSONSourceData\"]),Ze=t.pick(Zt,[\"setCenter\",\"setZoom\",\"setBearing\",\"setPitch\"]),qe=function(){var e={},i=t.styleSpec.$version;for(var o in t.styleSpec.$root){var r,a=t.styleSpec.$root[o];if(a.required)null!=(r=\"version\"===o?i:\"array\"===a.type?[]:{})&&(e[o]=r);}return e}(),je=function(e){function i(o,r){var a=this;void 0===r&&(r={}),e.call(this),this.map=o,this.dispatcher=new E(Ft(),this),this.imageManager=new p,this.imageManager.setEventedParent(this),this.glyphManager=new y(o._requestManager,r.localIdeographFontFamily),this.lineAtlas=new T(256,512),this.crossTileSymbolIndex=new Fe,this._layers={},this._serializedLayers={},this._order=[],this.sourceCaches={},this.zoomHistory=new t.ZoomHistory,this._loaded=!1,this._availableImages=[],this._resetUpdates(),this.dispatcher.broadcast(\"setReferrer\",t.getReferrer());var n=this;this._rtlTextPluginCallback=i.registerForPluginStateChange((function(e){n.dispatcher.broadcast(\"syncRTLPluginState\",{pluginStatus:e.pluginStatus,pluginURL:e.pluginURL},(function(e,i){if(t.triggerPluginCompletionEvent(e),i&&i.every((function(t){return t})))for(var o in n.sourceCaches)n.sourceCaches[o].reload();}));})),this.on(\"data\",(function(t){if(\"source\"===t.dataType&&\"metadata\"===t.sourceDataType){var e=a.sourceCaches[t.sourceId];if(e){var i=e.getSource();if(i&&i.vectorLayerIds)for(var o in a._layers){var r=a._layers[o];r.source===i.id&&a._validateLayer(r);}}}}));}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.loadURL=function(e,i){var o=this;void 0===i&&(i={}),this.fire(new t.Event(\"dataloading\",{dataType:\"style\"}));var r=\"boolean\"==typeof i.validate?i.validate:!t.isMapboxURL(e);e=this.map._requestManager.normalizeStyleURL(e,i.accessToken);var a=this.map._requestManager.transformRequest(e,t.ResourceType.Style);this._request=t.getJSON(a,(function(e,i){o._request=null,e?o.fire(new t.ErrorEvent(e)):i&&o._load(i,r);}));},i.prototype.loadJSON=function(e,i){var o=this;void 0===i&&(i={}),this.fire(new t.Event(\"dataloading\",{dataType:\"style\"})),this._request=t.browser.frame((function(){o._request=null,o._load(e,!1!==i.validate);}));},i.prototype.loadEmpty=function(){this.fire(new t.Event(\"dataloading\",{dataType:\"style\"})),this._load(qe,!1);},i.prototype._load=function(e,i){if(!i||!Ue(this,t.validateStyle(e))){for(var o in this._loaded=!0,this.stylesheet=e,e.sources)this.addSource(o,e.sources[o],{validate:!1});e.sprite?this._loadSprite(e.sprite):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var r=Nt(this.stylesheet.layers);this._order=r.map((function(t){return t.id})),this._layers={},this._serializedLayers={};for(var a=0,n=r;a<n.length;a+=1){var s=n[a];(s=t.createStyleLayer(s)).setEventedParent(this,{layer:{id:s.id}}),this._layers[s.id]=s,this._serializedLayers[s.id]=s.serialize();}this.dispatcher.broadcast(\"setLayers\",this._serializeLayers(this._order)),this.light=new w(this.stylesheet.light),this.fire(new t.Event(\"data\",{dataType:\"style\"})),this.fire(new t.Event(\"style.load\"));}},i.prototype._loadSprite=function(e){var i=this;this._spriteRequest=function(e,i,o){var r,a,n,s=t.browser.devicePixelRatio>1?\"@2x\":\"\",l=t.getJSON(i.transformRequest(i.normalizeSpriteURL(e,s,\".json\"),t.ResourceType.SpriteJSON),(function(t,e){l=null,n||(n=t,r=e,u());})),c=t.getImage(i.transformRequest(i.normalizeSpriteURL(e,s,\".png\"),t.ResourceType.SpriteImage),(function(t,e){c=null,n||(n=t,a=e,u());}));function u(){if(n)o(n);else if(r&&a){var e=t.browser.getImageData(a),i={};for(var s in r){var l=r[s],c=l.width,u=l.height,h=l.x,p=l.y,d=l.sdf,_=l.pixelRatio,f=l.stretchX,m=l.stretchY,g=l.content,v=new t.RGBAImage({width:c,height:u});t.RGBAImage.copy(e,v,{x:h,y:p},{x:0,y:0},{width:c,height:u}),i[s]={data:v,pixelRatio:_,sdf:d,stretchX:f,stretchY:m,content:g};}o(null,i);}}return {cancel:function(){l&&(l.cancel(),l=null),c&&(c.cancel(),c=null);}}}(e,this.map._requestManager,(function(e,o){if(i._spriteRequest=null,e)i.fire(new t.ErrorEvent(e));else if(o)for(var r in o)i.imageManager.addImage(r,o[r]);i.imageManager.setLoaded(!0),i._availableImages=i.imageManager.listImages(),i.dispatcher.broadcast(\"setImages\",i._availableImages),i.fire(new t.Event(\"data\",{dataType:\"style\"}));}));},i.prototype._validateLayer=function(e){var i=this.sourceCaches[e.source];if(i){var o=e.sourceLayer;if(o){var r=i.getSource();(\"geojson\"===r.type||r.vectorLayerIds&&-1===r.vectorLayerIds.indexOf(o))&&this.fire(new t.ErrorEvent(new Error('Source layer \"'+o+'\" does not exist on source \"'+r.id+'\" as specified by style layer \"'+e.id+'\"')));}}},i.prototype.loaded=function(){if(!this._loaded)return !1;if(Object.keys(this._updatedSources).length)return !1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return !1;return !!this.imageManager.isLoaded()},i.prototype._serializeLayers=function(t){for(var e=[],i=0,o=t;i<o.length;i+=1){var r=this._layers[o[i]];\"custom\"!==r.type&&e.push(r.serialize());}return e},i.prototype.hasTransitions=function(){if(this.light&&this.light.hasTransition())return !0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return !0;for(var e in this._layers)if(this._layers[e].hasTransition())return !0;return !1},i.prototype._checkLoaded=function(){if(!this._loaded)throw new Error(\"Style is not done loading\")},i.prototype.update=function(e){if(this._loaded){var i=this._changed;if(this._changed){var o=Object.keys(this._updatedLayers),r=Object.keys(this._removedLayers);for(var a in (o.length||r.length)&&this._updateWorkerLayers(o,r),this._updatedSources){var n=this._updatedSources[a];\"reload\"===n?this._reloadSource(a):\"clear\"===n&&this._clearSource(a);}for(var s in this._updateTilesForChangedImages(),this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates();}var l={};for(var c in this.sourceCaches){var u=this.sourceCaches[c];l[c]=u.used,u.used=!1;}for(var h=0,p=this._order;h<p.length;h+=1){var d=this._layers[p[h]];d.recalculate(e,this._availableImages),!d.isHidden(e.zoom)&&d.source&&(this.sourceCaches[d.source].used=!0);}for(var _ in l){var f=this.sourceCaches[_];l[_]!==f.used&&f.fire(new t.Event(\"data\",{sourceDataType:\"visibility\",dataType:\"source\",sourceId:_}));}this.light.recalculate(e),this.z=e.zoom,i&&this.fire(new t.Event(\"data\",{dataType:\"style\"}));}},i.prototype._updateTilesForChangedImages=function(){var t=Object.keys(this._changedImages);if(t.length){for(var e in this.sourceCaches)this.sourceCaches[e].reloadTilesForDependencies([\"icons\",\"patterns\"],t);this._changedImages={};}},i.prototype._updateWorkerLayers=function(t,e){this.dispatcher.broadcast(\"updateLayers\",{layers:this._serializeLayers(t),removedIds:e});},i.prototype._resetUpdates=function(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={},this._changedImages={};},i.prototype.setState=function(e){var i=this;if(this._checkLoaded(),Ue(this,t.validateStyle(e)))return !1;(e=t.clone$1(e)).layers=Nt(e.layers);var o=function(e,i){if(!e)return [{command:Zt.setStyle,args:[i]}];var o=[];try{if(!t.deepEqual(e.version,i.version))return [{command:Zt.setStyle,args:[i]}];t.deepEqual(e.center,i.center)||o.push({command:Zt.setCenter,args:[i.center]}),t.deepEqual(e.zoom,i.zoom)||o.push({command:Zt.setZoom,args:[i.zoom]}),t.deepEqual(e.bearing,i.bearing)||o.push({command:Zt.setBearing,args:[i.bearing]}),t.deepEqual(e.pitch,i.pitch)||o.push({command:Zt.setPitch,args:[i.pitch]}),t.deepEqual(e.sprite,i.sprite)||o.push({command:Zt.setSprite,args:[i.sprite]}),t.deepEqual(e.glyphs,i.glyphs)||o.push({command:Zt.setGlyphs,args:[i.glyphs]}),t.deepEqual(e.transition,i.transition)||o.push({command:Zt.setTransition,args:[i.transition]}),t.deepEqual(e.light,i.light)||o.push({command:Zt.setLight,args:[i.light]});var r={},a=[];!function(e,i,o,r){var a;for(a in i=i||{},e=e||{})e.hasOwnProperty(a)&&(i.hasOwnProperty(a)||jt(a,o,r));for(a in i)i.hasOwnProperty(a)&&(e.hasOwnProperty(a)?t.deepEqual(e[a],i[a])||(\"geojson\"===e[a].type&&\"geojson\"===i[a].type&&Gt(e,i,a)?o.push({command:Zt.setGeoJSONSourceData,args:[a,i[a].data]}):Vt(a,i,o,r)):qt(a,i,o));}(e.sources,i.sources,a,r);var n=[];e.layers&&e.layers.forEach((function(t){r[t.source]?o.push({command:Zt.removeLayer,args:[t.id]}):n.push(t);})),o=o.concat(a),function(e,i,o){i=i||[];var r,a,n,s,l,c,u,h=(e=e||[]).map(Xt),p=i.map(Xt),d=e.reduce(Ht,{}),_=i.reduce(Ht,{}),f=h.slice(),m=Object.create(null);for(r=0,a=0;r<h.length;r++)_.hasOwnProperty(n=h[r])?a++:(o.push({command:Zt.removeLayer,args:[n]}),f.splice(f.indexOf(n,a),1));for(r=0,a=0;r<p.length;r++)f[f.length-1-r]!==(n=p[p.length-1-r])&&(d.hasOwnProperty(n)?(o.push({command:Zt.removeLayer,args:[n]}),f.splice(f.lastIndexOf(n,f.length-a),1)):a++,o.push({command:Zt.addLayer,args:[_[n],c=f[f.length-r]]}),f.splice(f.length-r,0,n),m[n]=!0);for(r=0;r<p.length;r++)if(s=d[n=p[r]],l=_[n],!m[n]&&!t.deepEqual(s,l))if(t.deepEqual(s.source,l.source)&&t.deepEqual(s[\"source-layer\"],l[\"source-layer\"])&&t.deepEqual(s.type,l.type)){for(u in Wt(s.layout,l.layout,o,n,null,Zt.setLayoutProperty),Wt(s.paint,l.paint,o,n,null,Zt.setPaintProperty),t.deepEqual(s.filter,l.filter)||o.push({command:Zt.setFilter,args:[n,l.filter]}),t.deepEqual(s.minzoom,l.minzoom)&&t.deepEqual(s.maxzoom,l.maxzoom)||o.push({command:Zt.setLayerZoomRange,args:[n,l.minzoom,l.maxzoom]}),s)s.hasOwnProperty(u)&&\"layout\"!==u&&\"paint\"!==u&&\"filter\"!==u&&\"metadata\"!==u&&\"minzoom\"!==u&&\"maxzoom\"!==u&&(0===u.indexOf(\"paint.\")?Wt(s[u],l[u],o,n,u.slice(6),Zt.setPaintProperty):t.deepEqual(s[u],l[u])||o.push({command:Zt.setLayerProperty,args:[n,u,l[u]]}));for(u in l)l.hasOwnProperty(u)&&!s.hasOwnProperty(u)&&\"layout\"!==u&&\"paint\"!==u&&\"filter\"!==u&&\"metadata\"!==u&&\"minzoom\"!==u&&\"maxzoom\"!==u&&(0===u.indexOf(\"paint.\")?Wt(s[u],l[u],o,n,u.slice(6),Zt.setPaintProperty):t.deepEqual(s[u],l[u])||o.push({command:Zt.setLayerProperty,args:[n,u,l[u]]}));}else o.push({command:Zt.removeLayer,args:[n]}),c=f[f.lastIndexOf(n)+1],o.push({command:Zt.addLayer,args:[l,c]});}(n,i.layers,o);}catch(t){console.warn(\"Unable to compute style diff:\",t),o=[{command:Zt.setStyle,args:[i]}];}return o}(this.serialize(),e).filter((function(t){return !(t.command in Ze)}));if(0===o.length)return !1;var r=o.filter((function(t){return !(t.command in Ne)}));if(r.length>0)throw new Error(\"Unimplemented: \"+r.map((function(t){return t.command})).join(\", \")+\".\");return o.forEach((function(t){\"setTransition\"!==t.command&&i[t.command].apply(i,t.args);})),this.stylesheet=e,!0},i.prototype.addImage=function(e,i){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"An image with this name already exists.\")));this.imageManager.addImage(e,i),this._afterImageUpdated(e);},i.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e);},i.prototype.getImage=function(t){return this.imageManager.getImage(t)},i.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"No image with this name exists.\")));this.imageManager.removeImage(e),this._afterImageUpdated(e);},i.prototype._afterImageUpdated=function(e){this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.dispatcher.broadcast(\"setImages\",this._availableImages),this.fire(new t.Event(\"data\",{dataType:\"style\"}));},i.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},i.prototype.addSource=function(e,i,o){var r=this;if(void 0===o&&(o={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error(\"There is already a source with this ID\");if(!i.type)throw new Error(\"The type property must be defined, but only the following properties were given: \"+Object.keys(i).join(\", \")+\".\");if(!([\"vector\",\"raster\",\"geojson\",\"video\",\"image\"].indexOf(i.type)>=0&&this._validate(t.validateStyle.source,\"sources.\"+e,i,null,o))){this.map&&this.map._collectResourceTiming&&(i.collectResourceTiming=!0);var a=this.sourceCaches[e]=new Dt(e,i,this.dispatcher);a.style=this,a.setEventedParent(this,(function(){return {isSourceLoaded:r.loaded(),source:a.serialize(),sourceId:e}})),a.onAdd(this.map),this._changed=!0;}},i.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error(\"There is no source with this ID\");for(var i in this._layers)if(this._layers[i].source===e)return this.fire(new t.ErrorEvent(new Error('Source \"'+e+'\" cannot be removed while layer \"'+i+'\" is using it.')));var o=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],o.fire(new t.Event(\"data\",{sourceDataType:\"metadata\",dataType:\"source\",sourceId:e})),o.setEventedParent(null),o.clearTiles(),o.onRemove&&o.onRemove(this.map),this._changed=!0;},i.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0;},i.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},i.prototype.addLayer=function(e,i,o){void 0===o&&(o={}),this._checkLoaded();var r=e.id;if(this.getLayer(r))this.fire(new t.ErrorEvent(new Error('Layer with id \"'+r+'\" already exists on this map')));else {var a;if(\"custom\"===e.type){if(Ue(this,t.validateCustomStyleLayer(e)))return;a=t.createStyleLayer(e);}else {if(\"object\"==typeof e.source&&(this.addSource(r,e.source),e=t.clone$1(e),e=t.extend(e,{source:r})),this._validate(t.validateStyle.layer,\"layers.\"+r,e,{arrayIndex:-1},o))return;a=t.createStyleLayer(e),this._validateLayer(a),a.setEventedParent(this,{layer:{id:r}}),this._serializedLayers[a.id]=a.serialize();}var n=i?this._order.indexOf(i):this._order.length;if(i&&-1===n)this.fire(new t.ErrorEvent(new Error('Layer with id \"'+i+'\" does not exist on this map.')));else {if(this._order.splice(n,0,r),this._layerOrderChanged=!0,this._layers[r]=a,this._removedLayers[r]&&a.source&&\"custom\"!==a.type){var s=this._removedLayers[r];delete this._removedLayers[r],s.type!==a.type?this._updatedSources[a.source]=\"clear\":(this._updatedSources[a.source]=\"reload\",this.sourceCaches[a.source].pause());}this._updateLayer(a),a.onAdd&&a.onAdd(this.map);}}},i.prototype.moveLayer=function(e,i){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==i){var o=this._order.indexOf(e);this._order.splice(o,1);var r=i?this._order.indexOf(i):this._order.length;i&&-1===r?this.fire(new t.ErrorEvent(new Error('Layer with id \"'+i+'\" does not exist on this map.'))):(this._order.splice(r,0,e),this._layerOrderChanged=!0);}}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be moved.\")));},i.prototype.removeLayer=function(e){this._checkLoaded();var i=this._layers[e];if(i){i.setEventedParent(null);var o=this._order.indexOf(e);this._order.splice(o,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=i,delete this._layers[e],delete this._serializedLayers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],i.onRemove&&i.onRemove(this.map);}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be removed.\")));},i.prototype.getLayer=function(t){return this._layers[t]},i.prototype.hasLayer=function(t){return t in this._layers},i.prototype.setLayerZoomRange=function(e,i,o){this._checkLoaded();var r=this.getLayer(e);r?r.minzoom===i&&r.maxzoom===o||(null!=i&&(r.minzoom=i),null!=o&&(r.maxzoom=o),this._updateLayer(r)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot have zoom extent.\")));},i.prototype.setFilter=function(e,i,o){void 0===o&&(o={}),this._checkLoaded();var r=this.getLayer(e);if(r){if(!t.deepEqual(r.filter,i))return null==i?(r.filter=void 0,void this._updateLayer(r)):void(this._validate(t.validateStyle.filter,\"layers.\"+r.id+\".filter\",i,null,o)||(r.filter=t.clone$1(i),this._updateLayer(r)))}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be filtered.\")));},i.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},i.prototype.setLayoutProperty=function(e,i,o,r){void 0===r&&(r={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getLayoutProperty(i),o)||(a.setLayoutProperty(i,o,r),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")));},i.prototype.getLayoutProperty=function(e,i){var o=this.getLayer(e);if(o)return o.getLayoutProperty(i);this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style.\")));},i.prototype.setPaintProperty=function(e,i,o,r){void 0===r&&(r={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getPaintProperty(i),o)||(a.setPaintProperty(i,o,r)&&this._updateLayer(a),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")));},i.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},i.prototype.setFeatureState=function(e,i){this._checkLoaded();var o=e.source,r=e.sourceLayer,a=this.sourceCaches[o];if(void 0!==a){var n=a.getSource().type;\"geojson\"===n&&r?this.fire(new t.ErrorEvent(new Error(\"GeoJSON sources cannot have a sourceLayer parameter.\"))):\"vector\"!==n||r?(void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),a.setFeatureState(r,e.id,i)):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")));}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+o+\"' does not exist in the map's style.\")));},i.prototype.removeFeatureState=function(e,i){this._checkLoaded();var o=e.source,r=this.sourceCaches[o];if(void 0!==r){var a=r.getSource().type,n=\"vector\"===a?e.sourceLayer:void 0;\"vector\"!==a||n?i&&\"string\"!=typeof e.id&&\"number\"!=typeof e.id?this.fire(new t.ErrorEvent(new Error(\"A feature id is required to remove its specific state property.\"))):r.removeFeatureState(n,e.id,i):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")));}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+o+\"' does not exist in the map's style.\")));},i.prototype.getFeatureState=function(e){this._checkLoaded();var i=e.source,o=e.sourceLayer,r=this.sourceCaches[i];if(void 0!==r){if(\"vector\"!==r.getSource().type||o)return void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),r.getFeatureState(o,e.id);this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")));}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+i+\"' does not exist in the map's style.\")));},i.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},i.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,(function(t){return t.serialize()})),layers:this._serializeLayers(this._order)},(function(t){return void 0!==t}))},i.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&\"raster\"!==this.sourceCaches[t.source].getSource().type&&(this._updatedSources[t.source]=\"reload\",this.sourceCaches[t.source].pause()),this._changed=!0;},i.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,i=function(t){return \"fill-extrusion\"===e._layers[t].type},o={},r=[],a=this._order.length-1;a>=0;a--){var n=this._order[a];if(i(n)){o[n]=a;for(var s=0,l=t;s<l.length;s+=1){var c=l[s][n];if(c)for(var u=0,h=c;u<h.length;u+=1)r.push(h[u]);}}}r.sort((function(t,e){return e.intersectionZ-t.intersectionZ}));for(var p=[],d=this._order.length-1;d>=0;d--){var _=this._order[d];if(i(_))for(var f=r.length-1;f>=0;f--){var m=r[f].feature;if(o[m.layer.id]<d)break;p.push(m),r.pop();}else for(var g=0,v=t;g<v.length;g+=1){var y=v[g][_];if(y)for(var x=0,b=y;x<b.length;x+=1)p.push(b[x].feature);}}return p},i.prototype.queryRenderedFeatures=function(e,i,o){i&&i.filter&&this._validate(t.validateStyle.filter,\"queryRenderedFeatures.filter\",i.filter,null,i);var r={};if(i&&i.layers){if(!Array.isArray(i.layers))return this.fire(new t.ErrorEvent(new Error(\"parameters.layers must be an Array.\"))),[];for(var a=0,n=i.layers;a<n.length;a+=1){var s=n[a],l=this._layers[s];if(!l)return this.fire(new t.ErrorEvent(new Error(\"The layer '\"+s+\"' does not exist in the map's style and cannot be queried for features.\"))),[];r[l.source]=!0;}}var c=[];for(var u in i.availableImages=this._availableImages,this.sourceCaches)i.layers&&!r[u]||c.push(O(this.sourceCaches[u],this._layers,this._serializedLayers,e,i,o));return this.placement&&c.push(function(t,e,i,o,r,a,n){for(var s={},l=a.queryRenderedSymbols(o),c=[],u=0,h=Object.keys(l).map(Number);u<h.length;u+=1)c.push(n[h[u]]);c.sort(F);for(var p=function(){var i=_[d],o=i.featureIndex.lookupSymbolFeatures(l[i.bucketInstanceId],e,i.bucketIndex,i.sourceLayerIndex,r.filter,r.layers,r.availableImages,t);for(var a in o){var n=s[a]=s[a]||[],c=o[a];c.sort((function(t,e){var o=i.featureSortOrder;if(o){var r=o.indexOf(t.featureIndex);return o.indexOf(e.featureIndex)-r}return e.featureIndex-t.featureIndex}));for(var u=0,h=c;u<h.length;u+=1)n.push(h[u]);}},d=0,_=c;d<_.length;d+=1)p();var f=function(e){s[e].forEach((function(o){var r=o.feature,a=i[t[e].source].getFeatureState(r.layer[\"source-layer\"],r.id);r.source=r.layer.source,r.layer[\"source-layer\"]&&(r.sourceLayer=r.layer[\"source-layer\"]),r.state=a;}));};for(var m in s)f(m);return s}(this._layers,this._serializedLayers,this.sourceCaches,e,i,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(c)},i.prototype.querySourceFeatures=function(e,i){i&&i.filter&&this._validate(t.validateStyle.filter,\"querySourceFeatures.filter\",i.filter,null,i);var o=this.sourceCaches[e];return o?function(t,e){for(var i=t.getRenderableIds().map((function(e){return t.getTileByID(e)})),o=[],r={},a=0;a<i.length;a++){var n=i[a],s=n.tileID.canonical.key;r[s]||(r[s]=!0,n.querySourceFeatures(o,e));}return o}(o,i):[]},i.prototype.addSourceType=function(t,e,o){return i.getSourceType(t)?o(new Error('A source type called \"'+t+'\" already exists.')):(i.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast(\"loadWorkerSource\",{name:t,url:e.workerSourceURL},o):o(null,null))},i.prototype.getLight=function(){return this.light.getLight()},i.prototype.setLight=function(e,i){void 0===i&&(i={}),this._checkLoaded();var o=this.light.getLight(),r=!1;for(var a in e)if(!t.deepEqual(e[a],o[a])){r=!0;break}if(r){var n={now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,i),this.light.updateTransitions(n);}},i.prototype._validate=function(e,i,o,r,a){return void 0===a&&(a={}),(!a||!1!==a.validate)&&Ue(this,e.call(t.validateStyle,t.extend({key:i,style:this.serialize(),value:o,styleSpec:t.styleSpec},r)))},i.prototype._remove=function(){for(var e in this._request&&(this._request.cancel(),this._request=null),this._spriteRequest&&(this._spriteRequest.cancel(),this._spriteRequest=null),t.evented.off(\"pluginStateChange\",this._rtlTextPluginCallback),this._layers)this._layers[e].setEventedParent(null);for(var i in this.sourceCaches)this.sourceCaches[i].clearTiles(),this.sourceCaches[i].setEventedParent(null);this.imageManager.setEventedParent(null),this.setEventedParent(null),this.dispatcher.remove();},i.prototype._clearSource=function(t){this.sourceCaches[t].clearTiles();},i.prototype._reloadSource=function(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload();},i.prototype._updateSources=function(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t);},i.prototype._generateCollisionBoxes=function(){for(var t in this.sourceCaches)this._reloadSource(t);},i.prototype._updatePlacement=function(e,i,o,r,a){void 0===a&&(a=!1);for(var n=!1,s=!1,l={},c=0,u=this._order;c<u.length;c+=1){var h=this._layers[u[c]];if(\"symbol\"===h.type){if(!l[h.source]){var p=this.sourceCaches[h.source];l[h.source]=p.getRenderableIds(!0).map((function(t){return p.getTileByID(t)})).sort((function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)}));}var d=this.crossTileSymbolIndex.addLayer(h,l[h.source],e.center.lng);n=n||d;}}if(this.crossTileSymbolIndex.pruneUnusedLayers(this._order),((a=a||this._layerOrderChanged||0===o)||!this.pauseablePlacement||this.pauseablePlacement.isDone()&&!this.placement.stillRecent(t.browser.now(),e.zoom))&&(this.pauseablePlacement=new Le(e,this._order,a,i,o,r,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,l),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(t.browser.now()),s=!0),n&&this.pauseablePlacement.placement.setStale()),s||n)for(var _=0,f=this._order;_<f.length;_+=1){var m=this._layers[f[_]];\"symbol\"===m.type&&this.placement.updateLayerOpacities(m,l[m.source]);}return !this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},i.prototype._releaseSymbolFadeTiles=function(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles();},i.prototype.getImages=function(t,e,i){this.imageManager.getImages(e.icons,i),this._updateTilesForChangedImages();var o=this.sourceCaches[e.source];o&&o.setDependencies(e.tileID.key,e.type,e.icons);},i.prototype.getGlyphs=function(t,e,i){this.glyphManager.getGlyphs(e.stacks,i);},i.prototype.getResource=function(e,i,o){return t.makeRequest(i,o)},i}(t.Evented);je.getSourceType=function(t){return k[t]},je.setSourceType=function(t,e){k[t]=e;},je.registerForPluginStateChange=t.registerForPluginStateChange;var Ve=t.createLayout([{name:\"a_pos\",type:\"Int16\",components:2}]),Ge=gi(\"#ifdef GL_ES\\nprecision mediump float;\\n#else\\n#if !defined(lowp)\\n#define lowp\\n#endif\\n#if !defined(mediump)\\n#define mediump\\n#endif\\n#if !defined(highp)\\n#define highp\\n#endif\\n#endif\",\"#ifdef GL_ES\\nprecision highp float;\\n#else\\n#if !defined(lowp)\\n#define lowp\\n#endif\\n#if !defined(mediump)\\n#define mediump\\n#endif\\n#if !defined(highp)\\n#define highp\\n#endif\\n#endif\\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}\"),We=gi(\"uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor=u_color*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\"),Xe=gi(\"uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_mix)*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}\"),He=gi(\"varying vec3 v_data;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define mediump float radius\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define highp vec4 stroke_color\\n#pragma mapbox: define mediump float stroke_width\\n#pragma mapbox: define lowp float stroke_opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize mediump float radius\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize highp vec4 stroke_color\\n#pragma mapbox: initialize mediump float stroke_width\\n#pragma mapbox: initialize lowp float stroke_opacity\\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor=opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;varying vec3 v_data;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define mediump float radius\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define highp vec4 stroke_color\\n#pragma mapbox: define mediump float stroke_width\\n#pragma mapbox: define lowp float stroke_opacity\\nvoid main(void) {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize mediump float radius\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize highp vec4 stroke_color\\n#pragma mapbox: initialize mediump float stroke_width\\n#pragma mapbox: initialize lowp float stroke_opacity\\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position=circle_center;if (u_scale_with_map) {corner_position+=extrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center=u_matrix*vec4(circle_center,0,1);corner_position+=extrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position=u_matrix*vec4(corner_position,0,1);} else {gl_Position=u_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);}\"),Ke=gi(\"void main() {gl_FragColor=vec4(1.0);}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\"),Ye=gi(\"uniform highp float u_intensity;varying vec2 v_extrude;\\n#pragma mapbox: define highp float weight\\n#define GAUSS_COEF 0.3989422804014327\\nvoid main() {\\n#pragma mapbox: initialize highp float weight\\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;\\n#pragma mapbox: define highp float weight\\n#pragma mapbox: define mediump float radius\\nconst highp float ZERO=1.0/255.0/16.0;\\n#define GAUSS_COEF 0.3989422804014327\\nvoid main(void) {\\n#pragma mapbox: initialize highp float weight\\n#pragma mapbox: initialize mediump float radius\\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec4 pos=vec4(floor(a_pos*0.5)+extrude,0,1);gl_Position=u_matrix*pos;}\"),Je=gi(\"uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(0.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}\"),Qe=gi(\"varying float v_placed;varying float v_notUsed;void main() {float alpha=0.5;gl_FragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}\",\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}\"),$e=gi(\"varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;void main() {float alpha=0.5*min(v_perspective_ratio,1.0);float stroke_radius=0.9*max(v_perspective_ratio,1.0);float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);gl_FragColor=color*alpha*opacity_t;}\",\"attribute vec2 a_pos;attribute float a_radius;attribute vec2 a_flags;uniform mat4 u_matrix;uniform mat4 u_inv_matrix;uniform vec2 u_viewport_size;uniform float u_camera_to_center_distance;varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;vec3 toTilePosition(vec2 screenPos) {vec4 rayStart=u_inv_matrix*vec4(screenPos,-1.0,1.0);vec4 rayEnd  =u_inv_matrix*vec4(screenPos, 1.0,1.0);rayStart.xyz/=rayStart.w;rayEnd.xyz  /=rayEnd.w;highp float t=(0.0-rayStart.z)/(rayEnd.z-rayStart.z);return mix(rayStart.xyz,rayEnd.xyz,t);}void main() {vec2 quadCenterPos=a_pos;float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(mix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;vec3 tilePos=toTilePosition(quadCenterPos);vec4 clipPos=u_matrix*vec4(tilePos,1.0);highp float camera_to_anchor_distance=clipPos.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_perspective_ratio=collision_perspective_ratio;v_collision=collision;gl_Position=vec4(clipPos.xyz/clipPos.w,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}\"),ti=gi(\"uniform highp vec4 u_color;uniform sampler2D u_overlay;varying vec2 v_uv;void main() {vec4 overlay_color=texture2D(u_overlay,v_uv);gl_FragColor=mix(u_color,overlay_color,overlay_color.a);}\",\"attribute vec2 a_pos;varying vec2 v_uv;uniform mat4 u_matrix;uniform float u_overlay_scale;void main() {v_uv=a_pos/8192.0;gl_Position=u_matrix*vec4(a_pos*u_overlay_scale,0,1);}\"),ei=gi(\"#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_FragColor=color*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);}\"),ii=gi(\"varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),oi=gi(\"uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),ri=gi(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}\"),ai=gi(\"varying vec4 v_color;void main() {gl_FragColor=v_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\\n#pragma mapbox: define highp float base\\n#pragma mapbox: define highp float height\\n#pragma mapbox: define highp vec4 color\\nvoid main() {\\n#pragma mapbox: initialize highp float base\\n#pragma mapbox: initialize highp float height\\n#pragma mapbox: initialize highp vec4 color\\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}\"),ni=gi(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec3 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\\n? a_pos\\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}\"),si=gi(\"#ifdef GL_ES\\nprecision highp float;\\n#endif\\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform vec4 u_unpack;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggerationFactor=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;float exaggeration=u_zoom < 15.0 ? (u_zoom-15.0)*exaggerationFactor : 0.0;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/pow(2.0,exaggeration+(19.2562-u_zoom));gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}\"),li=gi(\"uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\\n#define PI 3.141592653589793\\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}\"),ci=gi(\"uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),ui=gi(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp vec2 v_uv;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,v_uv);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;attribute float a_uv_x;attribute float a_split_index;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;uniform float u_image_height;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp vec2 v_uv;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;highp float texel_height=1.0/u_image_height;highp float half_texel_height=0.5*texel_height;v_uv=vec2(a_uv_x,a_split_index*texel_height-half_texel_height);vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),hi=gi(\"uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec3 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float aspect_a=display_size_a.y/v_width;float aspect_b=display_size_b.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x*aspect_a,1.0);float x_b=mod(v_linesofar/pattern_size_b.x*aspect_b,1.0);float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;vec2 pos_a=mix(pattern_tl_a*texel_size-texel_size,pattern_br_a*texel_size+texel_size,vec2(x_a,y));vec2 pos_b=mix(pattern_tl_b*texel_size-texel_size,pattern_br_b*texel_size+texel_size,vec2(x_b,y));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=floorwidth;}\"),pi=gi(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}\"),di=gi(\"uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}\"),_i=gi(\"uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}\"),fi=gi(\"#define SDF_PX 8.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}\"),mi=gi(\"#define SDF_PX 8.0\\n#define SDF 1.0\\n#define ICON 0.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat fade_opacity=v_data1[2];if (v_data1.w==ICON) {vec2 tex_icon=v_data0.zw;lowp float alpha=opacity*fade_opacity;gl_FragColor=texture2D(u_texture_icon,tex_icon)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\nreturn;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);float is_sdf=a_size[0]-2.0*a_size_min;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec4(gamma_scale,size,interpolated_fade_opacity,is_sdf);}\");function gi(t,e){var i=/#pragma mapbox: ([\\w]+) ([\\w]+) ([\\w]+) ([\\w]+)/g,o=e.match(/attribute ([\\w]+) ([\\w]+)/g),r=t.match(/uniform ([\\w]+) ([\\w]+)([\\s]*)([\\w]*)/g),a=e.match(/uniform ([\\w]+) ([\\w]+)([\\s]*)([\\w]*)/g),n=a?a.concat(r):r,s={};return {fragmentSource:t=t.replace(i,(function(t,e,i,o,r){return s[r]=!0,\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\nvarying \"+i+\" \"+o+\" \"+r+\";\\n#else\\nuniform \"+i+\" \"+o+\" u_\"+r+\";\\n#endif\\n\":\"\\n#ifdef HAS_UNIFORM_u_\"+r+\"\\n    \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\"})),vertexSource:e=e.replace(i,(function(t,e,i,o,r){var a=\"float\"===o?\"vec2\":\"vec4\",n=r.match(/color/)?\"color\":a;return s[r]?\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\nuniform lowp float u_\"+r+\"_t;\\nattribute \"+i+\" \"+a+\" a_\"+r+\";\\nvarying \"+i+\" \"+o+\" \"+r+\";\\n#else\\nuniform \"+i+\" \"+o+\" u_\"+r+\";\\n#endif\\n\":\"vec4\"===n?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\n    \"+r+\" = a_\"+r+\";\\n#else\\n    \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\n    \"+r+\" = unpack_mix_\"+n+\"(a_\"+r+\", u_\"+r+\"_t);\\n#else\\n    \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\":\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\nuniform lowp float u_\"+r+\"_t;\\nattribute \"+i+\" \"+a+\" a_\"+r+\";\\n#else\\nuniform \"+i+\" \"+o+\" u_\"+r+\";\\n#endif\\n\":\"vec4\"===n?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\n    \"+i+\" \"+o+\" \"+r+\" = a_\"+r+\";\\n#else\\n    \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\n    \"+i+\" \"+o+\" \"+r+\" = unpack_mix_\"+n+\"(a_\"+r+\", u_\"+r+\"_t);\\n#else\\n    \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\"})),staticAttributes:o,staticUniforms:n}}var vi=Object.freeze({__proto__:null,prelude:Ge,background:We,backgroundPattern:Xe,circle:He,clippingMask:Ke,heatmap:Ye,heatmapTexture:Je,collisionBox:Qe,collisionCircle:$e,debug:ti,fill:ei,fillOutline:ii,fillOutlinePattern:oi,fillPattern:ri,fillExtrusion:ai,fillExtrusionPattern:ni,hillshadePrepare:si,hillshade:li,line:ci,lineGradient:ui,linePattern:hi,lineSDF:pi,raster:di,symbolIcon:_i,symbolSDF:fi,symbolTextAndIcon:mi}),yi=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null;};function xi(t){for(var e=[],i=0;i<t.length;i++)if(null!==t[i]){var o=t[i].split(\" \");e.push(o.pop());}return e}yi.prototype.bind=function(t,e,i,o,r,a,n,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==o.length,c=0;!l&&c<o.length;c++)this.boundPaintVertexBuffers[c]!==o[c]&&(l=!0);t.extVertexArrayObject&&this.vao&&this.boundProgram===e&&this.boundLayoutVertexBuffer===i&&!l&&this.boundIndexBuffer===r&&this.boundVertexOffset===a&&this.boundDynamicVertexBuffer===n&&this.boundDynamicVertexBuffer2===s?(t.bindVertexArrayOES.set(this.vao),n&&n.bind(),r&&r.dynamicDraw&&r.bind(),s&&s.bind()):this.freshBind(e,i,o,r,a,n,s);},yi.prototype.freshBind=function(t,e,i,o,r,a,n){var s,l=t.numAttributes,c=this.context,u=c.gl;if(c.extVertexArrayObject)this.vao&&this.destroy(),this.vao=c.extVertexArrayObject.createVertexArrayOES(),c.bindVertexArrayOES.set(this.vao),s=0,this.boundProgram=t,this.boundLayoutVertexBuffer=e,this.boundPaintVertexBuffers=i,this.boundIndexBuffer=o,this.boundVertexOffset=r,this.boundDynamicVertexBuffer=a,this.boundDynamicVertexBuffer2=n;else {s=c.currentNumAttributes||0;for(var h=l;h<s;h++)u.disableVertexAttribArray(h);}e.enableAttributes(u,t);for(var p=0,d=i;p<d.length;p+=1)d[p].enableAttributes(u,t);a&&a.enableAttributes(u,t),n&&n.enableAttributes(u,t),e.bind(),e.setVertexAttribPointers(u,t,r);for(var _=0,f=i;_<f.length;_+=1){var m=f[_];m.bind(),m.setVertexAttribPointers(u,t,r);}a&&(a.bind(),a.setVertexAttribPointers(u,t,r)),o&&o.bind(),n&&(n.bind(),n.setVertexAttribPointers(u,t,r)),c.currentNumAttributes=l;},yi.prototype.destroy=function(){this.vao&&(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao=null);};var bi=function(t,e,i,o,r,a){var n=t.gl;this.program=n.createProgram();for(var s=xi(i.staticAttributes),l=o?o.getBinderAttributes():[],c=s.concat(l),u=i.staticUniforms?xi(i.staticUniforms):[],h=o?o.getBinderUniforms():[],p=[],d=0,_=u.concat(h);d<_.length;d+=1){var f=_[d];p.indexOf(f)<0&&p.push(f);}var m=o?o.defines():[];a&&m.push(\"#define OVERDRAW_INSPECTOR;\");var g=m.concat(Ge.fragmentSource,i.fragmentSource).join(\"\\n\"),v=m.concat(Ge.vertexSource,i.vertexSource).join(\"\\n\"),y=n.createShader(n.FRAGMENT_SHADER);if(n.isContextLost())this.failedToCreate=!0;else {n.shaderSource(y,g),n.compileShader(y),n.attachShader(this.program,y);var x=n.createShader(n.VERTEX_SHADER);if(n.isContextLost())this.failedToCreate=!0;else {n.shaderSource(x,v),n.compileShader(x),n.attachShader(this.program,x),this.attributes={};var b={};this.numAttributes=c.length;for(var w=0;w<this.numAttributes;w++)c[w]&&(n.bindAttribLocation(this.program,w,c[w]),this.attributes[c[w]]=w);n.linkProgram(this.program),n.deleteShader(x),n.deleteShader(y);for(var T=0;T<p.length;T++){var E=p[T];if(E&&!b[E]){var I=n.getUniformLocation(this.program,E);I&&(b[E]=I);}}this.fixedUniforms=r(t,b),this.binderUniforms=o?o.getUniforms(t,b):[];}}};function wi(t,e,i){var o=1/pe(i,1,e.transform.tileZoom),r=Math.pow(2,i.tileID.overscaledZ),a=i.tileSize*Math.pow(2,e.transform.tileZoom)/r,n=a*(i.tileID.canonical.x+i.tileID.wrap*r),s=a*i.tileID.canonical.y;return {u_image:0,u_texsize:i.imageAtlasTexture.size,u_scale:[o,t.fromScale,t.toScale],u_fade:t.t,u_pixel_coord_upper:[n>>16,s>>16],u_pixel_coord_lower:[65535&n,65535&s]}}bi.prototype.draw=function(t,e,i,o,r,a,n,s,l,c,u,h,p,d,_,f){var m,g=t.gl;if(!this.failedToCreate){for(var v in t.program.set(this.program),t.setDepthMode(i),t.setStencilMode(o),t.setColorMode(r),t.setCullFace(a),this.fixedUniforms)this.fixedUniforms[v].set(n[v]);d&&d.setUniforms(t,this.binderUniforms,h,{zoom:p});for(var y=(m={},m[g.LINES]=2,m[g.TRIANGLES]=3,m[g.LINE_STRIP]=1,m)[e],x=0,b=u.get();x<b.length;x+=1){var w=b[x],T=w.vaos||(w.vaos={});(T[s]||(T[s]=new yi)).bind(t,this,l,d?d.getPaintVertexBuffers():[],c,w.vertexOffset,_,f),g.drawElements(e,w.primitiveLength*y,g.UNSIGNED_SHORT,w.primitiveOffset*y*2);}}};var Ti=function(e,i,o,r){var a=i.style.light,n=a.properties.get(\"position\"),s=[n.x,n.y,n.z],l=t.create$1();\"viewport\"===a.properties.get(\"anchor\")&&t.fromRotation(l,-i.transform.angle),t.transformMat3(s,s,l);var c=a.properties.get(\"color\");return {u_matrix:e,u_lightpos:s,u_lightintensity:a.properties.get(\"intensity\"),u_lightcolor:[c.r,c.g,c.b],u_vertical_gradient:+o,u_opacity:r}},Ei=function(e,i,o,r,a,n,s){return t.extend(Ti(e,i,o,r),wi(n,i,s),{u_height_factor:-Math.pow(2,a.overscaledZ)/s.tileSize/8})},Ii=function(t){return {u_matrix:t}},Pi=function(e,i,o,r){return t.extend(Ii(e),wi(o,i,r))},Si=function(t,e){return {u_matrix:t,u_world:e}},Ci=function(e,i,o,r,a){return t.extend(Pi(e,i,o,r),{u_world:a})},zi=function(e,i,o,r){var a,n,s=e.transform;if(\"map\"===r.paint.get(\"circle-pitch-alignment\")){var l=pe(o,1,s.zoom);a=!0,n=[l,l];}else a=!1,n=s.pixelsToGLUnits;return {u_camera_to_center_distance:s.cameraToCenterDistance,u_scale_with_map:+(\"map\"===r.paint.get(\"circle-pitch-scale\")),u_matrix:e.translatePosMatrix(i.posMatrix,o,r.paint.get(\"circle-translate\"),r.paint.get(\"circle-translate-anchor\")),u_pitch_with_map:+a,u_device_pixel_ratio:t.browser.devicePixelRatio,u_extrude_scale:n}},Di=function(t,e,i){var o=pe(i,1,e.zoom),r=Math.pow(2,e.zoom-i.tileID.overscaledZ),a=i.tileID.overscaleFactor();return {u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:o,u_extrude_scale:[e.pixelsToGLUnits[0]/(o*r),e.pixelsToGLUnits[1]/(o*r)],u_overscale_factor:a}},Ai=function(t,e,i){return {u_matrix:t,u_inv_matrix:e,u_camera_to_center_distance:i.cameraToCenterDistance,u_viewport_size:[i.width,i.height]}},Mi=function(t,e,i){return void 0===i&&(i=1),{u_matrix:t,u_color:e,u_overlay:0,u_overlay_scale:i}},Li=function(t){return {u_matrix:t}},Ri=function(t,e,i,o){return {u_matrix:t,u_extrude_scale:pe(e,1,i),u_intensity:o}},ki=function(e,i,o){var r=e.transform;return {u_matrix:Ni(e,i,o),u_ratio:1/pe(i,1,r.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_units_to_pixels:[1/r.pixelsToGLUnits[0],1/r.pixelsToGLUnits[1]]}},Bi=function(e,i,o,r){return t.extend(ki(e,i,o),{u_image:0,u_image_height:r})},Oi=function(e,i,o,r){var a=e.transform,n=Ui(i,a);return {u_matrix:Ni(e,i,o),u_texsize:i.imageAtlasTexture.size,u_ratio:1/pe(i,1,a.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_image:0,u_scale:[n,r.fromScale,r.toScale],u_fade:r.t,u_units_to_pixels:[1/a.pixelsToGLUnits[0],1/a.pixelsToGLUnits[1]]}},Fi=function(e,i,o,r,a){var n=e.lineAtlas,s=Ui(i,e.transform),l=\"round\"===o.layout.get(\"line-cap\"),c=n.getDash(r.from,l),u=n.getDash(r.to,l),h=c.width*a.fromScale,p=u.width*a.toScale;return t.extend(ki(e,i,o),{u_patternscale_a:[s/h,-c.height/2],u_patternscale_b:[s/p,-u.height/2],u_sdfgamma:n.width/(256*Math.min(h,p)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:c.y,u_tex_y_b:u.y,u_mix:a.t})};function Ui(t,e){return 1/pe(t,1,e.tileZoom)}function Ni(t,e,i){return t.translatePosMatrix(e.tileID.posMatrix,e,i.paint.get(\"line-translate\"),i.paint.get(\"line-translate-anchor\"))}var Zi=function(t,e,i,o,r){return {u_matrix:t,u_tl_parent:e,u_scale_parent:i,u_buffer_scale:1,u_fade_t:o.mix,u_opacity:o.opacity*r.paint.get(\"raster-opacity\"),u_image0:0,u_image1:1,u_brightness_low:r.paint.get(\"raster-brightness-min\"),u_brightness_high:r.paint.get(\"raster-brightness-max\"),u_saturation_factor:(n=r.paint.get(\"raster-saturation\"),n>0?1-1/(1.001-n):-n),u_contrast_factor:(a=r.paint.get(\"raster-contrast\"),a>0?1/(1-a):1+a),u_spin_weights:qi(r.paint.get(\"raster-hue-rotate\"))};var a,n;};function qi(t){t*=Math.PI/180;var e=Math.sin(t),i=Math.cos(t);return [(2*i+1)/3,(-Math.sqrt(3)*e-i+1)/3,(Math.sqrt(3)*e-i+1)/3]}var ji,Vi=function(t,e,i,o,r,a,n,s,l,c){var u=r.transform;return {u_is_size_zoom_constant:+(\"constant\"===t||\"source\"===t),u_is_size_feature_constant:+(\"constant\"===t||\"camera\"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:u.cameraToCenterDistance,u_pitch:u.pitch/360*2*Math.PI,u_rotate_symbol:+i,u_aspect_ratio:u.width/u.height,u_fade_change:r.options.fadeDuration?r.symbolFadeChange:1,u_matrix:a,u_label_plane_matrix:n,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+o,u_texsize:c,u_texture:0}},Gi=function(e,i,o,r,a,n,s,l,c,u,h){var p=a.transform;return t.extend(Vi(e,i,o,r,a,n,s,l,c,u),{u_gamma_scale:r?Math.cos(p._pitch)*p.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+h})},Wi=function(e,i,o,r,a,n,s,l,c,u){return t.extend(Gi(e,i,o,r,a,n,s,l,!0,c,!0),{u_texsize_icon:u,u_texture_icon:1})},Xi=function(t,e,i){return {u_matrix:t,u_opacity:e,u_color:i}},Hi=function(e,i,o,r,a,n){return t.extend(function(t,e,i,o){var r=i.imageManager.getPattern(t.from.toString()),a=i.imageManager.getPattern(t.to.toString()),n=i.imageManager.getPixelSize(),s=n.width,l=n.height,c=Math.pow(2,o.tileID.overscaledZ),u=o.tileSize*Math.pow(2,i.transform.tileZoom)/c,h=u*(o.tileID.canonical.x+o.tileID.wrap*c),p=u*o.tileID.canonical.y;return {u_image:0,u_pattern_tl_a:r.tl,u_pattern_br_a:r.br,u_pattern_tl_b:a.tl,u_pattern_br_b:a.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:r.displaySize,u_pattern_size_b:a.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/pe(o,1,i.transform.tileZoom),u_pixel_coord_upper:[h>>16,p>>16],u_pixel_coord_lower:[65535&h,65535&p]}}(r,n,o,a),{u_matrix:e,u_opacity:i})},Ki={fillExtrusion:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_lightpos:new t.Uniform3f(e,i.u_lightpos),u_lightintensity:new t.Uniform1f(e,i.u_lightintensity),u_lightcolor:new t.Uniform3f(e,i.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,i.u_vertical_gradient),u_opacity:new t.Uniform1f(e,i.u_opacity)}},fillExtrusionPattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_lightpos:new t.Uniform3f(e,i.u_lightpos),u_lightintensity:new t.Uniform1f(e,i.u_lightintensity),u_lightcolor:new t.Uniform3f(e,i.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,i.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,i.u_height_factor),u_image:new t.Uniform1i(e,i.u_image),u_texsize:new t.Uniform2f(e,i.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade),u_opacity:new t.Uniform1f(e,i.u_opacity)}},fill:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},fillPattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_image:new t.Uniform1i(e,i.u_image),u_texsize:new t.Uniform2f(e,i.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade)}},fillOutline:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_world:new t.Uniform2f(e,i.u_world)}},fillOutlinePattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_world:new t.Uniform2f(e,i.u_world),u_image:new t.Uniform1i(e,i.u_image),u_texsize:new t.Uniform2f(e,i.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade)}},circle:function(e,i){return {u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,i.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,i.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},collisionBox:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,i.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,i.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,i.u_overscale_factor)}},collisionCircle:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_inv_matrix:new t.UniformMatrix4f(e,i.u_inv_matrix),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_viewport_size:new t.Uniform2f(e,i.u_viewport_size)}},debug:function(e,i){return {u_color:new t.UniformColor(e,i.u_color),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_overlay:new t.Uniform1i(e,i.u_overlay),u_overlay_scale:new t.Uniform1f(e,i.u_overlay_scale)}},clippingMask:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},heatmap:function(e,i){return {u_extrude_scale:new t.Uniform1f(e,i.u_extrude_scale),u_intensity:new t.Uniform1f(e,i.u_intensity),u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},heatmapTexture:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_world:new t.Uniform2f(e,i.u_world),u_image:new t.Uniform1i(e,i.u_image),u_color_ramp:new t.Uniform1i(e,i.u_color_ramp),u_opacity:new t.Uniform1f(e,i.u_opacity)}},hillshade:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_image:new t.Uniform1i(e,i.u_image),u_latrange:new t.Uniform2f(e,i.u_latrange),u_light:new t.Uniform2f(e,i.u_light),u_shadow:new t.UniformColor(e,i.u_shadow),u_highlight:new t.UniformColor(e,i.u_highlight),u_accent:new t.UniformColor(e,i.u_accent)}},hillshadePrepare:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_image:new t.Uniform1i(e,i.u_image),u_dimension:new t.Uniform2f(e,i.u_dimension),u_zoom:new t.Uniform1f(e,i.u_zoom),u_unpack:new t.Uniform4f(e,i.u_unpack)}},line:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels)}},lineGradient:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels),u_image:new t.Uniform1i(e,i.u_image),u_image_height:new t.Uniform1f(e,i.u_image_height)}},linePattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_texsize:new t.Uniform2f(e,i.u_texsize),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_image:new t.Uniform1i(e,i.u_image),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels),u_scale:new t.Uniform3f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade)}},lineSDF:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,i.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,i.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,i.u_sdfgamma),u_image:new t.Uniform1i(e,i.u_image),u_tex_y_a:new t.Uniform1f(e,i.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,i.u_tex_y_b),u_mix:new t.Uniform1f(e,i.u_mix)}},raster:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_tl_parent:new t.Uniform2f(e,i.u_tl_parent),u_scale_parent:new t.Uniform1f(e,i.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,i.u_buffer_scale),u_fade_t:new t.Uniform1f(e,i.u_fade_t),u_opacity:new t.Uniform1f(e,i.u_opacity),u_image0:new t.Uniform1i(e,i.u_image0),u_image1:new t.Uniform1i(e,i.u_image1),u_brightness_low:new t.Uniform1f(e,i.u_brightness_low),u_brightness_high:new t.Uniform1f(e,i.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,i.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,i.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,i.u_spin_weights)}},symbolIcon:function(e,i){return {u_is_size_zoom_constant:new t.Uniform1i(e,i.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,i.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,i.u_size_t),u_size:new t.Uniform1f(e,i.u_size),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,i.u_pitch),u_rotate_symbol:new t.Uniform1i(e,i.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,i.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,i.u_fade_change),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,i.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,i.u_coord_matrix),u_is_text:new t.Uniform1i(e,i.u_is_text),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_texsize:new t.Uniform2f(e,i.u_texsize),u_texture:new t.Uniform1i(e,i.u_texture)}},symbolSDF:function(e,i){return {u_is_size_zoom_constant:new t.Uniform1i(e,i.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,i.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,i.u_size_t),u_size:new t.Uniform1f(e,i.u_size),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,i.u_pitch),u_rotate_symbol:new t.Uniform1i(e,i.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,i.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,i.u_fade_change),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,i.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,i.u_coord_matrix),u_is_text:new t.Uniform1i(e,i.u_is_text),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_texsize:new t.Uniform2f(e,i.u_texsize),u_texture:new t.Uniform1i(e,i.u_texture),u_gamma_scale:new t.Uniform1f(e,i.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,i.u_is_halo)}},symbolTextAndIcon:function(e,i){return {u_is_size_zoom_constant:new t.Uniform1i(e,i.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,i.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,i.u_size_t),u_size:new t.Uniform1f(e,i.u_size),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,i.u_pitch),u_rotate_symbol:new t.Uniform1i(e,i.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,i.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,i.u_fade_change),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,i.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,i.u_coord_matrix),u_is_text:new t.Uniform1i(e,i.u_is_text),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_texsize:new t.Uniform2f(e,i.u_texsize),u_texsize_icon:new t.Uniform2f(e,i.u_texsize_icon),u_texture:new t.Uniform1i(e,i.u_texture),u_texture_icon:new t.Uniform1i(e,i.u_texture_icon),u_gamma_scale:new t.Uniform1f(e,i.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,i.u_is_halo)}},background:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_opacity:new t.Uniform1f(e,i.u_opacity),u_color:new t.UniformColor(e,i.u_color)}},backgroundPattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_opacity:new t.Uniform1f(e,i.u_opacity),u_image:new t.Uniform1i(e,i.u_image),u_pattern_tl_a:new t.Uniform2f(e,i.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,i.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,i.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,i.u_pattern_br_b),u_texsize:new t.Uniform2f(e,i.u_texsize),u_mix:new t.Uniform1f(e,i.u_mix),u_pattern_size_a:new t.Uniform2f(e,i.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,i.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,i.u_scale_a),u_scale_b:new t.Uniform1f(e,i.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,i.u_tile_units_to_pixels)}}};function Yi(e,i,o,r,a,n,s){for(var l=e.context,c=l.gl,u=e.useProgram(\"collisionBox\"),h=[],p=0,d=0,_=0;_<r.length;_++){var f=r[_],m=i.getTile(f),g=m.getBucket(o);if(g){var v=f.posMatrix;0===a[0]&&0===a[1]||(v=e.translatePosMatrix(f.posMatrix,m,a,n));var y=s?g.textCollisionBox:g.iconCollisionBox,x=g.collisionCircleArray;if(x.length>0){var b=t.create(),w=v;t.mul(b,g.placementInvProjMatrix,e.transform.glCoordMatrix),t.mul(b,b,g.placementViewportMatrix),h.push({circleArray:x,circleOffset:d,transform:w,invTransform:b}),d=p+=x.length/4;}y&&u.draw(l,c.LINES,It.disabled,Pt.disabled,e.colorModeForRenderPass(),Ct.disabled,Di(v,e.transform,m),o.id,y.layoutVertexBuffer,y.indexBuffer,y.segments,null,e.transform.zoom,null,null,y.collisionVertexBuffer);}}if(s&&h.length){var T=e.useProgram(\"collisionCircle\"),E=new t.StructArrayLayout2f1f2i16;E.resize(4*p),E._trim();for(var I=0,P=0,S=h;P<S.length;P+=1)for(var C=S[P],z=0;z<C.circleArray.length/4;z++){var D=4*z,A=C.circleArray[D+0],M=C.circleArray[D+1],L=C.circleArray[D+2],R=C.circleArray[D+3];E.emplace(I++,A,M,L,R,0),E.emplace(I++,A,M,L,R,1),E.emplace(I++,A,M,L,R,2),E.emplace(I++,A,M,L,R,3);}(!ji||ji.length<2*p)&&(ji=function(e){var i=2*e,o=new t.StructArrayLayout3ui6;o.resize(i),o._trim();for(var r=0;r<i;r++){var a=6*r;o.uint16[a+0]=4*r+0,o.uint16[a+1]=4*r+1,o.uint16[a+2]=4*r+2,o.uint16[a+3]=4*r+2,o.uint16[a+4]=4*r+3,o.uint16[a+5]=4*r+0;}return o}(p));for(var k=l.createIndexBuffer(ji,!0),B=l.createVertexBuffer(E,t.collisionCircleLayout.members,!0),O=0,F=h;O<F.length;O+=1){var U=F[O],N=Ai(U.transform,U.invTransform,e.transform);T.draw(l,c.TRIANGLES,It.disabled,Pt.disabled,e.colorModeForRenderPass(),Ct.disabled,N,o.id,B,k,t.SegmentVector.simpleSegment(0,2*U.circleOffset,U.circleArray.length,U.circleArray.length/2),null,e.transform.zoom,null,null,null);}B.destroy(),k.destroy();}}var Ji=t.identity(new Float32Array(16));function Qi(e,i,o,r,a,n){var s=t.getAnchorAlignment(e),l=-(s.horizontalAlign-.5)*i,c=-(s.verticalAlign-.5)*o,u=t.evaluateVariableOffset(e,r);return new t.Point((l/a+u[0])*n,(c/a+u[1])*n)}function $i(e,i,o,r,a,n,s,l,c,u,h){var p=e.text.placedSymbolArray,d=e.text.dynamicLayoutVertexArray,_=e.icon.dynamicLayoutVertexArray,f={};d.clear();for(var m=0;m<p.length;m++){var g=p.get(m),v=g.hidden||!g.crossTileID||e.allowVerticalPlacement&&!g.placedOrientation?null:r[g.crossTileID];if(v){var y=new t.Point(g.anchorX,g.anchorY),x=$t(y,o?l:s),b=te(n.cameraToCenterDistance,x.signedDistanceFromCamera),w=a.evaluateSizeForFeature(e.textSizeData,u,g)*b/t.ONE_EM;o&&(w*=e.tilePixelRatio/c);for(var T=Qi(v.anchor,v.width,v.height,v.textOffset,v.textBoxScale,w),E=o?$t(y.add(T),s).point:x.point.add(i?T.rotate(-n.angle):T),I=e.allowVerticalPlacement&&g.placedOrientation===t.WritingMode.vertical?Math.PI/2:0,P=0;P<g.numGlyphs;P++)t.addDynamicAttributes(d,E,I);h&&g.associatedIconIndex>=0&&(f[g.associatedIconIndex]={shiftedAnchor:E,angle:I});}else ce(g.numGlyphs,d);}if(h){_.clear();for(var S=e.icon.placedSymbolArray,C=0;C<S.length;C++){var z=S.get(C);if(z.hidden)ce(z.numGlyphs,_);else {var D=f[C];if(D)for(var A=0;A<z.numGlyphs;A++)t.addDynamicAttributes(_,D.shiftedAnchor,D.angle);else ce(z.numGlyphs,_);}}e.icon.dynamicLayoutVertexBuffer.updateData(_);}e.text.dynamicLayoutVertexBuffer.updateData(d);}function to(t,e,i){return i.iconsInText&&e?\"symbolTextAndIcon\":t?\"symbolSDF\":\"symbolIcon\"}function eo(e,i,o,r,a,n,s,l,c,u,h,p){for(var d=e.context,_=d.gl,f=e.transform,m=\"map\"===l,g=\"map\"===c,v=m&&\"point\"!==o.layout.get(\"symbol-placement\"),y=m&&!g&&!v,x=void 0!==o.layout.get(\"symbol-sort-key\").constantOr(1),b=!1,w=e.depthModeForSublayer(0,It.ReadOnly),T=o.layout.get(\"text-variable-anchor\"),E=[],I=0,P=r;I<P.length;I+=1){var S=P[I],C=i.getTile(S),z=C.getBucket(o);if(z){var D=a?z.text:z.icon;if(D&&D.segments.get().length){var A=D.programConfigurations.get(o.id),M=a||z.sdfIcons,L=a?z.textSizeData:z.iconSizeData,R=g||0!==f.pitch,k=e.useProgram(to(M,a,z),A),B=t.evaluateSizeForZoom(L,f.zoom),O=void 0,F=[0,0],U=void 0,N=void 0,Z=null,q=void 0;if(a)U=C.glyphAtlasTexture,N=_.LINEAR,O=C.glyphAtlasTexture.size,z.iconsInText&&(F=C.imageAtlasTexture.size,Z=C.imageAtlasTexture,q=R||e.options.rotating||e.options.zooming||\"composite\"===L.kind||\"camera\"===L.kind?_.LINEAR:_.NEAREST);else {var j=1!==o.layout.get(\"icon-size\").constantOr(0)||z.iconsNeedLinear;U=C.imageAtlasTexture,N=M||e.options.rotating||e.options.zooming||j||R?_.LINEAR:_.NEAREST,O=C.imageAtlasTexture.size;}var V=pe(C,1,e.transform.zoom),G=Jt(S.posMatrix,g,m,e.transform,V),W=Qt(S.posMatrix,g,m,e.transform,V),X=T&&z.hasTextData(),H=\"none\"!==o.layout.get(\"icon-text-fit\")&&X&&z.hasIconData();v&&ie(z,S.posMatrix,e,a,G,W,g,u);var K=e.translatePosMatrix(S.posMatrix,C,n,s),Y=v||a&&T||H?Ji:G,J=e.translatePosMatrix(W,C,n,s,!0),Q=M&&0!==o.paint.get(a?\"text-halo-width\":\"icon-halo-width\").constantOr(1),$={program:k,buffers:D,uniformValues:M?z.iconsInText?Wi(L.kind,B,y,g,e,K,Y,J,O,F):Gi(L.kind,B,y,g,e,K,Y,J,a,O,!0):Vi(L.kind,B,y,g,e,K,Y,J,a,O),atlasTexture:U,atlasTextureIcon:Z,atlasInterpolation:N,atlasInterpolationIcon:q,isSDF:M,hasHalo:Q};if(x&&z.canOverlap){b=!0;for(var tt=0,et=D.segments.get();tt<et.length;tt+=1){var it=et[tt];E.push({segments:new t.SegmentVector([it]),sortKey:it.sortKey,state:$});}}else E.push({segments:D.segments,sortKey:0,state:$});}}}b&&E.sort((function(t,e){return t.sortKey-e.sortKey}));for(var ot=0,rt=E;ot<rt.length;ot+=1){var at=rt[ot],nt=at.state;if(d.activeTexture.set(_.TEXTURE0),nt.atlasTexture.bind(nt.atlasInterpolation,_.CLAMP_TO_EDGE),nt.atlasTextureIcon&&(d.activeTexture.set(_.TEXTURE1),nt.atlasTextureIcon&&nt.atlasTextureIcon.bind(nt.atlasInterpolationIcon,_.CLAMP_TO_EDGE)),nt.isSDF){var st=nt.uniformValues;nt.hasHalo&&(st.u_is_halo=1,io(nt.buffers,at.segments,o,e,nt.program,w,h,p,st)),st.u_is_halo=0;}io(nt.buffers,at.segments,o,e,nt.program,w,h,p,nt.uniformValues);}}function io(t,e,i,o,r,a,n,s,l){var c=o.context;r.draw(c,c.gl.TRIANGLES,a,n,s,Ct.disabled,l,i.id,t.layoutVertexBuffer,t.indexBuffer,e,i.paint,o.transform.zoom,t.programConfigurations.get(i.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer);}function oo(t,e,i,o,r,a,n){var s,l,c,u,h,p=t.context.gl,d=i.paint.get(\"fill-pattern\"),_=d&&d.constantOr(1),f=i.getCrossfadeParameters();n?(l=_&&!i.getPaintProperty(\"fill-outline-color\")?\"fillOutlinePattern\":\"fillOutline\",s=p.LINES):(l=_?\"fillPattern\":\"fill\",s=p.TRIANGLES);for(var m=0,g=o;m<g.length;m+=1){var v=g[m],y=e.getTile(v);if(!_||y.patternsLoaded()){var x=y.getBucket(i);if(x){var b=x.programConfigurations.get(i.id),w=t.useProgram(l,b);_&&(t.context.activeTexture.set(p.TEXTURE0),y.imageAtlasTexture.bind(p.LINEAR,p.CLAMP_TO_EDGE),b.updatePaintBuffers(f));var T=d.constantOr(null);if(T&&y.imageAtlas){var E=y.imageAtlas,I=E.patternPositions[T.to.toString()],P=E.patternPositions[T.from.toString()];I&&P&&b.setConstantPatternPositions(I,P);}var S=t.translatePosMatrix(v.posMatrix,y,i.paint.get(\"fill-translate\"),i.paint.get(\"fill-translate-anchor\"));if(n){u=x.indexBuffer2,h=x.segments2;var C=[p.drawingBufferWidth,p.drawingBufferHeight];c=\"fillOutlinePattern\"===l&&_?Ci(S,t,f,y,C):Si(S,C);}else u=x.indexBuffer,h=x.segments,c=_?Pi(S,t,f,y):Ii(S);w.draw(t.context,s,r,t.stencilModeForClipping(v),a,Ct.disabled,c,i.id,x.layoutVertexBuffer,u,h,i.paint,t.transform.zoom,b);}}}}function ro(t,e,i,o,r,a,n){for(var s=t.context,l=s.gl,c=i.paint.get(\"fill-extrusion-pattern\"),u=c.constantOr(1),h=i.getCrossfadeParameters(),p=i.paint.get(\"fill-extrusion-opacity\"),d=0,_=o;d<_.length;d+=1){var f=_[d],m=e.getTile(f),g=m.getBucket(i);if(g){var v=g.programConfigurations.get(i.id),y=t.useProgram(u?\"fillExtrusionPattern\":\"fillExtrusion\",v);u&&(t.context.activeTexture.set(l.TEXTURE0),m.imageAtlasTexture.bind(l.LINEAR,l.CLAMP_TO_EDGE),v.updatePaintBuffers(h));var x=c.constantOr(null);if(x&&m.imageAtlas){var b=m.imageAtlas,w=b.patternPositions[x.to.toString()],T=b.patternPositions[x.from.toString()];w&&T&&v.setConstantPatternPositions(w,T);}var E=t.translatePosMatrix(f.posMatrix,m,i.paint.get(\"fill-extrusion-translate\"),i.paint.get(\"fill-extrusion-translate-anchor\")),I=i.paint.get(\"fill-extrusion-vertical-gradient\"),P=u?Ei(E,t,I,p,f,h,m):Ti(E,t,I,p);y.draw(s,s.gl.TRIANGLES,r,a,n,Ct.backCCW,P,i.id,g.layoutVertexBuffer,g.indexBuffer,g.segments,i.paint,t.transform.zoom,v);}}}function ao(e,i,o,r,a,n){var s=e.context,l=s.gl,c=i.fbo;if(c){var u=e.useProgram(\"hillshade\");s.activeTexture.set(l.TEXTURE0),l.bindTexture(l.TEXTURE_2D,c.colorAttachment.get());var h=function(e,i,o){var r=o.paint.get(\"hillshade-shadow-color\"),a=o.paint.get(\"hillshade-highlight-color\"),n=o.paint.get(\"hillshade-accent-color\"),s=o.paint.get(\"hillshade-illumination-direction\")*(Math.PI/180);\"viewport\"===o.paint.get(\"hillshade-illumination-anchor\")&&(s-=e.transform.angle);var l,c,u,h=!e.options.moving;return {u_matrix:e.transform.calculatePosMatrix(i.tileID.toUnwrapped(),h),u_image:0,u_latrange:(l=i.tileID,c=Math.pow(2,l.canonical.z),u=l.canonical.y,[new t.MercatorCoordinate(0,u/c).toLngLat().lat,new t.MercatorCoordinate(0,(u+1)/c).toLngLat().lat]),u_light:[o.paint.get(\"hillshade-exaggeration\"),s],u_shadow:r,u_highlight:a,u_accent:n}}(e,i,o);u.draw(s,l.TRIANGLES,r,a,n,Ct.disabled,h,o.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments);}}function no(e,i,o,r,a,n){var s=e.context,l=s.gl,c=i.dem;if(c&&c.data){var u=c.dim,h=c.stride,p=c.getPixels();if(s.activeTexture.set(l.TEXTURE1),s.pixelStoreUnpackPremultiplyAlpha.set(!1),i.demTexture=i.demTexture||e.getTileTexture(h),i.demTexture){var d=i.demTexture;d.update(p,{premultiply:!1}),d.bind(l.NEAREST,l.CLAMP_TO_EDGE);}else i.demTexture=new t.Texture(s,p,l.RGBA,{premultiply:!1}),i.demTexture.bind(l.NEAREST,l.CLAMP_TO_EDGE);s.activeTexture.set(l.TEXTURE0);var _=i.fbo;if(!_){var f=new t.Texture(s,{width:u,height:u,data:null},l.RGBA);f.bind(l.LINEAR,l.CLAMP_TO_EDGE),(_=i.fbo=s.createFramebuffer(u,u,!0)).colorAttachment.set(f.texture);}s.bindFramebuffer.set(_.framebuffer),s.viewport.set([0,0,u,u]),e.useProgram(\"hillshadePrepare\").draw(s,l.TRIANGLES,r,a,n,Ct.disabled,function(e,i){var o=i.stride,r=t.create();return t.ortho(r,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(r,r,[0,-t.EXTENT,0]),{u_matrix:r,u_image:1,u_dimension:[o,o],u_zoom:e.overscaledZ,u_unpack:i.getUnpackVector()}}(i.tileID,c),o.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),i.needsHillshadePrepare=!1;}}function so(e,i,o,r,a){var n=r.paint.get(\"raster-fade-duration\");if(n>0){var s=t.browser.now(),l=(s-e.timeAdded)/n,c=i?(s-i.timeAdded)/n:-1,u=o.getSource(),h=a.coveringZoomLevel({tileSize:u.tileSize,roundZoom:u.roundZoom}),p=!i||Math.abs(i.tileID.overscaledZ-h)>Math.abs(e.tileID.overscaledZ-h),d=p&&e.refreshedUponExpiration?1:t.clamp(p?l:1-c,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),i?{opacity:1,mix:1-d}:{opacity:d,mix:0}}return {opacity:1,mix:0}}var lo=new t.Color(1,0,0,1),co=new t.Color(0,1,0,1),uo=new t.Color(0,0,1,1),ho=new t.Color(1,0,1,1),po=new t.Color(0,1,1,1);function _o(t,e,i,o){mo(t,0,e+i/2,t.transform.width,i,o);}function fo(t,e,i,o){mo(t,e-i/2,0,i,t.transform.height,o);}function mo(e,i,o,r,a,n){var s=e.context,l=s.gl;l.enable(l.SCISSOR_TEST),l.scissor(i*t.browser.devicePixelRatio,o*t.browser.devicePixelRatio,r*t.browser.devicePixelRatio,a*t.browser.devicePixelRatio),s.clear({color:n}),l.disable(l.SCISSOR_TEST);}function go(e,i,o){var r=e.context,a=r.gl,n=o.posMatrix,s=e.useProgram(\"debug\"),l=It.disabled,c=Pt.disabled,u=e.colorModeForRenderPass();r.activeTexture.set(a.TEXTURE0),e.emptyTexture.bind(a.LINEAR,a.CLAMP_TO_EDGE),s.draw(r,a.LINE_STRIP,l,c,u,Ct.disabled,Mi(n,t.Color.red),\"$debug\",e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);var h=i.getTileByID(o.key).latestRawTileData,p=Math.floor((h&&h.byteLength||0)/1024),d=i.getTile(o).tileSize,_=512/Math.min(d,512)*(o.overscaledZ/e.transform.zoom)*.5,f=o.canonical.toString();o.overscaledZ!==o.canonical.z&&(f+=\" => \"+o.overscaledZ),function(t,e){t.initDebugOverlayCanvas();var i=t.debugOverlayCanvas,o=t.context.gl,r=t.debugOverlayCanvas.getContext(\"2d\");r.clearRect(0,0,i.width,i.height),r.shadowColor=\"white\",r.shadowBlur=2,r.lineWidth=1.5,r.strokeStyle=\"white\",r.textBaseline=\"top\",r.font=\"bold 36px Open Sans, sans-serif\",r.fillText(e,5,5),r.strokeText(e,5,5),t.debugOverlayTexture.update(i),t.debugOverlayTexture.bind(o.LINEAR,o.CLAMP_TO_EDGE);}(e,f+\" \"+p+\"kb\"),s.draw(r,a.TRIANGLES,l,c,St.alphaBlended,Ct.disabled,Mi(n,t.Color.transparent,_),\"$debug\",e.debugBuffer,e.quadTriangleIndexBuffer,e.debugSegments);}var vo={symbol:function(e,i,o,r,a){if(\"translucent\"===e.renderPass){var n=Pt.disabled,s=e.colorModeForRenderPass();o.layout.get(\"text-variable-anchor\")&&function(e,i,o,r,a,n,s){for(var l=i.transform,c=\"map\"===a,u=\"map\"===n,h=0,p=e;h<p.length;h+=1){var d=p[h],_=r.getTile(d),f=_.getBucket(o);if(f&&f.text&&f.text.segments.get().length){var m=t.evaluateSizeForZoom(f.textSizeData,l.zoom),g=pe(_,1,i.transform.zoom),v=Jt(d.posMatrix,u,c,i.transform,g),y=\"none\"!==o.layout.get(\"icon-text-fit\")&&f.hasIconData();if(m){var x=Math.pow(2,l.zoom-_.tileID.overscaledZ);$i(f,c,u,s,t.symbolSize,l,v,d.posMatrix,x,m,y);}}}}(r,e,o,i,o.layout.get(\"text-rotation-alignment\"),o.layout.get(\"text-pitch-alignment\"),a),0!==o.paint.get(\"icon-opacity\").constantOr(1)&&eo(e,i,o,r,!1,o.paint.get(\"icon-translate\"),o.paint.get(\"icon-translate-anchor\"),o.layout.get(\"icon-rotation-alignment\"),o.layout.get(\"icon-pitch-alignment\"),o.layout.get(\"icon-keep-upright\"),n,s),0!==o.paint.get(\"text-opacity\").constantOr(1)&&eo(e,i,o,r,!0,o.paint.get(\"text-translate\"),o.paint.get(\"text-translate-anchor\"),o.layout.get(\"text-rotation-alignment\"),o.layout.get(\"text-pitch-alignment\"),o.layout.get(\"text-keep-upright\"),n,s),i.map.showCollisionBoxes&&(Yi(e,i,o,r,o.paint.get(\"text-translate\"),o.paint.get(\"text-translate-anchor\"),!0),Yi(e,i,o,r,o.paint.get(\"icon-translate\"),o.paint.get(\"icon-translate-anchor\"),!1));}},circle:function(e,i,o,r){if(\"translucent\"===e.renderPass){var a=o.paint.get(\"circle-opacity\"),n=o.paint.get(\"circle-stroke-width\"),s=o.paint.get(\"circle-stroke-opacity\"),l=void 0!==o.layout.get(\"circle-sort-key\").constantOr(1);if(0!==a.constantOr(1)||0!==n.constantOr(1)&&0!==s.constantOr(1)){for(var c=e.context,u=c.gl,h=e.depthModeForSublayer(0,It.ReadOnly),p=Pt.disabled,d=e.colorModeForRenderPass(),_=[],f=0;f<r.length;f++){var m=r[f],g=i.getTile(m),v=g.getBucket(o);if(v){var y=v.programConfigurations.get(o.id),x={programConfiguration:y,program:e.useProgram(\"circle\",y),layoutVertexBuffer:v.layoutVertexBuffer,indexBuffer:v.indexBuffer,uniformValues:zi(e,m,g,o)};if(l)for(var b=0,w=v.segments.get();b<w.length;b+=1){var T=w[b];_.push({segments:new t.SegmentVector([T]),sortKey:T.sortKey,state:x});}else _.push({segments:v.segments,sortKey:0,state:x});}}l&&_.sort((function(t,e){return t.sortKey-e.sortKey}));for(var E=0,I=_;E<I.length;E+=1){var P=I[E],S=P.state;S.program.draw(c,u.TRIANGLES,h,p,d,Ct.disabled,S.uniformValues,o.id,S.layoutVertexBuffer,S.indexBuffer,P.segments,o.paint,e.transform.zoom,S.programConfiguration);}}}},heatmap:function(e,i,o,r){if(0!==o.paint.get(\"heatmap-opacity\"))if(\"offscreen\"===e.renderPass){var a=e.context,n=a.gl,s=Pt.disabled,l=new St([n.ONE,n.ONE],t.Color.transparent,[!0,!0,!0,!0]);!function(t,e,i){var o=t.gl;t.activeTexture.set(o.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var r=i.heatmapFbo;if(r)o.bindTexture(o.TEXTURE_2D,r.colorAttachment.get()),t.bindFramebuffer.set(r.framebuffer);else {var a=o.createTexture();o.bindTexture(o.TEXTURE_2D,a),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,o.LINEAR),r=i.heatmapFbo=t.createFramebuffer(e.width/4,e.height/4,!1),function(t,e,i,o){var r=t.gl;r.texImage2D(r.TEXTURE_2D,0,r.RGBA,e.width/4,e.height/4,0,r.RGBA,t.extRenderToTextureHalfFloat?t.extTextureHalfFloat.HALF_FLOAT_OES:r.UNSIGNED_BYTE,null),o.colorAttachment.set(i);}(t,e,a,r);}}(a,e,o),a.clear({color:t.Color.transparent});for(var c=0;c<r.length;c++){var u=r[c];if(!i.hasRenderableParent(u)){var h=i.getTile(u),p=h.getBucket(o);if(p){var d=p.programConfigurations.get(o.id);e.useProgram(\"heatmap\",d).draw(a,n.TRIANGLES,It.disabled,s,l,Ct.disabled,Ri(u.posMatrix,h,e.transform.zoom,o.paint.get(\"heatmap-intensity\")),o.id,p.layoutVertexBuffer,p.indexBuffer,p.segments,o.paint,e.transform.zoom,d);}}}a.viewport.set([0,0,e.width,e.height]);}else \"translucent\"===e.renderPass&&(e.context.setColorMode(e.colorModeForRenderPass()),function(e,i){var o=e.context,r=o.gl,a=i.heatmapFbo;if(a){o.activeTexture.set(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,a.colorAttachment.get()),o.activeTexture.set(r.TEXTURE1);var n=i.colorRampTexture;n||(n=i.colorRampTexture=new t.Texture(o,i.colorRamp,r.RGBA)),n.bind(r.LINEAR,r.CLAMP_TO_EDGE),e.useProgram(\"heatmapTexture\").draw(o,r.TRIANGLES,It.disabled,Pt.disabled,e.colorModeForRenderPass(),Ct.disabled,function(e,i,o,r){var a=t.create();t.ortho(a,0,e.width,e.height,0,0,1);var n=e.context.gl;return {u_matrix:a,u_world:[n.drawingBufferWidth,n.drawingBufferHeight],u_image:0,u_color_ramp:1,u_opacity:i.paint.get(\"heatmap-opacity\")}}(e,i),i.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,i.paint,e.transform.zoom);}}(e,o));},line:function(e,i,o,r){if(\"translucent\"===e.renderPass){var a=o.paint.get(\"line-opacity\"),n=o.paint.get(\"line-width\");if(0!==a.constantOr(1)&&0!==n.constantOr(1))for(var s=e.depthModeForSublayer(0,It.ReadOnly),l=e.colorModeForRenderPass(),c=o.paint.get(\"line-dasharray\"),u=o.paint.get(\"line-pattern\"),h=u.constantOr(1),p=o.paint.get(\"line-gradient\"),d=o.getCrossfadeParameters(),_=h?\"linePattern\":c?\"lineSDF\":p?\"lineGradient\":\"line\",f=e.context,m=f.gl,g=!0,v=0,y=r;v<y.length;v+=1){var x=y[v],b=i.getTile(x);if(!h||b.patternsLoaded()){var w=b.getBucket(o);if(w){var T=w.programConfigurations.get(o.id),E=e.context.program.get(),I=e.useProgram(_,T),P=g||I.program!==E,S=u.constantOr(null);if(S&&b.imageAtlas){var C=b.imageAtlas,z=C.patternPositions[S.to.toString()],D=C.patternPositions[S.from.toString()];z&&D&&T.setConstantPatternPositions(z,D);}var A=h?Oi(e,b,o,d):c?Fi(e,b,o,c,d):p?Bi(e,b,o,w.lineClipsArray.length):ki(e,b,o);if(h)f.activeTexture.set(m.TEXTURE0),b.imageAtlasTexture.bind(m.LINEAR,m.CLAMP_TO_EDGE),T.updatePaintBuffers(d);else if(c&&(P||e.lineAtlas.dirty))f.activeTexture.set(m.TEXTURE0),e.lineAtlas.bind(f);else if(p){var M=w.gradients[o.id],L=M.texture;if(o.gradientVersion!==M.version){var R=256;if(o.stepInterpolant){var k=i.getSource().maxzoom,B=x.canonical.z===k?Math.ceil(1<<e.transform.maxZoom-x.canonical.z):1;R=t.clamp(t.nextPowerOfTwo(w.maxLineLength/t.EXTENT*1024*B),256,f.maxTextureSize);}M.gradient=t.renderColorRamp({expression:o.gradientExpression(),evaluationKey:\"lineProgress\",resolution:R,image:M.gradient||void 0,clips:w.lineClipsArray}),M.texture?M.texture.update(M.gradient):M.texture=new t.Texture(f,M.gradient,m.RGBA),M.version=o.gradientVersion,L=M.texture;}f.activeTexture.set(m.TEXTURE0),L.bind(o.stepInterpolant?m.NEAREST:m.LINEAR,m.CLAMP_TO_EDGE);}I.draw(f,m.TRIANGLES,s,e.stencilModeForClipping(x),l,Ct.disabled,A,o.id,w.layoutVertexBuffer,w.indexBuffer,w.segments,o.paint,e.transform.zoom,T,w.layoutVertexBuffer2),g=!1;}}}}},fill:function(e,i,o,r){var a=o.paint.get(\"fill-color\"),n=o.paint.get(\"fill-opacity\");if(0!==n.constantOr(1)){var s=e.colorModeForRenderPass(),l=o.paint.get(\"fill-pattern\"),c=e.opaquePassEnabledForLayer()&&!l.constantOr(1)&&1===a.constantOr(t.Color.transparent).a&&1===n.constantOr(0)?\"opaque\":\"translucent\";if(e.renderPass===c){var u=e.depthModeForSublayer(1,\"opaque\"===e.renderPass?It.ReadWrite:It.ReadOnly);oo(e,i,o,r,u,s,!1);}if(\"translucent\"===e.renderPass&&o.paint.get(\"fill-antialias\")){var h=e.depthModeForSublayer(o.getPaintProperty(\"fill-outline-color\")?2:0,It.ReadOnly);oo(e,i,o,r,h,s,!0);}}},\"fill-extrusion\":function(t,e,i,o){var r=i.paint.get(\"fill-extrusion-opacity\");if(0!==r&&\"translucent\"===t.renderPass){var a=new It(t.context.gl.LEQUAL,It.ReadWrite,t.depthRangeFor3D);if(1!==r||i.paint.get(\"fill-extrusion-pattern\").constantOr(1))ro(t,e,i,o,a,Pt.disabled,St.disabled),ro(t,e,i,o,a,t.stencilModeFor3D(),t.colorModeForRenderPass());else {var n=t.colorModeForRenderPass();ro(t,e,i,o,a,Pt.disabled,n);}}},hillshade:function(t,e,i,o){if(\"offscreen\"===t.renderPass||\"translucent\"===t.renderPass){for(var r=t.context,a=t.depthModeForSublayer(0,It.ReadOnly),n=t.colorModeForRenderPass(),s=\"translucent\"===t.renderPass?t.stencilConfigForOverlap(o):[{},o],l=s[0],c=0,u=s[1];c<u.length;c+=1){var h=u[c],p=e.getTile(h);p.needsHillshadePrepare&&\"offscreen\"===t.renderPass?no(t,p,i,a,Pt.disabled,n):\"translucent\"===t.renderPass&&ao(t,p,i,a,l[h.overscaledZ],n);}r.viewport.set([0,0,t.width,t.height]);}},raster:function(t,e,i,o){if(\"translucent\"===t.renderPass&&0!==i.paint.get(\"raster-opacity\")&&o.length)for(var r=t.context,a=r.gl,n=e.getSource(),s=t.useProgram(\"raster\"),l=t.colorModeForRenderPass(),c=n instanceof M?[{},o]:t.stencilConfigForOverlap(o),u=c[0],h=c[1],p=h[h.length-1].overscaledZ,d=!t.options.moving,_=0,f=h;_<f.length;_+=1){var m=f[_],g=t.depthModeForSublayer(m.overscaledZ-p,1===i.paint.get(\"raster-opacity\")?It.ReadWrite:It.ReadOnly,a.LESS),v=e.getTile(m),y=t.transform.calculatePosMatrix(m.toUnwrapped(),d);v.registerFadeDuration(i.paint.get(\"raster-fade-duration\"));var x=e.findLoadedParent(m,0),b=so(v,x,e,i,t.transform),w=void 0,T=void 0,E=\"nearest\"===i.paint.get(\"raster-resampling\")?a.NEAREST:a.LINEAR;r.activeTexture.set(a.TEXTURE0),v.texture.bind(E,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),r.activeTexture.set(a.TEXTURE1),x?(x.texture.bind(E,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),w=Math.pow(2,x.tileID.overscaledZ-v.tileID.overscaledZ),T=[v.tileID.canonical.x*w%1,v.tileID.canonical.y*w%1]):v.texture.bind(E,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST);var I=Zi(y,T||[0,0],w||1,b,i);n instanceof M?s.draw(r,a.TRIANGLES,g,Pt.disabled,l,Ct.disabled,I,i.id,n.boundsBuffer,t.quadTriangleIndexBuffer,n.boundsSegments):s.draw(r,a.TRIANGLES,g,u[m.overscaledZ],l,Ct.disabled,I,i.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments);}},background:function(t,e,i){var o=i.paint.get(\"background-color\"),r=i.paint.get(\"background-opacity\");if(0!==r){var a=t.context,n=a.gl,s=t.transform,l=s.tileSize,c=i.paint.get(\"background-pattern\");if(!t.isPatternMissing(c)){var u=!c&&1===o.a&&1===r&&t.opaquePassEnabledForLayer()?\"opaque\":\"translucent\";if(t.renderPass===u){var h=Pt.disabled,p=t.depthModeForSublayer(0,\"opaque\"===u?It.ReadWrite:It.ReadOnly),d=t.colorModeForRenderPass(),_=t.useProgram(c?\"backgroundPattern\":\"background\"),f=s.coveringTiles({tileSize:l});c&&(a.activeTexture.set(n.TEXTURE0),t.imageManager.bind(t.context));for(var m=i.getCrossfadeParameters(),g=0,v=f;g<v.length;g+=1){var y=v[g],x=t.transform.calculatePosMatrix(y.toUnwrapped()),b=c?Hi(x,r,t,c,{tileID:y,tileSize:l},m):Xi(x,r,o);_.draw(a,n.TRIANGLES,p,h,d,Ct.disabled,b,i.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments);}}}}},debug:function(t,e,i){for(var o=0;o<i.length;o++)go(t,e,i[o]);},custom:function(t,e,i){var o=t.context,r=i.implementation;if(\"offscreen\"===t.renderPass){var a=r.prerender;a&&(t.setCustomLayerDefaults(),o.setColorMode(t.colorModeForRenderPass()),a.call(r,o.gl,t.transform.customLayerMatrix()),o.setDirty(),t.setBaseState());}else if(\"translucent\"===t.renderPass){t.setCustomLayerDefaults(),o.setColorMode(t.colorModeForRenderPass()),o.setStencilMode(Pt.disabled);var n=\"3d\"===r.renderingMode?new It(t.context.gl.LEQUAL,It.ReadWrite,t.depthRangeFor3D):t.depthModeForSublayer(0,It.ReadOnly);o.setDepthMode(n),r.render(o.gl,t.transform.customLayerMatrix()),o.setDirty(),t.setBaseState(),o.bindFramebuffer.set(null);}}},yo=function(t,e){this.context=new zt(t),this.transform=e,this._tileTextures={},this.setup(),this.numSublayers=Dt.maxUnderzooming+Dt.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.crossTileSymbolIndex=new Fe,this.gpuTimers={};};yo.prototype.resize=function(e,i){if(this.width=e*t.browser.devicePixelRatio,this.height=i*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var o=0,r=this.style._order;o<r.length;o+=1)this.style._layers[r[o]].resize();},yo.prototype.setup=function(){var e=this.context,i=new t.StructArrayLayout2i4;i.emplaceBack(0,0),i.emplaceBack(t.EXTENT,0),i.emplaceBack(0,t.EXTENT),i.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer=e.createVertexBuffer(i,Ve.members),this.tileExtentSegments=t.SegmentVector.simpleSegment(0,0,4,2);var o=new t.StructArrayLayout2i4;o.emplaceBack(0,0),o.emplaceBack(t.EXTENT,0),o.emplaceBack(0,t.EXTENT),o.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer=e.createVertexBuffer(o,Ve.members),this.debugSegments=t.SegmentVector.simpleSegment(0,0,4,5);var r=new t.StructArrayLayout4i8;r.emplaceBack(0,0,0,0),r.emplaceBack(t.EXTENT,0,t.EXTENT,0),r.emplaceBack(0,t.EXTENT,0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer=e.createVertexBuffer(r,A.members),this.rasterBoundsSegments=t.SegmentVector.simpleSegment(0,0,4,2);var a=new t.StructArrayLayout2i4;a.emplaceBack(0,0),a.emplaceBack(1,0),a.emplaceBack(0,1),a.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(a,Ve.members),this.viewportSegments=t.SegmentVector.simpleSegment(0,0,4,2);var n=new t.StructArrayLayout1ui2;n.emplaceBack(0),n.emplaceBack(1),n.emplaceBack(3),n.emplaceBack(2),n.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(n);var s=new t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(s),this.emptyTexture=new t.Texture(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])},e.gl.RGBA);var l=this.context.gl;this.stencilClearMode=new Pt({func:l.ALWAYS,mask:0},0,255,l.ZERO,l.ZERO,l.ZERO);},yo.prototype.clearStencil=function(){var e=this.context,i=e.gl;this.nextStencilID=1,this.currentStencilSource=void 0;var o=t.create();t.ortho(o,0,this.width,this.height,0,0,1),t.scale(o,o,[i.drawingBufferWidth,i.drawingBufferHeight,0]),this.useProgram(\"clippingMask\").draw(e,i.TRIANGLES,It.disabled,this.stencilClearMode,St.disabled,Ct.disabled,Li(o),\"$clipping\",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments);},yo.prototype._renderTileClippingMasks=function(t,e){if(this.currentStencilSource!==t.source&&t.isTileClipped()&&e&&e.length){this.currentStencilSource=t.source;var i=this.context,o=i.gl;this.nextStencilID+e.length>256&&this.clearStencil(),i.setColorMode(St.disabled),i.setDepthMode(It.disabled);var r=this.useProgram(\"clippingMask\");this._tileClippingMaskIDs={};for(var a=0,n=e;a<n.length;a+=1){var s=n[a],l=this._tileClippingMaskIDs[s.key]=this.nextStencilID++;r.draw(i,o.TRIANGLES,It.disabled,new Pt({func:o.ALWAYS,mask:0},l,255,o.KEEP,o.KEEP,o.REPLACE),St.disabled,Ct.disabled,Li(s.posMatrix),\"$clipping\",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments);}}},yo.prototype.stencilModeFor3D=function(){this.currentStencilSource=void 0,this.nextStencilID+1>256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new Pt({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},yo.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new Pt({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},yo.prototype.stencilConfigForOverlap=function(t){var e,i=this.context.gl,o=t.sort((function(t,e){return e.overscaledZ-t.overscaledZ})),r=o[o.length-1].overscaledZ,a=o[0].overscaledZ-r+1;if(a>1){this.currentStencilSource=void 0,this.nextStencilID+a>256&&this.clearStencil();for(var n={},s=0;s<a;s++)n[s+r]=new Pt({func:i.GEQUAL,mask:255},s+this.nextStencilID,255,i.KEEP,i.KEEP,i.REPLACE);return this.nextStencilID+=a,[n,o]}return [(e={},e[r]=Pt.disabled,e),o]},yo.prototype.colorModeForRenderPass=function(){var e=this.context.gl;return this._showOverdrawInspector?new St([e.CONSTANT_COLOR,e.ONE],new t.Color(1/8,1/8,1/8,0),[!0,!0,!0,!0]):\"opaque\"===this.renderPass?St.unblended:St.alphaBlended},yo.prototype.depthModeForSublayer=function(t,e,i){if(!this.opaquePassEnabledForLayer())return It.disabled;var o=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new It(i||this.context.gl.LEQUAL,e,[o,o])},yo.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer<this.opaquePassCutoff},yo.prototype.render=function(e,i){var o=this;this.style=e,this.options=i,this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(t.browser.now()),this.imageManager.beginFrame();var r=this.style._order,a=this.style.sourceCaches;for(var n in a){var s=a[n];s.used&&s.prepare(this.context);}var l,c,u={},h={},p={};for(var d in a){var _=a[d];u[d]=_.getVisibleCoordinates(),h[d]=u[d].slice().reverse(),p[d]=_.getVisibleCoordinates(!0).reverse();}this.opaquePassCutoff=1/0;for(var f=0;f<r.length;f++)if(this.style._layers[r[f]].is3D()){this.opaquePassCutoff=f;break}this.renderPass=\"offscreen\";for(var m=0,g=r;m<g.length;m+=1){var v=this.style._layers[g[m]];if(v.hasOffscreenPass()&&!v.isHidden(this.transform.zoom)){var y=h[v.source];(\"custom\"===v.type||y.length)&&this.renderLayer(this,a[v.source],v,y);}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:i.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this.clearStencil(),this._showOverdrawInspector=i.showOverdrawInspector,this.depthRangeFor3D=[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],this.renderPass=\"opaque\",this.currentLayer=r.length-1;this.currentLayer>=0;this.currentLayer--){var x=this.style._layers[r[this.currentLayer]],b=a[x.source],w=u[x.source];this._renderTileClippingMasks(x,w),this.renderLayer(this,b,x,w);}for(this.renderPass=\"translucent\",this.currentLayer=0;this.currentLayer<r.length;this.currentLayer++){var T=this.style._layers[r[this.currentLayer]],E=a[T.source],I=(\"symbol\"===T.type?p:h)[T.source];this._renderTileClippingMasks(T,u[T.source]),this.renderLayer(this,E,T,I);}this.options.showTileBoundaries&&(t.values(this.style._layers).forEach((function(t){t.source&&!t.isHidden(o.transform.zoom)&&(t.source!==(c&&c.id)&&(c=o.style.sourceCaches[t.source]),(!l||l.getSource().maxzoom<c.getSource().maxzoom)&&(l=c));})),l&&vo.debug(this,l,l.getVisibleCoordinates())),this.options.showPadding&&function(t){var e=t.transform.padding;_o(t,t.transform.height-(e.top||0),3,lo),_o(t,e.bottom||0,3,co),fo(t,e.left||0,3,uo),fo(t,t.transform.width-(e.right||0),3,ho);var i=t.transform.centerPoint;!function(t,e,i,o){mo(t,e-1,i-10,2,20,o),mo(t,e-10,i-1,20,2,o);}(t,i.x,t.transform.height-i.y,po);}(this),this.context.setDefault();},yo.prototype.renderLayer=function(t,e,i,o){i.isHidden(this.transform.zoom)||(\"background\"===i.type||\"custom\"===i.type||o.length)&&(this.id=i.id,this.gpuTimingStart(i),vo[i.type](t,e,i,o,this.style.placement.variableOffsets),this.gpuTimingEnd());},yo.prototype.gpuTimingStart=function(t){if(this.options.gpuTiming){var e=this.context.extTimerQuery,i=this.gpuTimers[t.id];i||(i=this.gpuTimers[t.id]={calls:0,cpuTime:0,query:e.createQueryEXT()}),i.calls++,e.beginQueryEXT(e.TIME_ELAPSED_EXT,i.query);}},yo.prototype.gpuTimingEnd=function(){if(this.options.gpuTiming){var t=this.context.extTimerQuery;t.endQueryEXT(t.TIME_ELAPSED_EXT);}},yo.prototype.collectGpuTimers=function(){var t=this.gpuTimers;return this.gpuTimers={},t},yo.prototype.queryGpuTimers=function(t){var e={};for(var i in t){var o=t[i],r=this.context.extTimerQuery,a=r.getQueryObjectEXT(o.query,r.QUERY_RESULT_EXT)/1e6;r.deleteQueryEXT(o.query),e[i]=a;}return e},yo.prototype.translatePosMatrix=function(e,i,o,r,a){if(!o[0]&&!o[1])return e;var n=a?\"map\"===r?this.transform.angle:0:\"viewport\"===r?-this.transform.angle:0;if(n){var s=Math.sin(n),l=Math.cos(n);o=[o[0]*l-o[1]*s,o[0]*s+o[1]*l];}var c=[a?o[0]:pe(i,o[0],this.transform.zoom),a?o[1]:pe(i,o[1],this.transform.zoom),0],u=new Float32Array(16);return t.translate(u,e,c),u},yo.prototype.saveTileTexture=function(t){var e=this._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]=[t];},yo.prototype.getTileTexture=function(t){var e=this._tileTextures[t];return e&&e.length>0?e.pop():null},yo.prototype.isPatternMissing=function(t){if(!t)return !1;if(!t.from||!t.to)return !0;var e=this.imageManager.getPattern(t.from.toString()),i=this.imageManager.getPattern(t.to.toString());return !e||!i},yo.prototype.useProgram=function(t,e){this.cache=this.cache||{};var i=\"\"+t+(e?e.cacheKey:\"\")+(this._showOverdrawInspector?\"/overdraw\":\"\");return this.cache[i]||(this.cache[i]=new bi(this.context,t,vi[t],e,Ki[t],this._showOverdrawInspector)),this.cache[i]},yo.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault();},yo.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD);},yo.prototype.initDebugOverlayCanvas=function(){null==this.debugOverlayCanvas&&(this.debugOverlayCanvas=t.window.document.createElement(\"canvas\"),this.debugOverlayCanvas.width=512,this.debugOverlayCanvas.height=512,this.debugOverlayTexture=new t.Texture(this.context,this.debugOverlayCanvas,this.context.gl.RGBA));},yo.prototype.destroy=function(){this.emptyTexture.destroy(),this.debugOverlayTexture&&this.debugOverlayTexture.destroy();};var xo=function(t,e){this.points=t,this.planes=e;};xo.fromInvProjectionMatrix=function(e,i,o){var r=Math.pow(2,o),a=[[-1,1,-1,1],[1,1,-1,1],[1,-1,-1,1],[-1,-1,-1,1],[-1,1,1,1],[1,1,1,1],[1,-1,1,1],[-1,-1,1,1]].map((function(i){return t.transformMat4([],i,e)})).map((function(e){return t.scale$1([],e,1/e[3]/i*r)})),n=[[0,1,2],[6,5,4],[0,3,7],[2,1,5],[3,2,6],[0,4,5]].map((function(e){var i=t.sub([],a[e[0]],a[e[1]]),o=t.sub([],a[e[2]],a[e[1]]),r=t.normalize([],t.cross([],i,o)),n=-t.dot(r,a[e[1]]);return r.concat(n)}));return new xo(a,n)};var bo=function(e,i){this.min=e,this.max=i,this.center=t.scale$2([],t.add([],this.min,this.max),.5);};bo.prototype.quadrant=function(e){for(var i=[e%2==0,e<2],o=t.clone$2(this.min),r=t.clone$2(this.max),a=0;a<i.length;a++)o[a]=i[a]?this.min[a]:this.center[a],r[a]=i[a]?this.center[a]:this.max[a];return r[2]=this.max[2],new bo(o,r)},bo.prototype.distanceX=function(t){return Math.max(Math.min(this.max[0],t[0]),this.min[0])-t[0]},bo.prototype.distanceY=function(t){return Math.max(Math.min(this.max[1],t[1]),this.min[1])-t[1]},bo.prototype.intersects=function(e){for(var i=[[this.min[0],this.min[1],0,1],[this.max[0],this.min[1],0,1],[this.max[0],this.max[1],0,1],[this.min[0],this.max[1],0,1]],o=!0,r=0;r<e.planes.length;r++){for(var a=e.planes[r],n=0,s=0;s<i.length;s++)n+=t.dot$1(a,i[s])>=0;if(0===n)return 0;n!==i.length&&(o=!1);}if(o)return 2;for(var l=0;l<3;l++){for(var c=Number.MAX_VALUE,u=-Number.MAX_VALUE,h=0;h<e.points.length;h++){var p=e.points[h][l]-this.min[l];c=Math.min(c,p),u=Math.max(u,p);}if(u<0||c>this.max[l]-this.min[l])return 0}return 1};var wo=function(t,e,i,o){if(void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i=0),void 0===o&&(o=0),isNaN(t)||t<0||isNaN(e)||e<0||isNaN(i)||i<0||isNaN(o)||o<0)throw new Error(\"Invalid value for edge-insets, top, bottom, left and right must all be numbers\");this.top=t,this.bottom=e,this.left=i,this.right=o;};wo.prototype.interpolate=function(e,i,o){return null!=i.top&&null!=e.top&&(this.top=t.number(e.top,i.top,o)),null!=i.bottom&&null!=e.bottom&&(this.bottom=t.number(e.bottom,i.bottom,o)),null!=i.left&&null!=e.left&&(this.left=t.number(e.left,i.left,o)),null!=i.right&&null!=e.right&&(this.right=t.number(e.right,i.right,o)),this},wo.prototype.getCenter=function(e,i){var o=t.clamp((this.left+e-this.right)/2,0,e),r=t.clamp((this.top+i-this.bottom)/2,0,i);return new t.Point(o,r)},wo.prototype.equals=function(t){return this.top===t.top&&this.bottom===t.bottom&&this.left===t.left&&this.right===t.right},wo.prototype.clone=function(){return new wo(this.top,this.bottom,this.left,this.right)},wo.prototype.toJSON=function(){return {top:this.top,bottom:this.bottom,left:this.left,right:this.right}};var To=function(e,i,o,r,a){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===a||a,this._minZoom=e||0,this._maxZoom=i||22,this._minPitch=null==o?0:o,this._maxPitch=null==r?60:r,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._edgeInsets=new wo,this._posMatrixCache={},this._alignedPosMatrixCache={};},Eo={minZoom:{configurable:!0},maxZoom:{configurable:!0},minPitch:{configurable:!0},maxPitch:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerOffset:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},padding:{configurable:!0},centerPoint:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};To.prototype.clone=function(){var t=new To(this._minZoom,this._maxZoom,this._minPitch,this.maxPitch,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._edgeInsets=this._edgeInsets.clone(),t._calcMatrices(),t},Eo.minZoom.get=function(){return this._minZoom},Eo.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t));},Eo.maxZoom.get=function(){return this._maxZoom},Eo.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t));},Eo.minPitch.get=function(){return this._minPitch},Eo.minPitch.set=function(t){this._minPitch!==t&&(this._minPitch=t,this.pitch=Math.max(this.pitch,t));},Eo.maxPitch.get=function(){return this._maxPitch},Eo.maxPitch.set=function(t){this._maxPitch!==t&&(this._maxPitch=t,this.pitch=Math.min(this.pitch,t));},Eo.renderWorldCopies.get=function(){return this._renderWorldCopies},Eo.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t;},Eo.worldSize.get=function(){return this.tileSize*this.scale},Eo.centerOffset.get=function(){return this.centerPoint._sub(this.size._div(2))},Eo.size.get=function(){return new t.Point(this.width,this.height)},Eo.bearing.get=function(){return -this.angle/Math.PI*180},Eo.bearing.set=function(e){var i=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==i&&(this._unmodified=!1,this.angle=i,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle));},Eo.pitch.get=function(){return this._pitch/Math.PI*180},Eo.pitch.set=function(e){var i=t.clamp(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitch!==i&&(this._unmodified=!1,this._pitch=i,this._calcMatrices());},Eo.fov.get=function(){return this._fov/Math.PI*180},Eo.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices());},Eo.zoom.get=function(){return this._zoom},Eo.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices());},Eo.center.get=function(){return this._center},Eo.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices());},Eo.padding.get=function(){return this._edgeInsets.toJSON()},Eo.padding.set=function(t){this._edgeInsets.equals(t)||(this._unmodified=!1,this._edgeInsets.interpolate(this._edgeInsets,t,1),this._calcMatrices());},Eo.centerPoint.get=function(){return this._edgeInsets.getCenter(this.width,this.height)},To.prototype.isPaddingEqual=function(t){return this._edgeInsets.equals(t)},To.prototype.interpolatePadding=function(t,e,i){this._unmodified=!1,this._edgeInsets.interpolate(t,e,i),this._constrain(),this._calcMatrices();},To.prototype.coveringZoomLevel=function(t){var e=(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize));return Math.max(0,e)},To.prototype.getVisibleUnwrappedCoordinates=function(e){var i=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var o=this.pointCoordinate(new t.Point(0,0)),r=this.pointCoordinate(new t.Point(this.width,0)),a=this.pointCoordinate(new t.Point(this.width,this.height)),n=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(o.x,r.x,a.x,n.x)),l=Math.floor(Math.max(o.x,r.x,a.x,n.x)),c=s-1;c<=l+1;c++)0!==c&&i.push(new t.UnwrappedTileID(c,e));return i},To.prototype.coveringTiles=function(e){var i=this.coveringZoomLevel(e),o=i;if(void 0!==e.minzoom&&i<e.minzoom)return [];void 0!==e.maxzoom&&i>e.maxzoom&&(i=e.maxzoom);var r=t.MercatorCoordinate.fromLngLat(this.center),a=Math.pow(2,i),n=[a*r.x,a*r.y,0],s=xo.fromInvProjectionMatrix(this.invProjMatrix,this.worldSize,i),l=e.minzoom||0;this.pitch<=60&&this._edgeInsets.top<.1&&(l=i);var c=function(t){return {aabb:new bo([t*a,0,0],[(t+1)*a,a,0]),zoom:0,x:0,y:0,wrap:t,fullyVisible:!1}},u=[],h=[],p=i,d=e.reparseOverscaled?o:i;if(this._renderWorldCopies)for(var _=1;_<=3;_++)u.push(c(-_)),u.push(c(_));for(u.push(c(0));u.length>0;){var f=u.pop(),m=f.x,g=f.y,v=f.fullyVisible;if(!v){var y=f.aabb.intersects(s);if(0===y)continue;v=2===y;}var x=f.aabb.distanceX(n),b=f.aabb.distanceY(n),w=Math.max(Math.abs(x),Math.abs(b));if(f.zoom===p||w>3+(1<<p-f.zoom)-2&&f.zoom>=l)h.push({tileID:new t.OverscaledTileID(f.zoom===p?d:f.zoom,f.wrap,f.zoom,m,g),distanceSq:t.sqrLen([n[0]-.5-m,n[1]-.5-g])});else for(var T=0;T<4;T++){var E=(m<<1)+T%2,I=(g<<1)+(T>>1);u.push({aabb:f.aabb.quadrant(T),zoom:f.zoom+1,x:E,y:I,wrap:f.wrap,fullyVisible:v});}}return h.sort((function(t,e){return t.distanceSq-e.distanceSq})).map((function(t){return t.tileID}))},To.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices();},Eo.unmodified.get=function(){return this._unmodified},To.prototype.zoomScale=function(t){return Math.pow(2,t)},To.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},To.prototype.project=function(e){var i=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(i)*this.worldSize)},To.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},Eo.point.get=function(){return this.project(this.center)},To.prototype.setLocationAtPoint=function(e,i){var o=this.pointCoordinate(i),r=this.pointCoordinate(this.centerPoint),a=this.locationCoordinate(e),n=new t.MercatorCoordinate(a.x-(o.x-r.x),a.y-(o.y-r.y));this.center=this.coordinateLocation(n),this._renderWorldCopies&&(this.center=this.center.wrap());},To.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},To.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},To.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},To.prototype.coordinateLocation=function(t){return t.toLngLat()},To.prototype.pointCoordinate=function(e){var i=[e.x,e.y,0,1],o=[e.x,e.y,1,1];t.transformMat4(i,i,this.pixelMatrixInverse),t.transformMat4(o,o,this.pixelMatrixInverse);var r=i[3],a=o[3],n=i[1]/r,s=o[1]/a,l=i[2]/r,c=o[2]/a,u=l===c?0:(0-l)/(c-l);return new t.MercatorCoordinate(t.number(i[0]/r,o[0]/a,u)/this.worldSize,t.number(n,s,u)/this.worldSize)},To.prototype.coordinatePoint=function(e){var i=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(i,i,this.pixelMatrix),new t.Point(i[0]/i[3],i[1]/i[3])},To.prototype.getBounds=function(){return (new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},To.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},To.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude]);},To.prototype.calculatePosMatrix=function(e,i){void 0===i&&(i=!1);var o=e.key,r=i?this._alignedPosMatrixCache:this._posMatrixCache;if(r[o])return r[o];var a=e.canonical,n=this.worldSize/this.zoomScale(a.z),s=a.x+Math.pow(2,a.z)*e.wrap,l=t.identity(new Float64Array(16));return t.translate(l,l,[s*n,a.y*n,0]),t.scale(l,l,[n/t.EXTENT,n/t.EXTENT,1]),t.multiply(l,i?this.alignedProjMatrix:this.projMatrix,l),r[o]=new Float32Array(l),r[o]},To.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},To.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,i,o,r,a=-90,n=90,s=-180,l=180,c=this.size,u=this._unmodified;if(this.latRange){var h=this.latRange;a=t.mercatorYfromLat(h[1])*this.worldSize,e=(n=t.mercatorYfromLat(h[0])*this.worldSize)-a<c.y?c.y/(n-a):0;}if(this.lngRange){var p=this.lngRange;s=t.mercatorXfromLng(p[0])*this.worldSize,i=(l=t.mercatorXfromLng(p[1])*this.worldSize)-s<c.x?c.x/(l-s):0;}var d=this.point,_=Math.max(i||0,e||0);if(_)return this.center=this.unproject(new t.Point(i?(l+s)/2:d.x,e?(n+a)/2:d.y)),this.zoom+=this.scaleZoom(_),this._unmodified=u,void(this._constraining=!1);if(this.latRange){var f=d.y,m=c.y/2;f-m<a&&(r=a+m),f+m>n&&(r=n-m);}if(this.lngRange){var g=d.x,v=c.x/2;g-v<s&&(o=s+v),g+v>l&&(o=l-v);}void 0===o&&void 0===r||(this.center=this.unproject(new t.Point(void 0!==o?o:d.x,void 0!==r?r:d.y))),this._unmodified=u,this._constraining=!1;}},To.prototype._calcMatrices=function(){if(this.height){var e=this.centerOffset;this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var i=Math.PI/2+this._pitch,o=this._fov*(.5+e.y/this.height),r=Math.sin(o)*this.cameraToCenterDistance/Math.sin(t.clamp(Math.PI-i-o,.01,Math.PI-.01)),a=this.point,n=a.x,s=a.y,l=1.01*(Math.cos(Math.PI/2-this._pitch)*r+this.cameraToCenterDistance),c=this.height/50,u=new Float64Array(16);t.perspective(u,this._fov,this.width/this.height,c,l),u[8]=2*-e.x/this.width,u[9]=2*e.y/this.height,t.scale(u,u,[1,-1,1]),t.translate(u,u,[0,0,-this.cameraToCenterDistance]),t.rotateX(u,u,this._pitch),t.rotateZ(u,u,this.angle),t.translate(u,u,[-n,-s,0]),this.mercatorMatrix=t.scale([],u,[this.worldSize,this.worldSize,this.worldSize]),t.scale(u,u,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=u,this.invProjMatrix=t.invert([],this.projMatrix);var h=this.width%2/2,p=this.height%2/2,d=Math.cos(this.angle),_=Math.sin(this.angle),f=n-Math.round(n)+d*h+_*p,m=s-Math.round(s)+d*p+_*h,g=new Float64Array(u);if(t.translate(g,g,[f>.5?f-1:f,m>.5?m-1:m,0]),this.alignedProjMatrix=g,u=t.create(),t.scale(u,u,[this.width/2,-this.height/2,1]),t.translate(u,u,[1,-1,0]),this.labelPlaneMatrix=u,u=t.create(),t.scale(u,u,[1,-1,1]),t.translate(u,u,[-1,-1,0]),t.scale(u,u,[2/this.width,2/this.height,1]),this.glCoordMatrix=u,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(u=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error(\"failed to invert matrix\");this.pixelMatrixInverse=u,this._posMatrixCache={},this._alignedPosMatrixCache={};}},To.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),i=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(i,i,this.pixelMatrix)[3]/this.cameraToCenterDistance},To.prototype.getCameraPoint=function(){var e=Math.tan(this._pitch)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,e))},To.prototype.getCameraQueryGeometry=function(e){var i=this.getCameraPoint();if(1===e.length)return [e[0],i];for(var o=i.x,r=i.y,a=i.x,n=i.y,s=0,l=e;s<l.length;s+=1){var c=l[s];o=Math.min(o,c.x),r=Math.min(r,c.y),a=Math.max(a,c.x),n=Math.max(n,c.y);}return [new t.Point(o,r),new t.Point(a,r),new t.Point(a,n),new t.Point(o,n),new t.Point(o,r)]},Object.defineProperties(To.prototype,Eo);var Io=function(e){var i,o,r,a;this._hashName=e&&encodeURIComponent(e),t.bindAll([\"_getCurrentHash\",\"_onHashChange\",\"_updateHash\"],this),this._updateHash=(i=this._updateHashUnthrottled.bind(this),o=!1,r=null,a=function(){r=null,o&&(i(),r=setTimeout(a,300),o=!1);},function(){return o=!0,r||a(),r});};Io.prototype.addTo=function(e){return this._map=e,t.window.addEventListener(\"hashchange\",this._onHashChange,!1),this._map.on(\"moveend\",this._updateHash),this},Io.prototype.remove=function(){return t.window.removeEventListener(\"hashchange\",this._onHashChange,!1),this._map.off(\"moveend\",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},Io.prototype.getHashString=function(e){var i=this._map.getCenter(),o=Math.round(100*this._map.getZoom())/100,r=Math.ceil((o*Math.LN2+Math.log(512/360/.5))/Math.LN10),a=Math.pow(10,r),n=Math.round(i.lng*a)/a,s=Math.round(i.lat*a)/a,l=this._map.getBearing(),c=this._map.getPitch(),u=\"\";if(u+=e?\"/\"+n+\"/\"+s+\"/\"+o:o+\"/\"+s+\"/\"+n,(l||c)&&(u+=\"/\"+Math.round(10*l)/10),c&&(u+=\"/\"+Math.round(c)),this._hashName){var h=this._hashName,p=!1,d=t.window.location.hash.slice(1).split(\"&\").map((function(t){var e=t.split(\"=\")[0];return e===h?(p=!0,e+\"=\"+u):t})).filter((function(t){return t}));return p||d.push(h+\"=\"+u),\"#\"+d.join(\"&\")}return \"#\"+u},Io.prototype._getCurrentHash=function(){var e,i=this,o=t.window.location.hash.replace(\"#\",\"\");return this._hashName?(o.split(\"&\").map((function(t){return t.split(\"=\")})).forEach((function(t){t[0]===i._hashName&&(e=t);})),(e&&e[1]||\"\").split(\"/\")):o.split(\"/\")},Io.prototype._onHashChange=function(){var t=this._getCurrentHash();if(t.length>=3&&!t.some((function(t){return isNaN(t)}))){var e=this._map.dragRotate.isEnabled()&&this._map.touchZoomRotate.isEnabled()?+(t[3]||0):this._map.getBearing();return this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:e,pitch:+(t[4]||0)}),!0}return !1},Io.prototype._updateHashUnthrottled=function(){var e=t.window.location.href.replace(/(#.+)?$/,this.getHashString());try{t.window.history.replaceState(t.window.history.state,null,e);}catch(t){}};var Po={linearity:.3,easing:t.bezier(0,0,.3,1)},So=t.extend({deceleration:2500,maxSpeed:1400},Po),Co=t.extend({deceleration:20,maxSpeed:1400},Po),zo=t.extend({deceleration:1e3,maxSpeed:360},Po),Do=t.extend({deceleration:1e3,maxSpeed:90},Po),Ao=function(t){this._map=t,this.clear();};function Mo(t,e){(!t.duration||t.duration<e.duration)&&(t.duration=e.duration,t.easing=e.easing);}function Lo(e,i,o){var r=o.maxSpeed,a=o.linearity,n=o.deceleration,s=t.clamp(e*a/(i/1e3),-r,r),l=Math.abs(s)/(n*a);return {easing:o.easing,duration:1e3*l,amount:s*(l/2)}}Ao.prototype.clear=function(){this._inertiaBuffer=[];},Ao.prototype.record=function(e){this._drainInertiaBuffer(),this._inertiaBuffer.push({time:t.browser.now(),settings:e});},Ao.prototype._drainInertiaBuffer=function(){for(var e=this._inertiaBuffer,i=t.browser.now();e.length>0&&i-e[0].time>160;)e.shift();},Ao.prototype._onMoveEnd=function(e){if(this._drainInertiaBuffer(),!(this._inertiaBuffer.length<2)){for(var i={zoom:0,bearing:0,pitch:0,pan:new t.Point(0,0),pinchAround:void 0,around:void 0},o=0,r=this._inertiaBuffer;o<r.length;o+=1){var a=r[o].settings;i.zoom+=a.zoomDelta||0,i.bearing+=a.bearingDelta||0,i.pitch+=a.pitchDelta||0,a.panDelta&&i.pan._add(a.panDelta),a.around&&(i.around=a.around),a.pinchAround&&(i.pinchAround=a.pinchAround);}var n=this._inertiaBuffer[this._inertiaBuffer.length-1].time-this._inertiaBuffer[0].time,s={};if(i.pan.mag()){var l=Lo(i.pan.mag(),n,t.extend({},So,e||{}));s.offset=i.pan.mult(l.amount/i.pan.mag()),s.center=this._map.transform.center,Mo(s,l);}if(i.zoom){var c=Lo(i.zoom,n,Co);s.zoom=this._map.transform.zoom+c.amount,Mo(s,c);}if(i.bearing){var u=Lo(i.bearing,n,zo);s.bearing=this._map.transform.bearing+t.clamp(u.amount,-179,179),Mo(s,u);}if(i.pitch){var h=Lo(i.pitch,n,Do);s.pitch=this._map.transform.pitch+h.amount,Mo(s,h);}if(s.zoom||s.bearing){var p=void 0===i.pinchAround?i.around:i.pinchAround;s.around=p?this._map.unproject(p):this._map.getCenter();}return this.clear(),t.extend(s,{noMoveStart:!0})}};var Ro=function(e){function o(o,r,a,n){void 0===n&&(n={});var s=i.mousePos(r.getCanvasContainer(),a),l=r.unproject(s);e.call(this,o,t.extend({point:s,lngLat:l,originalEvent:a},n)),this._defaultPrevented=!1,this.target=r;}e&&(o.__proto__=e),(o.prototype=Object.create(e&&e.prototype)).constructor=o;var r={defaultPrevented:{configurable:!0}};return o.prototype.preventDefault=function(){this._defaultPrevented=!0;},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(o.prototype,r),o}(t.Event),ko=function(e){function o(o,r,a){var n=\"touchend\"===o?a.changedTouches:a.touches,s=i.touchPos(r.getCanvasContainer(),n),l=s.map((function(t){return r.unproject(t)})),c=s.reduce((function(t,e,i,o){return t.add(e.div(o.length))}),new t.Point(0,0)),u=r.unproject(c);e.call(this,o,{points:s,point:c,lngLats:l,lngLat:u,originalEvent:a}),this._defaultPrevented=!1;}e&&(o.__proto__=e),(o.prototype=Object.create(e&&e.prototype)).constructor=o;var r={defaultPrevented:{configurable:!0}};return o.prototype.preventDefault=function(){this._defaultPrevented=!0;},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(o.prototype,r),o}(t.Event),Bo=function(t){function e(e,i,o){t.call(this,e,{originalEvent:o}),this._defaultPrevented=!1;}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0;},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,i),e}(t.Event),Oo=function(t,e){this._map=t,this._clickTolerance=e.clickTolerance;};Oo.prototype.reset=function(){delete this._mousedownPos;},Oo.prototype.wheel=function(t){return this._firePreventable(new Bo(t.type,this._map,t))},Oo.prototype.mousedown=function(t,e){return this._mousedownPos=e,this._firePreventable(new Ro(t.type,this._map,t))},Oo.prototype.mouseup=function(t){this._map.fire(new Ro(t.type,this._map,t));},Oo.prototype.click=function(t,e){this._mousedownPos&&this._mousedownPos.dist(e)>=this._clickTolerance||this._map.fire(new Ro(t.type,this._map,t));},Oo.prototype.dblclick=function(t){return this._firePreventable(new Ro(t.type,this._map,t))},Oo.prototype.mouseover=function(t){this._map.fire(new Ro(t.type,this._map,t));},Oo.prototype.mouseout=function(t){this._map.fire(new Ro(t.type,this._map,t));},Oo.prototype.touchstart=function(t){return this._firePreventable(new ko(t.type,this._map,t))},Oo.prototype.touchmove=function(t){this._map.fire(new ko(t.type,this._map,t));},Oo.prototype.touchend=function(t){this._map.fire(new ko(t.type,this._map,t));},Oo.prototype.touchcancel=function(t){this._map.fire(new ko(t.type,this._map,t));},Oo.prototype._firePreventable=function(t){if(this._map.fire(t),t.defaultPrevented)return {}},Oo.prototype.isEnabled=function(){return !0},Oo.prototype.isActive=function(){return !1},Oo.prototype.enable=function(){},Oo.prototype.disable=function(){};var Fo=function(t){this._map=t;};Fo.prototype.reset=function(){this._delayContextMenu=!1,delete this._contextMenuEvent;},Fo.prototype.mousemove=function(t){this._map.fire(new Ro(t.type,this._map,t));},Fo.prototype.mousedown=function(){this._delayContextMenu=!0;},Fo.prototype.mouseup=function(){this._delayContextMenu=!1,this._contextMenuEvent&&(this._map.fire(new Ro(\"contextmenu\",this._map,this._contextMenuEvent)),delete this._contextMenuEvent);},Fo.prototype.contextmenu=function(t){this._delayContextMenu?this._contextMenuEvent=t:this._map.fire(new Ro(t.type,this._map,t)),this._map.listens(\"contextmenu\")&&t.preventDefault();},Fo.prototype.isEnabled=function(){return !0},Fo.prototype.isActive=function(){return !1},Fo.prototype.enable=function(){},Fo.prototype.disable=function(){};var Uo=function(t,e){this._map=t,this._el=t.getCanvasContainer(),this._container=t.getContainer(),this._clickTolerance=e.clickTolerance||1;};function No(t,e){for(var i={},o=0;o<t.length;o++)i[t[o].identifier]=e[o];return i}Uo.prototype.isEnabled=function(){return !!this._enabled},Uo.prototype.isActive=function(){return !!this._active},Uo.prototype.enable=function(){this.isEnabled()||(this._enabled=!0);},Uo.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1);},Uo.prototype.mousedown=function(t,e){this.isEnabled()&&t.shiftKey&&0===t.button&&(i.disableDrag(),this._startPos=this._lastPos=e,this._active=!0);},Uo.prototype.mousemoveWindow=function(t,e){if(this._active){var o=e;if(!(this._lastPos.equals(o)||!this._box&&o.dist(this._startPos)<this._clickTolerance)){var r=this._startPos;this._lastPos=o,this._box||(this._box=i.create(\"div\",\"mapboxgl-boxzoom\",this._container),this._container.classList.add(\"mapboxgl-crosshair\"),this._fireEvent(\"boxzoomstart\",t));var a=Math.min(r.x,o.x),n=Math.max(r.x,o.x),s=Math.min(r.y,o.y),l=Math.max(r.y,o.y);i.setTransform(this._box,\"translate(\"+a+\"px,\"+s+\"px)\"),this._box.style.width=n-a+\"px\",this._box.style.height=l-s+\"px\";}}},Uo.prototype.mouseupWindow=function(e,o){var r=this;if(this._active&&0===e.button){var a=this._startPos,n=o;if(this.reset(),i.suppressClick(),a.x!==n.x||a.y!==n.y)return this._map.fire(new t.Event(\"boxzoomend\",{originalEvent:e})),{cameraAnimation:function(t){return t.fitScreenCoordinates(a,n,r._map.getBearing(),{linear:!0})}};this._fireEvent(\"boxzoomcancel\",e);}},Uo.prototype.keydown=function(t){this._active&&27===t.keyCode&&(this.reset(),this._fireEvent(\"boxzoomcancel\",t));},Uo.prototype.blur=function(){this.reset();},Uo.prototype.reset=function(){this._active=!1,this._container.classList.remove(\"mapboxgl-crosshair\"),this._box&&(i.remove(this._box),this._box=null),i.enableDrag(),delete this._startPos,delete this._lastPos;},Uo.prototype._fireEvent=function(e,i){return this._map.fire(new t.Event(e,{originalEvent:i}))};var Zo=function(t){this.reset(),this.numTouches=t.numTouches;};Zo.prototype.reset=function(){delete this.centroid,delete this.startTime,delete this.touches,this.aborted=!1;},Zo.prototype.touchstart=function(e,i,o){(this.centroid||o.length>this.numTouches)&&(this.aborted=!0),this.aborted||(void 0===this.startTime&&(this.startTime=e.timeStamp),o.length===this.numTouches&&(this.centroid=function(e){for(var i=new t.Point(0,0),o=0,r=e;o<r.length;o+=1)i._add(r[o]);return i.div(e.length)}(i),this.touches=No(o,i)));},Zo.prototype.touchmove=function(t,e,i){if(!this.aborted&&this.centroid){var o=No(i,e);for(var r in this.touches){var a=o[r];(!a||a.dist(this.touches[r])>30)&&(this.aborted=!0);}}},Zo.prototype.touchend=function(t,e,i){if((!this.centroid||t.timeStamp-this.startTime>500)&&(this.aborted=!0),0===i.length){var o=!this.aborted&&this.centroid;if(this.reset(),o)return o}};var qo=function(t){this.singleTap=new Zo(t),this.numTaps=t.numTaps,this.reset();};qo.prototype.reset=function(){this.lastTime=1/0,delete this.lastTap,this.count=0,this.singleTap.reset();},qo.prototype.touchstart=function(t,e,i){this.singleTap.touchstart(t,e,i);},qo.prototype.touchmove=function(t,e,i){this.singleTap.touchmove(t,e,i);},qo.prototype.touchend=function(t,e,i){var o=this.singleTap.touchend(t,e,i);if(o){var r=t.timeStamp-this.lastTime<500,a=!this.lastTap||this.lastTap.dist(o)<30;if(r&&a||this.reset(),this.count++,this.lastTime=t.timeStamp,this.lastTap=o,this.count===this.numTaps)return this.reset(),o}};var jo=function(){this._zoomIn=new qo({numTouches:1,numTaps:2}),this._zoomOut=new qo({numTouches:2,numTaps:1}),this.reset();};jo.prototype.reset=function(){this._active=!1,this._zoomIn.reset(),this._zoomOut.reset();},jo.prototype.touchstart=function(t,e,i){this._zoomIn.touchstart(t,e,i),this._zoomOut.touchstart(t,e,i);},jo.prototype.touchmove=function(t,e,i){this._zoomIn.touchmove(t,e,i),this._zoomOut.touchmove(t,e,i);},jo.prototype.touchend=function(t,e,i){var o=this,r=this._zoomIn.touchend(t,e,i),a=this._zoomOut.touchend(t,e,i);return r?(this._active=!0,t.preventDefault(),setTimeout((function(){return o.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()+1,around:e.unproject(r)},{originalEvent:t})}}):a?(this._active=!0,t.preventDefault(),setTimeout((function(){return o.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()-1,around:e.unproject(a)},{originalEvent:t})}}):void 0},jo.prototype.touchcancel=function(){this.reset();},jo.prototype.enable=function(){this._enabled=!0;},jo.prototype.disable=function(){this._enabled=!1,this.reset();},jo.prototype.isEnabled=function(){return this._enabled},jo.prototype.isActive=function(){return this._active};var Vo={0:1,2:2},Go=function(t){this.reset(),this._clickTolerance=t.clickTolerance||1;};Go.prototype.blur=function(){this.reset();},Go.prototype.reset=function(){this._active=!1,this._moved=!1,delete this._lastPoint,delete this._eventButton;},Go.prototype._correctButton=function(t,e){return !1},Go.prototype._move=function(t,e){return {}},Go.prototype.mousedown=function(t,e){if(!this._lastPoint){var o=i.mouseButton(t);this._correctButton(t,o)&&(this._lastPoint=e,this._eventButton=o);}},Go.prototype.mousemoveWindow=function(t,e){var i=this._lastPoint;if(i)if(t.preventDefault(),function(t,e){var i=Vo[e];return void 0===t.buttons||(t.buttons&i)!==i}(t,this._eventButton))this.reset();else if(this._moved||!(e.dist(i)<this._clickTolerance))return this._moved=!0,this._lastPoint=e,this._move(i,e)},Go.prototype.mouseupWindow=function(t){this._lastPoint&&i.mouseButton(t)===this._eventButton&&(this._moved&&i.suppressClick(),this.reset());},Go.prototype.enable=function(){this._enabled=!0;},Go.prototype.disable=function(){this._enabled=!1,this.reset();},Go.prototype.isEnabled=function(){return this._enabled},Go.prototype.isActive=function(){return this._active};var Wo=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.mousedown=function(e,i){t.prototype.mousedown.call(this,e,i),this._lastPoint&&(this._active=!0);},e.prototype._correctButton=function(t,e){return 0===e&&!t.ctrlKey},e.prototype._move=function(t,e){return {around:e,panDelta:e.sub(t)}},e}(Go),Xo=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var i=.8*(e.x-t.x);if(i)return this._active=!0,{bearingDelta:i}},e.prototype.contextmenu=function(t){t.preventDefault();},e}(Go),Ho=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var i=-.5*(e.y-t.y);if(i)return this._active=!0,{pitchDelta:i}},e.prototype.contextmenu=function(t){t.preventDefault();},e}(Go),Ko=function(t){this._minTouches=1,this._clickTolerance=t.clickTolerance||1,this.reset();};Ko.prototype.reset=function(){this._active=!1,this._touches={},this._sum=new t.Point(0,0);},Ko.prototype.touchstart=function(t,e,i){return this._calculateTransform(t,e,i)},Ko.prototype.touchmove=function(t,e,i){if(this._active&&!(i.length<this._minTouches))return t.preventDefault(),this._calculateTransform(t,e,i)},Ko.prototype.touchend=function(t,e,i){this._calculateTransform(t,e,i),this._active&&i.length<this._minTouches&&this.reset();},Ko.prototype.touchcancel=function(){this.reset();},Ko.prototype._calculateTransform=function(e,i,o){o.length>0&&(this._active=!0);var r=No(o,i),a=new t.Point(0,0),n=new t.Point(0,0),s=0;for(var l in r){var c=r[l],u=this._touches[l];u&&(a._add(c),n._add(c.sub(u)),s++,r[l]=c);}if(this._touches=r,!(s<this._minTouches)&&n.mag()){var h=n.div(s);if(this._sum._add(h),!(this._sum.mag()<this._clickTolerance))return {around:a.div(s),panDelta:h}}},Ko.prototype.enable=function(){this._enabled=!0;},Ko.prototype.disable=function(){this._enabled=!1,this.reset();},Ko.prototype.isEnabled=function(){return this._enabled},Ko.prototype.isActive=function(){return this._active};var Yo=function(){this.reset();};function Jo(t,e,i){for(var o=0;o<t.length;o++)if(t[o].identifier===i)return e[o]}function Qo(t,e){return Math.log(t/e)/Math.LN2}Yo.prototype.reset=function(){this._active=!1,delete this._firstTwoTouches;},Yo.prototype._start=function(t){},Yo.prototype._move=function(t,e,i){return {}},Yo.prototype.touchstart=function(t,e,i){this._firstTwoTouches||i.length<2||(this._firstTwoTouches=[i[0].identifier,i[1].identifier],this._start([e[0],e[1]]));},Yo.prototype.touchmove=function(t,e,i){if(this._firstTwoTouches){t.preventDefault();var o=this._firstTwoTouches,r=o[1],a=Jo(i,e,o[0]),n=Jo(i,e,r);if(a&&n){var s=this._aroundCenter?null:a.add(n).div(2);return this._move([a,n],s,t)}}},Yo.prototype.touchend=function(t,e,o){if(this._firstTwoTouches){var r=this._firstTwoTouches,a=r[1],n=Jo(o,e,r[0]),s=Jo(o,e,a);n&&s||(this._active&&i.suppressClick(),this.reset());}},Yo.prototype.touchcancel=function(){this.reset();},Yo.prototype.enable=function(t){this._enabled=!0,this._aroundCenter=!!t&&\"center\"===t.around;},Yo.prototype.disable=function(){this._enabled=!1,this.reset();},Yo.prototype.isEnabled=function(){return this._enabled},Yo.prototype.isActive=function(){return this._active};var $o=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._distance,delete this._startDistance;},e.prototype._start=function(t){this._startDistance=this._distance=t[0].dist(t[1]);},e.prototype._move=function(t,e){var i=this._distance;if(this._distance=t[0].dist(t[1]),this._active||!(Math.abs(Qo(this._distance,this._startDistance))<.1))return this._active=!0,{zoomDelta:Qo(this._distance,i),pinchAround:e}},e}(Yo);function tr(t,e){return 180*t.angleWith(e)/Math.PI}var er=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._minDiameter,delete this._startVector,delete this._vector;},e.prototype._start=function(t){this._startVector=this._vector=t[0].sub(t[1]),this._minDiameter=t[0].dist(t[1]);},e.prototype._move=function(t,e){var i=this._vector;if(this._vector=t[0].sub(t[1]),this._active||!this._isBelowThreshold(this._vector))return this._active=!0,{bearingDelta:tr(this._vector,i),pinchAround:e}},e.prototype._isBelowThreshold=function(t){this._minDiameter=Math.min(this._minDiameter,t.mag());var e=25/(Math.PI*this._minDiameter)*360,i=tr(t,this._startVector);return Math.abs(i)<e},e}(Yo);function ir(t){return Math.abs(t.y)>Math.abs(t.x)}var or=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),this._valid=void 0,delete this._firstMove,delete this._lastPoints;},e.prototype._start=function(t){this._lastPoints=t,ir(t[0].sub(t[1]))&&(this._valid=!1);},e.prototype._move=function(t,e,i){var o=t[0].sub(this._lastPoints[0]),r=t[1].sub(this._lastPoints[1]);if(this._valid=this.gestureBeginsVertically(o,r,i.timeStamp),this._valid)return this._lastPoints=t,this._active=!0,{pitchDelta:(o.y+r.y)/2*-.5}},e.prototype.gestureBeginsVertically=function(t,e,i){if(void 0!==this._valid)return this._valid;var o=t.mag()>=2,r=e.mag()>=2;if(o||r){if(!o||!r)return void 0===this._firstMove&&(this._firstMove=i),i-this._firstMove<100&&void 0;var a=t.y>0==e.y>0;return ir(t)&&ir(e)&&a}},e}(Yo),rr={panStep:100,bearingStep:15,pitchStep:10},ar=function(){var t=rr;this._panStep=t.panStep,this._bearingStep=t.bearingStep,this._pitchStep=t.pitchStep,this._rotationDisabled=!1;};function nr(t){return t*(2-t)}ar.prototype.blur=function(){this.reset();},ar.prototype.reset=function(){this._active=!1;},ar.prototype.keydown=function(t){var e=this;if(!(t.altKey||t.ctrlKey||t.metaKey)){var i=0,o=0,r=0,a=0,n=0;switch(t.keyCode){case 61:case 107:case 171:case 187:i=1;break;case 189:case 109:case 173:i=-1;break;case 37:t.shiftKey?o=-1:(t.preventDefault(),a=-1);break;case 39:t.shiftKey?o=1:(t.preventDefault(),a=1);break;case 38:t.shiftKey?r=1:(t.preventDefault(),n=-1);break;case 40:t.shiftKey?r=-1:(t.preventDefault(),n=1);break;default:return}return this._rotationDisabled&&(o=0,r=0),{cameraAnimation:function(s){var l=s.getZoom();s.easeTo({duration:300,easeId:\"keyboardHandler\",easing:nr,zoom:i?Math.round(l)+i*(t.shiftKey?2:1):l,bearing:s.getBearing()+o*e._bearingStep,pitch:s.getPitch()+r*e._pitchStep,offset:[-a*e._panStep,-n*e._panStep],center:s.getCenter()},{originalEvent:t});}}}},ar.prototype.enable=function(){this._enabled=!0;},ar.prototype.disable=function(){this._enabled=!1,this.reset();},ar.prototype.isEnabled=function(){return this._enabled},ar.prototype.isActive=function(){return this._active},ar.prototype.disableRotation=function(){this._rotationDisabled=!0;},ar.prototype.enableRotation=function(){this._rotationDisabled=!1;};var sr=function(e,i){this._map=e,this._el=e.getCanvasContainer(),this._handler=i,this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=1/450,t.bindAll([\"_onTimeout\"],this);};sr.prototype.setZoomRate=function(t){this._defaultZoomRate=t;},sr.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t;},sr.prototype.isEnabled=function(){return !!this._enabled},sr.prototype.isActive=function(){return !!this._active||void 0!==this._finishTimeout},sr.prototype.isZooming=function(){return !!this._zooming},sr.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&\"center\"===t.around);},sr.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1);},sr.prototype.wheel=function(e){if(this.isEnabled()){var i=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,o=t.browser.now(),r=o-(this._lastWheelEventTime||0);this._lastWheelEventTime=o,0!==i&&i%4.000244140625==0?this._type=\"wheel\":0!==i&&Math.abs(i)<4?this._type=\"trackpad\":r>400?(this._type=null,this._lastValue=i,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(r*i)<200?\"trackpad\":\"wheel\",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,i+=this._lastValue)),e.shiftKey&&i&&(i/=4),this._type&&(this._lastWheelEvent=e,this._delta-=i,this._active||this._start(e)),e.preventDefault();}},sr.prototype._onTimeout=function(t){this._type=\"wheel\",this._delta-=this._lastValue,this._active||this._start(t);},sr.prototype._start=function(e){if(this._delta){this._frameId&&(this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0),this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout);var o=i.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(o)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=!0,this._handler._triggerRenderFrame());}},sr.prototype.renderFrame=function(){var e=this;if(this._frameId&&(this._frameId=null,this.isActive())){var i=this._map.transform;if(0!==this._delta){var o=\"wheel\"===this._type&&Math.abs(this._delta)>4.000244140625?this._wheelZoomRate:this._defaultZoomRate,r=2/(1+Math.exp(-Math.abs(this._delta*o)));this._delta<0&&0!==r&&(r=1/r);var a=\"number\"==typeof this._targetZoom?i.zoomScale(this._targetZoom):i.scale;this._targetZoom=Math.min(i.maxZoom,Math.max(i.minZoom,i.scaleZoom(a*r))),\"wheel\"===this._type&&(this._startZoom=i.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0;}var n,s=\"number\"==typeof this._targetZoom?this._targetZoom:i.zoom,l=this._startZoom,c=this._easing,u=!1;if(\"wheel\"===this._type&&l&&c){var h=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),p=c(h);n=t.number(l,s,p),h<1?this._frameId||(this._frameId=!0):u=!0;}else n=s,u=!0;return this._active=!0,u&&(this._active=!1,this._finishTimeout=setTimeout((function(){e._zooming=!1,e._handler._triggerRenderFrame(),delete e._targetZoom,delete e._finishTimeout;}),200)),{noInertia:!0,needsRenderFrame:!u,zoomDelta:n-i.zoom,around:this._aroundPoint,originalEvent:this._lastWheelEvent}}},sr.prototype._smoothOutEasing=function(e){var i=t.ease;if(this._prevEase){var o=this._prevEase,r=(t.browser.now()-o.start)/o.duration,a=o.easing(r+.01)-o.easing(r),n=.27/Math.sqrt(a*a+1e-4)*.01,s=Math.sqrt(.0729-n*n);i=t.bezier(n,s,.25,1);}return this._prevEase={start:t.browser.now(),duration:e,easing:i},i},sr.prototype.blur=function(){this.reset();},sr.prototype.reset=function(){this._active=!1;};var lr=function(t,e){this._clickZoom=t,this._tapZoom=e;};lr.prototype.enable=function(){this._clickZoom.enable(),this._tapZoom.enable();},lr.prototype.disable=function(){this._clickZoom.disable(),this._tapZoom.disable();},lr.prototype.isEnabled=function(){return this._clickZoom.isEnabled()&&this._tapZoom.isEnabled()},lr.prototype.isActive=function(){return this._clickZoom.isActive()||this._tapZoom.isActive()};var cr=function(){this.reset();};cr.prototype.reset=function(){this._active=!1;},cr.prototype.blur=function(){this.reset();},cr.prototype.dblclick=function(t,e){return t.preventDefault(),{cameraAnimation:function(i){i.easeTo({duration:300,zoom:i.getZoom()+(t.shiftKey?-1:1),around:i.unproject(e)},{originalEvent:t});}}},cr.prototype.enable=function(){this._enabled=!0;},cr.prototype.disable=function(){this._enabled=!1,this.reset();},cr.prototype.isEnabled=function(){return this._enabled},cr.prototype.isActive=function(){return this._active};var ur=function(){this._tap=new qo({numTouches:1,numTaps:1}),this.reset();};ur.prototype.reset=function(){this._active=!1,delete this._swipePoint,delete this._swipeTouch,delete this._tapTime,this._tap.reset();},ur.prototype.touchstart=function(t,e,i){this._swipePoint||(this._tapTime&&t.timeStamp-this._tapTime>500&&this.reset(),this._tapTime?i.length>0&&(this._swipePoint=e[0],this._swipeTouch=i[0].identifier):this._tap.touchstart(t,e,i));},ur.prototype.touchmove=function(t,e,i){if(this._tapTime){if(this._swipePoint){if(i[0].identifier!==this._swipeTouch)return;var o=e[0],r=o.y-this._swipePoint.y;return this._swipePoint=o,t.preventDefault(),this._active=!0,{zoomDelta:r/128}}}else this._tap.touchmove(t,e,i);},ur.prototype.touchend=function(t,e,i){this._tapTime?this._swipePoint&&0===i.length&&this.reset():this._tap.touchend(t,e,i)&&(this._tapTime=t.timeStamp);},ur.prototype.touchcancel=function(){this.reset();},ur.prototype.enable=function(){this._enabled=!0;},ur.prototype.disable=function(){this._enabled=!1,this.reset();},ur.prototype.isEnabled=function(){return this._enabled},ur.prototype.isActive=function(){return this._active};var hr=function(t,e,i){this._el=t,this._mousePan=e,this._touchPan=i;};hr.prototype.enable=function(t){this._inertiaOptions=t||{},this._mousePan.enable(),this._touchPan.enable(),this._el.classList.add(\"mapboxgl-touch-drag-pan\");},hr.prototype.disable=function(){this._mousePan.disable(),this._touchPan.disable(),this._el.classList.remove(\"mapboxgl-touch-drag-pan\");},hr.prototype.isEnabled=function(){return this._mousePan.isEnabled()&&this._touchPan.isEnabled()},hr.prototype.isActive=function(){return this._mousePan.isActive()||this._touchPan.isActive()};var pr=function(t,e,i){this._pitchWithRotate=t.pitchWithRotate,this._mouseRotate=e,this._mousePitch=i;};pr.prototype.enable=function(){this._mouseRotate.enable(),this._pitchWithRotate&&this._mousePitch.enable();},pr.prototype.disable=function(){this._mouseRotate.disable(),this._mousePitch.disable();},pr.prototype.isEnabled=function(){return this._mouseRotate.isEnabled()&&(!this._pitchWithRotate||this._mousePitch.isEnabled())},pr.prototype.isActive=function(){return this._mouseRotate.isActive()||this._mousePitch.isActive()};var dr=function(t,e,i,o){this._el=t,this._touchZoom=e,this._touchRotate=i,this._tapDragZoom=o,this._rotationDisabled=!1,this._enabled=!0;};dr.prototype.enable=function(t){this._touchZoom.enable(t),this._rotationDisabled||this._touchRotate.enable(t),this._tapDragZoom.enable(),this._el.classList.add(\"mapboxgl-touch-zoom-rotate\");},dr.prototype.disable=function(){this._touchZoom.disable(),this._touchRotate.disable(),this._tapDragZoom.disable(),this._el.classList.remove(\"mapboxgl-touch-zoom-rotate\");},dr.prototype.isEnabled=function(){return this._touchZoom.isEnabled()&&(this._rotationDisabled||this._touchRotate.isEnabled())&&this._tapDragZoom.isEnabled()},dr.prototype.isActive=function(){return this._touchZoom.isActive()||this._touchRotate.isActive()||this._tapDragZoom.isActive()},dr.prototype.disableRotation=function(){this._rotationDisabled=!0,this._touchRotate.disable();},dr.prototype.enableRotation=function(){this._rotationDisabled=!1,this._touchZoom.isEnabled()&&this._touchRotate.enable();};var _r=function(t){return t.zoom||t.drag||t.pitch||t.rotate},fr=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(t.Event);function mr(t){return t.panDelta&&t.panDelta.mag()||t.zoomDelta||t.bearingDelta||t.pitchDelta}var gr=function(e,o){this._map=e,this._el=this._map.getCanvasContainer(),this._handlers=[],this._handlersById={},this._changes=[],this._inertia=new Ao(e),this._bearingSnap=o.bearingSnap,this._previousActiveHandlers={},this._eventsInProgress={},this._addDefaultHandlers(o),t.bindAll([\"handleEvent\",\"handleWindowEvent\"],this);var r=this._el;this._listeners=[[r,\"touchstart\",{passive:!0}],[r,\"touchmove\",{passive:!1}],[r,\"touchend\",void 0],[r,\"touchcancel\",void 0],[r,\"mousedown\",void 0],[r,\"mousemove\",void 0],[r,\"mouseup\",void 0],[t.window.document,\"mousemove\",{capture:!0}],[t.window.document,\"mouseup\",void 0],[r,\"mouseover\",void 0],[r,\"mouseout\",void 0],[r,\"dblclick\",void 0],[r,\"click\",void 0],[r,\"keydown\",{capture:!1}],[r,\"keyup\",void 0],[r,\"wheel\",{passive:!1}],[r,\"contextmenu\",void 0],[t.window,\"blur\",void 0]];for(var a=0,n=this._listeners;a<n.length;a+=1){var s=n[a],l=s[0];i.addEventListener(l,s[1],l===t.window.document?this.handleWindowEvent:this.handleEvent,s[2]);}};gr.prototype.destroy=function(){for(var e=0,o=this._listeners;e<o.length;e+=1){var r=o[e],a=r[0];i.removeEventListener(a,r[1],a===t.window.document?this.handleWindowEvent:this.handleEvent,r[2]);}},gr.prototype._addDefaultHandlers=function(t){var e=this._map,i=e.getCanvasContainer();this._add(\"mapEvent\",new Oo(e,t));var o=e.boxZoom=new Uo(e,t);this._add(\"boxZoom\",o);var r=new jo,a=new cr;e.doubleClickZoom=new lr(a,r),this._add(\"tapZoom\",r),this._add(\"clickZoom\",a);var n=new ur;this._add(\"tapDragZoom\",n);var s=e.touchPitch=new or;this._add(\"touchPitch\",s);var l=new Xo(t),c=new Ho(t);e.dragRotate=new pr(t,l,c),this._add(\"mouseRotate\",l,[\"mousePitch\"]),this._add(\"mousePitch\",c,[\"mouseRotate\"]);var u=new Wo(t),h=new Ko(t);e.dragPan=new hr(i,u,h),this._add(\"mousePan\",u),this._add(\"touchPan\",h,[\"touchZoom\",\"touchRotate\"]);var p=new er,d=new $o;e.touchZoomRotate=new dr(i,d,p,n),this._add(\"touchRotate\",p,[\"touchPan\",\"touchZoom\"]),this._add(\"touchZoom\",d,[\"touchPan\",\"touchRotate\"]);var _=e.scrollZoom=new sr(e,this);this._add(\"scrollZoom\",_,[\"mousePan\"]);var f=e.keyboard=new ar;this._add(\"keyboard\",f),this._add(\"blockableMapEvent\",new Fo(e));for(var m=0,g=[\"boxZoom\",\"doubleClickZoom\",\"tapDragZoom\",\"touchPitch\",\"dragRotate\",\"dragPan\",\"touchZoomRotate\",\"scrollZoom\",\"keyboard\"];m<g.length;m+=1){var v=g[m];t.interactive&&t[v]&&e[v].enable(t[v]);}},gr.prototype._add=function(t,e,i){this._handlers.push({handlerName:t,handler:e,allowed:i}),this._handlersById[t]=e;},gr.prototype.stop=function(t){if(!this._updatingCamera){for(var e=0,i=this._handlers;e<i.length;e+=1)i[e].handler.reset();this._inertia.clear(),this._fireEvents({},{},t),this._changes=[];}},gr.prototype.isActive=function(){for(var t=0,e=this._handlers;t<e.length;t+=1)if(e[t].handler.isActive())return !0;return !1},gr.prototype.isZooming=function(){return !!this._eventsInProgress.zoom||this._map.scrollZoom.isZooming()},gr.prototype.isRotating=function(){return !!this._eventsInProgress.rotate},gr.prototype.isMoving=function(){return Boolean(_r(this._eventsInProgress))||this.isZooming()},gr.prototype._blockedByActive=function(t,e,i){for(var o in t)if(o!==i&&(!e||e.indexOf(o)<0))return !0;return !1},gr.prototype.handleWindowEvent=function(t){this.handleEvent(t,t.type+\"Window\");},gr.prototype._getMapTouches=function(t){for(var e=[],i=0,o=t;i<o.length;i+=1){var r=o[i];this._el.contains(r.target)&&e.push(r);}return e},gr.prototype.handleEvent=function(t,e){this._updatingCamera=!0;for(var o=\"renderFrame\"===t.type?void 0:t,r={needsRenderFrame:!1},a={},n={},s=t.touches?this._getMapTouches(t.touches):void 0,l=s?i.touchPos(this._el,s):i.mousePos(this._el,t),c=0,u=this._handlers;c<u.length;c+=1){var h=u[c],p=h.handlerName,d=h.handler,_=h.allowed;if(d.isEnabled()){var f=void 0;this._blockedByActive(n,_,p)?d.reset():d[e||t.type]&&(f=d[e||t.type](t,l,s),this.mergeHandlerResult(r,a,f,p,o),f&&f.needsRenderFrame&&this._triggerRenderFrame()),(f||d.isActive())&&(n[p]=d);}}var m={};for(var g in this._previousActiveHandlers)n[g]||(m[g]=o);this._previousActiveHandlers=n,(Object.keys(m).length||mr(r))&&(this._changes.push([r,a,m]),this._triggerRenderFrame()),(Object.keys(n).length||mr(r))&&this._map._stop(!0),this._updatingCamera=!1;var v=r.cameraAnimation;v&&(this._inertia.clear(),this._fireEvents({},{},!0),this._changes=[],v(this._map));},gr.prototype.mergeHandlerResult=function(e,i,o,r,a){if(o){t.extend(e,o);var n={handlerName:r,originalEvent:o.originalEvent||a};void 0!==o.zoomDelta&&(i.zoom=n),void 0!==o.panDelta&&(i.drag=n),void 0!==o.pitchDelta&&(i.pitch=n),void 0!==o.bearingDelta&&(i.rotate=n);}},gr.prototype._applyChanges=function(){for(var e={},i={},o={},r=0,a=this._changes;r<a.length;r+=1){var n=a[r],s=n[0],l=n[1],c=n[2];s.panDelta&&(e.panDelta=(e.panDelta||new t.Point(0,0))._add(s.panDelta)),s.zoomDelta&&(e.zoomDelta=(e.zoomDelta||0)+s.zoomDelta),s.bearingDelta&&(e.bearingDelta=(e.bearingDelta||0)+s.bearingDelta),s.pitchDelta&&(e.pitchDelta=(e.pitchDelta||0)+s.pitchDelta),void 0!==s.around&&(e.around=s.around),void 0!==s.pinchAround&&(e.pinchAround=s.pinchAround),s.noInertia&&(e.noInertia=s.noInertia),t.extend(i,l),t.extend(o,c);}this._updateMapTransform(e,i,o),this._changes=[];},gr.prototype._updateMapTransform=function(t,e,i){var o=this._map,r=o.transform;if(!mr(t))return this._fireEvents(e,i,!0);var a=t.panDelta,n=t.zoomDelta,s=t.bearingDelta,l=t.pitchDelta,c=t.around,u=t.pinchAround;void 0!==u&&(c=u),o._stop(!0),c=c||o.transform.centerPoint;var h=r.pointLocation(a?c.sub(a):c);s&&(r.bearing+=s),l&&(r.pitch+=l),n&&(r.zoom+=n),r.setLocationAtPoint(h,c),this._map._update(),t.noInertia||this._inertia.record(t),this._fireEvents(e,i,!0);},gr.prototype._fireEvents=function(e,i,o){var r=this,a=_r(this._eventsInProgress),n=_r(e),s={};for(var l in e)this._eventsInProgress[l]||(s[l+\"start\"]=e[l].originalEvent),this._eventsInProgress[l]=e[l];for(var c in !a&&n&&this._fireEvent(\"movestart\",n.originalEvent),s)this._fireEvent(c,s[c]);for(var u in n&&this._fireEvent(\"move\",n.originalEvent),e)this._fireEvent(u,e[u].originalEvent);var h,p={};for(var d in this._eventsInProgress){var _=this._eventsInProgress[d],f=_.handlerName,m=_.originalEvent;this._handlersById[f].isActive()||(delete this._eventsInProgress[d],p[d+\"end\"]=h=i[f]||m);}for(var g in p)this._fireEvent(g,p[g]);var v=_r(this._eventsInProgress);if(o&&(a||n)&&!v){this._updatingCamera=!0;var y=this._inertia._onMoveEnd(this._map.dragPan._inertiaOptions),x=function(t){return 0!==t&&-r._bearingSnap<t&&t<r._bearingSnap};y?(x(y.bearing||this._map.getBearing())&&(y.bearing=0),this._map.easeTo(y,{originalEvent:h})):(this._map.fire(new t.Event(\"moveend\",{originalEvent:h})),x(this._map.getBearing())&&this._map.resetNorth()),this._updatingCamera=!1;}},gr.prototype._fireEvent=function(e,i){this._map.fire(new t.Event(e,i?{originalEvent:i}:{}));},gr.prototype._requestFrame=function(){var t=this;return this._map.triggerRepaint(),this._map._renderTaskQueue.add((function(e){delete t._frameId,t.handleEvent(new fr(\"renderFrame\",{timeStamp:e})),t._applyChanges();}))},gr.prototype._triggerRenderFrame=function(){void 0===this._frameId&&(this._frameId=this._requestFrame());};var vr=function(e){function i(i,o){e.call(this),this._moving=!1,this._zooming=!1,this.transform=i,this._bearingSnap=o.bearingSnap,t.bindAll([\"_renderFrameCallback\"],this);}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},i.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},i.prototype.panBy=function(e,i,o){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},i),o)},i.prototype.panTo=function(e,i,o){return this.easeTo(t.extend({center:e},i),o)},i.prototype.getZoom=function(){return this.transform.zoom},i.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},i.prototype.zoomTo=function(e,i,o){return this.easeTo(t.extend({zoom:e},i),o)},i.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},i.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},i.prototype.getBearing=function(){return this.transform.bearing},i.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},i.prototype.getPadding=function(){return this.transform.padding},i.prototype.setPadding=function(t,e){return this.jumpTo({padding:t},e),this},i.prototype.rotateTo=function(e,i,o){return this.easeTo(t.extend({bearing:e},i),o)},i.prototype.resetNorth=function(e,i){return this.rotateTo(0,t.extend({duration:1e3},e),i),this},i.prototype.resetNorthPitch=function(e,i){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),i),this},i.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},i.prototype.getPitch=function(){return this.transform.pitch},i.prototype.setPitch=function(t,e){return this.jumpTo({pitch:t},e),this},i.prototype.cameraForBounds=function(e,i){e=t.LngLatBounds.convert(e);var o=i&&i.bearing||0;return this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),o,i)},i.prototype._cameraForBoxAndBearing=function(e,i,o,r){var a={top:0,bottom:0,right:0,left:0};if(\"number\"==typeof(r=t.extend({padding:a,offset:[0,0],maxZoom:this.transform.maxZoom},r)).padding){var n=r.padding;r.padding={top:n,bottom:n,right:n,left:n};}r.padding=t.extend(a,r.padding);var s=this.transform,l=s.padding,c=s.project(t.LngLat.convert(e)),u=s.project(t.LngLat.convert(i)),h=c.rotate(-o*Math.PI/180),p=u.rotate(-o*Math.PI/180),d=new t.Point(Math.max(h.x,p.x),Math.max(h.y,p.y)),_=new t.Point(Math.min(h.x,p.x),Math.min(h.y,p.y)),f=d.sub(_),m=(s.width-(l.left+l.right+r.padding.left+r.padding.right))/f.x,g=(s.height-(l.top+l.bottom+r.padding.top+r.padding.bottom))/f.y;if(!(g<0||m<0)){var v=Math.min(s.scaleZoom(s.scale*Math.min(m,g)),r.maxZoom),y=\"number\"==typeof r.offset.x?new t.Point(r.offset.x,r.offset.y):t.Point.convert(r.offset),x=new t.Point((r.padding.left-r.padding.right)/2,(r.padding.top-r.padding.bottom)/2).rotate(o*Math.PI/180),b=y.add(x).mult(s.scale/s.zoomScale(v));return {center:s.unproject(c.add(u).div(2).sub(b)),zoom:v,bearing:o}}t.warnOnce(\"Map cannot fit within canvas with the given bounds, padding, and/or offset.\");},i.prototype.fitBounds=function(t,e,i){return this._fitInternal(this.cameraForBounds(t,e),e,i)},i.prototype.fitScreenCoordinates=function(e,i,o,r,a){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(i)),o,r),r,a)},i.prototype._fitInternal=function(e,i,o){return e?(delete(i=t.extend(e,i)).padding,i.linear?this.easeTo(i,o):this.flyTo(i,o)):this},i.prototype.jumpTo=function(e,i){this.stop();var o=this.transform,r=!1,a=!1,n=!1;return \"zoom\"in e&&o.zoom!==+e.zoom&&(r=!0,o.zoom=+e.zoom),void 0!==e.center&&(o.center=t.LngLat.convert(e.center)),\"bearing\"in e&&o.bearing!==+e.bearing&&(a=!0,o.bearing=+e.bearing),\"pitch\"in e&&o.pitch!==+e.pitch&&(n=!0,o.pitch=+e.pitch),null==e.padding||o.isPaddingEqual(e.padding)||(o.padding=e.padding),this.fire(new t.Event(\"movestart\",i)).fire(new t.Event(\"move\",i)),r&&this.fire(new t.Event(\"zoomstart\",i)).fire(new t.Event(\"zoom\",i)).fire(new t.Event(\"zoomend\",i)),a&&this.fire(new t.Event(\"rotatestart\",i)).fire(new t.Event(\"rotate\",i)).fire(new t.Event(\"rotateend\",i)),n&&this.fire(new t.Event(\"pitchstart\",i)).fire(new t.Event(\"pitch\",i)).fire(new t.Event(\"pitchend\",i)),this.fire(new t.Event(\"moveend\",i))},i.prototype.easeTo=function(e,i){var o=this;this._stop(!1,e.easeId),(!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||!e.essential&&t.browser.prefersReducedMotion)&&(e.duration=0);var r=this.transform,a=this.getZoom(),n=this.getBearing(),s=this.getPitch(),l=this.getPadding(),c=\"zoom\"in e?+e.zoom:a,u=\"bearing\"in e?this._normalizeBearing(e.bearing,n):n,h=\"pitch\"in e?+e.pitch:s,p=\"padding\"in e?e.padding:r.padding,d=t.Point.convert(e.offset),_=r.centerPoint.add(d),f=r.pointLocation(_),m=t.LngLat.convert(e.center||f);this._normalizeCenter(m);var g,v,y=r.project(f),x=r.project(m).sub(y),b=r.zoomScale(c-a);e.around&&(g=t.LngLat.convert(e.around),v=r.locationPoint(g));var w={moving:this._moving,zooming:this._zooming,rotating:this._rotating,pitching:this._pitching};return this._zooming=this._zooming||c!==a,this._rotating=this._rotating||n!==u,this._pitching=this._pitching||h!==s,this._padding=!r.isPaddingEqual(p),this._easeId=e.easeId,this._prepareEase(i,e.noMoveStart,w),this._ease((function(e){if(o._zooming&&(r.zoom=t.number(a,c,e)),o._rotating&&(r.bearing=t.number(n,u,e)),o._pitching&&(r.pitch=t.number(s,h,e)),o._padding&&(r.interpolatePadding(l,p,e),_=r.centerPoint.add(d)),g)r.setLocationAtPoint(g,v);else {var f=r.zoomScale(r.zoom-a),m=c>a?Math.min(2,b):Math.max(.5,b),w=Math.pow(m,1-e),T=r.unproject(y.add(x.mult(e*w)).mult(f));r.setLocationAtPoint(r.renderWorldCopies?T.wrap():T,_);}o._fireMoveEvents(i);}),(function(t){o._afterEase(i,t);}),e),this},i.prototype._prepareEase=function(e,i,o){void 0===o&&(o={}),this._moving=!0,i||o.moving||this.fire(new t.Event(\"movestart\",e)),this._zooming&&!o.zooming&&this.fire(new t.Event(\"zoomstart\",e)),this._rotating&&!o.rotating&&this.fire(new t.Event(\"rotatestart\",e)),this._pitching&&!o.pitching&&this.fire(new t.Event(\"pitchstart\",e));},i.prototype._fireMoveEvents=function(e){this.fire(new t.Event(\"move\",e)),this._zooming&&this.fire(new t.Event(\"zoom\",e)),this._rotating&&this.fire(new t.Event(\"rotate\",e)),this._pitching&&this.fire(new t.Event(\"pitch\",e));},i.prototype._afterEase=function(e,i){if(!this._easeId||!i||this._easeId!==i){delete this._easeId;var o=this._zooming,r=this._rotating,a=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,this._padding=!1,o&&this.fire(new t.Event(\"zoomend\",e)),r&&this.fire(new t.Event(\"rotateend\",e)),a&&this.fire(new t.Event(\"pitchend\",e)),this.fire(new t.Event(\"moveend\",e));}},i.prototype.flyTo=function(e,i){var o=this;if(!e.essential&&t.browser.prefersReducedMotion){var r=t.pick(e,[\"center\",\"zoom\",\"bearing\",\"pitch\",\"around\"]);return this.jumpTo(r,i)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var a=this.transform,n=this.getZoom(),s=this.getBearing(),l=this.getPitch(),c=this.getPadding(),u=\"zoom\"in e?t.clamp(+e.zoom,a.minZoom,a.maxZoom):n,h=\"bearing\"in e?this._normalizeBearing(e.bearing,s):s,p=\"pitch\"in e?+e.pitch:l,d=\"padding\"in e?e.padding:a.padding,_=a.zoomScale(u-n),f=t.Point.convert(e.offset),m=a.centerPoint.add(f),g=a.pointLocation(m),v=t.LngLat.convert(e.center||g);this._normalizeCenter(v);var y=a.project(g),x=a.project(v).sub(y),b=e.curve,w=Math.max(a.width,a.height),T=w/_,E=x.mag();if(\"minZoom\"in e){var I=t.clamp(Math.min(e.minZoom,n,u),a.minZoom,a.maxZoom),P=w/a.zoomScale(I-n);b=Math.sqrt(P/E*2);}var S=b*b;function C(t){var e=(T*T-w*w+(t?-1:1)*S*S*E*E)/(2*(t?T:w)*S*E);return Math.log(Math.sqrt(e*e+1)-e)}function z(t){return (Math.exp(t)-Math.exp(-t))/2}function D(t){return (Math.exp(t)+Math.exp(-t))/2}var A=C(0),M=function(t){return D(A)/D(A+b*t)},L=function(t){return w*((D(A)*(z(e=A+b*t)/D(e))-z(A))/S)/E;var e;},R=(C(1)-A)/b;if(Math.abs(E)<1e-6||!isFinite(R)){if(Math.abs(w-T)<1e-6)return this.easeTo(e,i);var k=T<w?-1:1;R=Math.abs(Math.log(T/w))/b,L=function(){return 0},M=function(t){return Math.exp(k*b*t)};}return e.duration=\"duration\"in e?+e.duration:1e3*R/(\"screenSpeed\"in e?+e.screenSpeed/b:+e.speed),e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==h,this._pitching=p!==l,this._padding=!a.isPaddingEqual(d),this._prepareEase(i,!1),this._ease((function(e){var r=e*R,_=1/M(r);a.zoom=1===e?u:n+a.scaleZoom(_),o._rotating&&(a.bearing=t.number(s,h,e)),o._pitching&&(a.pitch=t.number(l,p,e)),o._padding&&(a.interpolatePadding(c,d,e),m=a.centerPoint.add(f));var g=1===e?v:a.unproject(y.add(x.mult(L(r))).mult(_));a.setLocationAtPoint(a.renderWorldCopies?g.wrap():g,m),o._fireMoveEvents(i);}),(function(){return o._afterEase(i)}),e),this},i.prototype.isEasing=function(){return !!this._easeFrameId},i.prototype.stop=function(){return this._stop()},i.prototype._stop=function(t,e){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var i=this._onEaseEnd;delete this._onEaseEnd,i.call(this,e);}if(!t){var o=this.handlers;o&&o.stop(!1);}return this},i.prototype._ease=function(e,i,o){!1===o.animate||0===o.duration?(e(1),i()):(this._easeStart=t.browser.now(),this._easeOptions=o,this._onEaseFrame=e,this._onEaseEnd=i,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback));},i.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop();},i.prototype._normalizeBearing=function(e,i){e=t.wrap(e,-180,180);var o=Math.abs(e-i);return Math.abs(e-360-i)<o&&(e-=360),Math.abs(e+360-i)<o&&(e+=360),e},i.prototype._normalizeCenter=function(t){var e=this.transform;if(e.renderWorldCopies&&!e.lngRange){var i=t.lng-e.center.lng;t.lng+=i>180?-360:i<-180?360:0;}},i}(t.Evented),yr=function(e){void 0===e&&(e={}),this.options=e,t.bindAll([\"_toggleAttribution\",\"_updateEditLink\",\"_updateData\",\"_updateCompact\"],this);};yr.prototype.getDefaultPosition=function(){return \"bottom-right\"},yr.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-attrib\"),this._compactButton=i.create(\"button\",\"mapboxgl-ctrl-attrib-button\",this._container),this._compactButton.addEventListener(\"click\",this._toggleAttribution),this._setElementTitle(this._compactButton,\"ToggleAttribution\"),this._innerContainer=i.create(\"div\",\"mapboxgl-ctrl-attrib-inner\",this._container),this._innerContainer.setAttribute(\"role\",\"list\"),e&&this._container.classList.add(\"mapboxgl-compact\"),this._updateAttributions(),this._updateEditLink(),this._map.on(\"styledata\",this._updateData),this._map.on(\"sourcedata\",this._updateData),this._map.on(\"moveend\",this._updateEditLink),void 0===e&&(this._map.on(\"resize\",this._updateCompact),this._updateCompact()),this._container},yr.prototype.onRemove=function(){i.remove(this._container),this._map.off(\"styledata\",this._updateData),this._map.off(\"sourcedata\",this._updateData),this._map.off(\"moveend\",this._updateEditLink),this._map.off(\"resize\",this._updateCompact),this._map=void 0,this._attribHTML=void 0;},yr.prototype._setElementTitle=function(t,e){var i=this._map._getUIString(\"AttributionControl.\"+e);t.title=i,t.setAttribute(\"aria-label\",i);},yr.prototype._toggleAttribution=function(){this._container.classList.contains(\"mapboxgl-compact-show\")?(this._container.classList.remove(\"mapboxgl-compact-show\"),this._compactButton.setAttribute(\"aria-pressed\",\"false\")):(this._container.classList.add(\"mapboxgl-compact-show\"),this._compactButton.setAttribute(\"aria-pressed\",\"true\"));},yr.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(\".mapbox-improve-map\"));var i=[{key:\"owner\",value:this.styleOwner},{key:\"id\",value:this.styleId},{key:\"access_token\",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var o=i.reduce((function(t,e,o){return e.value&&(t+=e.key+\"=\"+e.value+(o<i.length-1?\"&\":\"\")),t}),\"?\");e.href=t.config.FEEDBACK_URL+\"/\"+o+(this._map._hash?this._map._hash.getHashString(!0):\"\"),e.rel=\"noopener nofollow\",this._setElementTitle(e,\"MapFeedback\");}},yr.prototype._updateData=function(t){!t||\"metadata\"!==t.sourceDataType&&\"visibility\"!==t.sourceDataType&&\"style\"!==t.dataType||(this._updateAttributions(),this._updateEditLink());},yr.prototype._updateAttributions=function(){if(this._map.style){var t=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?t=t.concat(this.options.customAttribution.map((function(t){return \"string\"!=typeof t?\"\":t}))):\"string\"==typeof this.options.customAttribution&&t.push(this.options.customAttribution)),this._map.style.stylesheet){var e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id;}var i=this._map.style.sourceCaches;for(var o in i){var r=i[o];if(r.used){var a=r.getSource();a.attribution&&t.indexOf(a.attribution)<0&&t.push(a.attribution);}}t.sort((function(t,e){return t.length-e.length}));var n=(t=t.filter((function(e,i){for(var o=i+1;o<t.length;o++)if(t[o].indexOf(e)>=0)return !1;return !0}))).join(\" | \");n!==this._attribHTML&&(this._attribHTML=n,t.length?(this._innerContainer.innerHTML=n,this._container.classList.remove(\"mapboxgl-attrib-empty\")):this._container.classList.add(\"mapboxgl-attrib-empty\"),this._editLink=null);}},yr.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add(\"mapboxgl-compact\"):this._container.classList.remove(\"mapboxgl-compact\",\"mapboxgl-compact-show\");};var xr=function(){t.bindAll([\"_updateLogo\"],this),t.bindAll([\"_updateCompact\"],this);};xr.prototype.onAdd=function(t){this._map=t,this._container=i.create(\"div\",\"mapboxgl-ctrl\");var e=i.create(\"a\",\"mapboxgl-ctrl-logo\");return e.target=\"_blank\",e.rel=\"noopener nofollow\",e.href=\"https://www.mapbox.com/\",e.setAttribute(\"aria-label\",this._map._getUIString(\"LogoControl.Title\")),e.setAttribute(\"rel\",\"noopener nofollow\"),this._container.appendChild(e),this._container.style.display=\"none\",this._map.on(\"sourcedata\",this._updateLogo),this._updateLogo(),this._map.on(\"resize\",this._updateCompact),this._updateCompact(),this._container},xr.prototype.onRemove=function(){i.remove(this._container),this._map.off(\"sourcedata\",this._updateLogo),this._map.off(\"resize\",this._updateCompact);},xr.prototype.getDefaultPosition=function(){return \"bottom-left\"},xr.prototype._updateLogo=function(t){t&&\"metadata\"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?\"block\":\"none\");},xr.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return !0;return !1}},xr.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add(\"mapboxgl-compact\"):e.classList.remove(\"mapboxgl-compact\");}};var br=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1;};br.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},br.prototype.remove=function(t){for(var e=this._currentlyRunning,i=0,o=e?this._queue.concat(e):this._queue;i<o.length;i+=1){var r=o[i];if(r.id===t)return void(r.cancelled=!0)}},br.prototype.run=function(t){void 0===t&&(t=0);var e=this._currentlyRunning=this._queue;this._queue=[];for(var i=0,o=e;i<o.length;i+=1){var r=o[i];if(!r.cancelled&&(r.callback(t),this._cleared))break}this._cleared=!1,this._currentlyRunning=!1;},br.prototype.clear=function(){this._currentlyRunning&&(this._cleared=!0),this._queue=[];};var wr={\"AttributionControl.ToggleAttribution\":\"Toggle attribution\",\"AttributionControl.MapFeedback\":\"Map feedback\",\"FullscreenControl.Enter\":\"Enter fullscreen\",\"FullscreenControl.Exit\":\"Exit fullscreen\",\"GeolocateControl.FindMyLocation\":\"Find my location\",\"GeolocateControl.LocationNotAvailable\":\"Location not available\",\"LogoControl.Title\":\"Mapbox logo\",\"NavigationControl.ResetBearing\":\"Reset bearing to north\",\"NavigationControl.ZoomIn\":\"Zoom in\",\"NavigationControl.ZoomOut\":\"Zoom out\",\"ScaleControl.Feet\":\"ft\",\"ScaleControl.Meters\":\"m\",\"ScaleControl.Kilometers\":\"km\",\"ScaleControl.Miles\":\"mi\",\"ScaleControl.NauticalMiles\":\"nm\"},Tr=t.window.HTMLImageElement,Er=t.window.HTMLElement,Ir=t.window.ImageBitmap,Pr={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:-2,maxZoom:22,minPitch:0,maxPitch:60,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,touchPitch:!0,bearingSnap:7,clickTolerance:3,pitchWithRotate:!0,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,localIdeographFontFamily:\"sans-serif\",transformRequest:null,accessToken:null,fadeDuration:300,crossSourceCollisions:!0},Sr=function(o){function r(e){var i=this;if(null!=(e=t.extend({},Pr,e)).minZoom&&null!=e.maxZoom&&e.minZoom>e.maxZoom)throw new Error(\"maxZoom must be greater than or equal to minZoom\");if(null!=e.minPitch&&null!=e.maxPitch&&e.minPitch>e.maxPitch)throw new Error(\"maxPitch must be greater than or equal to minPitch\");if(null!=e.minPitch&&e.minPitch<0)throw new Error(\"minPitch must be greater than or equal to 0\");if(null!=e.maxPitch&&e.maxPitch>60)throw new Error(\"maxPitch must be less than or equal to 60\");var r=new To(e.minZoom,e.maxZoom,e.minPitch,e.maxPitch,e.renderWorldCopies);if(o.call(this,r,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new br,this._controls=[],this._mapId=t.uniqueId(),this._locale=t.extend({},wr,e.locale),this._clickTolerance=e.clickTolerance,this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),\"string\"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error(\"Container '\"+e.container+\"' not found.\")}else {if(!(e.container instanceof Er))throw new Error(\"Invalid type: 'container' must be a String or HTMLElement.\");this._container=e.container;}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll([\"_onWindowOnline\",\"_onWindowResize\",\"_onMapScroll\",\"_contextLost\",\"_contextRestored\"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error(\"Failed to initialize WebGL.\");this.on(\"move\",(function(){return i._update(!1)})),this.on(\"moveend\",(function(){return i._update(!1)})),this.on(\"zoom\",(function(){return i._update(!0)})),void 0!==t.window&&(t.window.addEventListener(\"online\",this._onWindowOnline,!1),t.window.addEventListener(\"resize\",this._onWindowResize,!1),t.window.addEventListener(\"orientationchange\",this._onWindowResize,!1)),this.handlers=new gr(this,e),this._hash=e.hash&&new Io(\"string\"==typeof e.hash&&e.hash||void 0).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily=e.localIdeographFontFamily,e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new yr({customAttribution:e.customAttribution})),this.addControl(new xr,e.logoPosition),this.on(\"style.load\",(function(){i.transform.unmodified&&i.jumpTo(i.style.stylesheet);})),this.on(\"data\",(function(e){i._update(\"style\"===e.dataType),i.fire(new t.Event(e.dataType+\"data\",e));})),this.on(\"dataloading\",(function(e){i.fire(new t.Event(e.dataType+\"dataloading\",e));}));}o&&(r.__proto__=o),(r.prototype=Object.create(o&&o.prototype)).constructor=r;var a={showTileBoundaries:{configurable:!0},showPadding:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0},version:{configurable:!0}};return r.prototype._getMapId=function(){return this._mapId},r.prototype.addControl=function(e,i){if(void 0===i&&(i=e.getDefaultPosition?e.getDefaultPosition():\"top-right\"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.\")));var o=e.onAdd(this);this._controls.push(e);var r=this._controlPositions[i];return -1!==i.indexOf(\"bottom\")?r.insertBefore(o,r.firstChild):r.appendChild(o),this},r.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.\")));var i=this._controls.indexOf(e);return i>-1&&this._controls.splice(i,1),e.onRemove(this),this},r.prototype.hasControl=function(t){return this._controls.indexOf(t)>-1},r.prototype.resize=function(e){var i=this._containerDimensions(),o=i[0],r=i[1];if(o===this.transform.width&&r===this.transform.height)return this;this._resizeCanvas(o,r),this.transform.resize(o,r),this.painter.resize(o,r);var a=!this._moving;return a&&this.fire(new t.Event(\"movestart\",e)).fire(new t.Event(\"move\",e)),this.fire(new t.Event(\"resize\",e)),a&&this.fire(new t.Event(\"moveend\",e)),this},r.prototype.getBounds=function(){return this.transform.getBounds()},r.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},r.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},r.prototype.setMinZoom=function(t){if((t=null==t?-2:t)>=-2&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error(\"minZoom must be between -2 and the current maxZoom, inclusive\")},r.prototype.getMinZoom=function(){return this.transform.minZoom},r.prototype.setMaxZoom=function(t){if((t=null==t?22:t)>=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error(\"maxZoom must be greater than the current minZoom\")},r.prototype.getMaxZoom=function(){return this.transform.maxZoom},r.prototype.setMinPitch=function(t){if((t=null==t?0:t)<0)throw new Error(\"minPitch must be greater than or equal to 0\");if(t>=0&&t<=this.transform.maxPitch)return this.transform.minPitch=t,this._update(),this.getPitch()<t&&this.setPitch(t),this;throw new Error(\"minPitch must be between 0 and the current maxPitch, inclusive\")},r.prototype.getMinPitch=function(){return this.transform.minPitch},r.prototype.setMaxPitch=function(t){if((t=null==t?60:t)>60)throw new Error(\"maxPitch must be less than or equal to 60\");if(t>=this.transform.minPitch)return this.transform.maxPitch=t,this._update(),this.getPitch()>t&&this.setPitch(t),this;throw new Error(\"maxPitch must be greater than the current minPitch\")},r.prototype.getMaxPitch=function(){return this.transform.maxPitch},r.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},r.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},r.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},r.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},r.prototype.isMoving=function(){return this._moving||this.handlers.isMoving()},r.prototype.isZooming=function(){return this._zooming||this.handlers.isZooming()},r.prototype.isRotating=function(){return this._rotating||this.handlers.isRotating()},r.prototype._createDelegatedListener=function(t,e,i){var o,r=this;if(\"mouseenter\"===t||\"mouseover\"===t){var a=!1;return {layer:e,listener:i,delegates:{mousemove:function(o){var n=r.getLayer(e)?r.queryRenderedFeatures(o.point,{layers:[e]}):[];n.length?a||(a=!0,i.call(r,new Ro(t,r,o.originalEvent,{features:n}))):a=!1;},mouseout:function(){a=!1;}}}}if(\"mouseleave\"===t||\"mouseout\"===t){var n=!1;return {layer:e,listener:i,delegates:{mousemove:function(o){(r.getLayer(e)?r.queryRenderedFeatures(o.point,{layers:[e]}):[]).length?n=!0:n&&(n=!1,i.call(r,new Ro(t,r,o.originalEvent)));},mouseout:function(e){n&&(n=!1,i.call(r,new Ro(t,r,e.originalEvent)));}}}}return {layer:e,listener:i,delegates:(o={},o[t]=function(t){var o=r.getLayer(e)?r.queryRenderedFeatures(t.point,{layers:[e]}):[];o.length&&(t.features=o,i.call(r,t),delete t.features);},o)}},r.prototype.on=function(t,e,i){if(void 0===i)return o.prototype.on.call(this,t,e);var r=this._createDelegatedListener(t,e,i);for(var a in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(r),r.delegates)this.on(a,r.delegates[a]);return this},r.prototype.once=function(t,e,i){if(void 0===i)return o.prototype.once.call(this,t,e);var r=this._createDelegatedListener(t,e,i);for(var a in r.delegates)this.once(a,r.delegates[a]);return this},r.prototype.off=function(t,e,i){var r=this;return void 0===i?o.prototype.off.call(this,t,e):(this._delegatedListeners&&this._delegatedListeners[t]&&function(o){for(var a=o[t],n=0;n<a.length;n++){var s=a[n];if(s.layer===e&&s.listener===i){for(var l in s.delegates)r.off(l,s.delegates[l]);return a.splice(n,1),r}}}(this._delegatedListeners),this)},r.prototype.queryRenderedFeatures=function(e,i){if(!this.style)return [];var o;if(void 0!==i||void 0===e||e instanceof t.Point||Array.isArray(e)||(i=e,e=void 0),i=i||{},(e=e||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||\"number\"==typeof e[0])o=[t.Point.convert(e)];else {var r=t.Point.convert(e[0]),a=t.Point.convert(e[1]);o=[r,new t.Point(a.x,r.y),a,new t.Point(r.x,a.y),r];}return this.style.queryRenderedFeatures(o,i,this.transform)},r.prototype.querySourceFeatures=function(t,e){return this.style.querySourceFeatures(t,e)},r.prototype.setStyle=function(e,i){return !1!==(i=t.extend({},{localIdeographFontFamily:this._localIdeographFontFamily},i)).diff&&i.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,i),this):(this._localIdeographFontFamily=i.localIdeographFontFamily,this._updateStyle(e,i))},r.prototype._getUIString=function(t){var e=this._locale[t];if(null==e)throw new Error(\"Missing UI string '\"+t+\"'\");return e},r.prototype._updateStyle=function(t,e){return this.style&&(this.style.setEventedParent(null),this.style._remove()),t?(this.style=new je(this,e||{}),this.style.setEventedParent(this,{style:this.style}),\"string\"==typeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},r.prototype._lazyInitEmptyStyle=function(){this.style||(this.style=new je(this,{}),this.style.setEventedParent(this,{style:this.style}),this.style.loadEmpty());},r.prototype._diffStyle=function(e,i){var o=this;if(\"string\"==typeof e){var r=this._requestManager.normalizeStyleURL(e),a=this._requestManager.transformRequest(r,t.ResourceType.Style);t.getJSON(a,(function(e,r){e?o.fire(new t.ErrorEvent(e)):r&&o._updateDiff(r,i);}));}else \"object\"==typeof e&&this._updateDiff(e,i);},r.prototype._updateDiff=function(e,i){try{this.style.setState(e)&&this._update(!0);}catch(o){t.warnOnce(\"Unable to perform style diff: \"+(o.message||o.error||o)+\".  Rebuilding the style from scratch.\"),this._updateStyle(e,i);}},r.prototype.getStyle=function(){if(this.style)return this.style.serialize()},r.prototype.isStyleLoaded=function(){return this.style?this.style.loaded():t.warnOnce(\"There is no style added to the map.\")},r.prototype.addSource=function(t,e){return this._lazyInitEmptyStyle(),this.style.addSource(t,e),this._update(!0)},r.prototype.isSourceLoaded=function(e){var i=this.style&&this.style.sourceCaches[e];if(void 0!==i)return i.loaded();this.fire(new t.ErrorEvent(new Error(\"There is no source with ID '\"+e+\"'\")));},r.prototype.areTilesLoaded=function(){var t=this.style&&this.style.sourceCaches;for(var e in t){var i=t[e]._tiles;for(var o in i){var r=i[o];if(\"loaded\"!==r.state&&\"errored\"!==r.state)return !1}}return !0},r.prototype.addSourceType=function(t,e,i){return this._lazyInitEmptyStyle(),this.style.addSourceType(t,e,i)},r.prototype.removeSource=function(t){return this.style.removeSource(t),this._update(!0)},r.prototype.getSource=function(t){return this.style.getSource(t)},r.prototype.addImage=function(e,i,o){void 0===o&&(o={});var r=o.pixelRatio;void 0===r&&(r=1);var a=o.sdf;void 0===a&&(a=!1);var n=o.stretchX,s=o.stretchY,l=o.content;if(this._lazyInitEmptyStyle(),i instanceof Tr||Ir&&i instanceof Ir){var c=t.browser.getImageData(i);this.style.addImage(e,{data:new t.RGBAImage({width:c.width,height:c.height},c.data),pixelRatio:r,stretchX:n,stretchY:s,content:l,sdf:a,version:0});}else {if(void 0===i.width||void 0===i.height)return this.fire(new t.ErrorEvent(new Error(\"Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\")));var u=i;this.style.addImage(e,{data:new t.RGBAImage({width:i.width,height:i.height},new Uint8Array(i.data)),pixelRatio:r,stretchX:n,stretchY:s,content:l,sdf:a,version:0,userImage:u}),u.onAdd&&u.onAdd(this,e);}},r.prototype.updateImage=function(e,i){var o=this.style.getImage(e);if(!o)return this.fire(new t.ErrorEvent(new Error(\"The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.\")));var r=i instanceof Tr||Ir&&i instanceof Ir?t.browser.getImageData(i):i,a=r.width,n=r.height,s=r.data;return void 0===a||void 0===n?this.fire(new t.ErrorEvent(new Error(\"Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\"))):a!==o.data.width||n!==o.data.height?this.fire(new t.ErrorEvent(new Error(\"The width and height of the updated image must be that same as the previous version of the image\"))):(o.data.replace(s,!(i instanceof Tr||Ir&&i instanceof Ir)),void this.style.updateImage(e,o))},r.prototype.hasImage=function(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error(\"Missing required image id\"))),!1)},r.prototype.removeImage=function(t){this.style.removeImage(t);},r.prototype.loadImage=function(e,i){t.getImage(this._requestManager.transformRequest(e,t.ResourceType.Image),i);},r.prototype.listImages=function(){return this.style.listImages()},r.prototype.addLayer=function(t,e){return this._lazyInitEmptyStyle(),this.style.addLayer(t,e),this._update(!0)},r.prototype.moveLayer=function(t,e){return this.style.moveLayer(t,e),this._update(!0)},r.prototype.removeLayer=function(t){return this.style.removeLayer(t),this._update(!0)},r.prototype.getLayer=function(t){return this.style.getLayer(t)},r.prototype.setLayerZoomRange=function(t,e,i){return this.style.setLayerZoomRange(t,e,i),this._update(!0)},r.prototype.setFilter=function(t,e,i){return void 0===i&&(i={}),this.style.setFilter(t,e,i),this._update(!0)},r.prototype.getFilter=function(t){return this.style.getFilter(t)},r.prototype.setPaintProperty=function(t,e,i,o){return void 0===o&&(o={}),this.style.setPaintProperty(t,e,i,o),this._update(!0)},r.prototype.getPaintProperty=function(t,e){return this.style.getPaintProperty(t,e)},r.prototype.setLayoutProperty=function(t,e,i,o){return void 0===o&&(o={}),this.style.setLayoutProperty(t,e,i,o),this._update(!0)},r.prototype.getLayoutProperty=function(t,e){return this.style.getLayoutProperty(t,e)},r.prototype.setLight=function(t,e){return void 0===e&&(e={}),this._lazyInitEmptyStyle(),this.style.setLight(t,e),this._update(!0)},r.prototype.getLight=function(){return this.style.getLight()},r.prototype.setFeatureState=function(t,e){return this.style.setFeatureState(t,e),this._update()},r.prototype.removeFeatureState=function(t,e){return this.style.removeFeatureState(t,e),this._update()},r.prototype.getFeatureState=function(t){return this.style.getFeatureState(t)},r.prototype.getContainer=function(){return this._container},r.prototype.getCanvasContainer=function(){return this._canvasContainer},r.prototype.getCanvas=function(){return this._canvas},r.prototype._containerDimensions=function(){var t=0,e=0;return this._container&&(t=this._container.clientWidth||400,e=this._container.clientHeight||300),[t,e]},r.prototype._detectMissingCSS=function(){\"rgb(250, 128, 114)\"!==t.window.getComputedStyle(this._missingCSSCanary).getPropertyValue(\"background-color\")&&t.warnOnce(\"This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.\");},r.prototype._setupContainer=function(){var t=this._container;t.classList.add(\"mapboxgl-map\"),(this._missingCSSCanary=i.create(\"div\",\"mapboxgl-canary\",t)).style.visibility=\"hidden\",this._detectMissingCSS();var e=this._canvasContainer=i.create(\"div\",\"mapboxgl-canvas-container\",t);this._interactive&&e.classList.add(\"mapboxgl-interactive\"),this._canvas=i.create(\"canvas\",\"mapboxgl-canvas\",e),this._canvas.addEventListener(\"webglcontextlost\",this._contextLost,!1),this._canvas.addEventListener(\"webglcontextrestored\",this._contextRestored,!1),this._canvas.setAttribute(\"tabindex\",\"0\"),this._canvas.setAttribute(\"aria-label\",\"Map\"),this._canvas.setAttribute(\"role\",\"region\");var o=this._containerDimensions();this._resizeCanvas(o[0],o[1]);var r=this._controlContainer=i.create(\"div\",\"mapboxgl-control-container\",t),a=this._controlPositions={};[\"top-left\",\"top-right\",\"bottom-left\",\"bottom-right\"].forEach((function(t){a[t]=i.create(\"div\",\"mapboxgl-ctrl-\"+t,r);})),this._container.addEventListener(\"scroll\",this._onMapScroll,!1);},r.prototype._resizeCanvas=function(e,i){var o=t.browser.devicePixelRatio||1;this._canvas.width=o*e,this._canvas.height=o*i,this._canvas.style.width=e+\"px\",this._canvas.style.height=i+\"px\";},r.prototype._setupPainter=function(){var i=t.extend({},e.webGLContextAttributes,{failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer,antialias:this._antialias||!1}),o=this._canvas.getContext(\"webgl\",i)||this._canvas.getContext(\"experimental-webgl\",i);o?(this.painter=new yo(o,this.transform),t.webpSupported.testSupport(o)):this.fire(new t.ErrorEvent(new Error(\"Failed to initialize WebGL\")));},r.prototype._contextLost=function(e){e.preventDefault(),this._frame&&(this._frame.cancel(),this._frame=null),this.fire(new t.Event(\"webglcontextlost\",{originalEvent:e}));},r.prototype._contextRestored=function(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event(\"webglcontextrestored\",{originalEvent:e}));},r.prototype._onMapScroll=function(t){if(t.target===this._container)return this._container.scrollTop=0,this._container.scrollLeft=0,!1},r.prototype.loaded=function(){return !this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()},r.prototype._update=function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this.triggerRepaint(),this):this},r.prototype._requestRenderFrame=function(t){return this._update(),this._renderTaskQueue.add(t)},r.prototype._cancelRenderFrame=function(t){this._renderTaskQueue.remove(t);},r.prototype._render=function(e){var i,o=this,r=0,a=this.painter.context.extTimerQuery;if(this.listens(\"gpu-timing-frame\")&&(i=a.createQueryEXT(),a.beginQueryEXT(a.TIME_ELAPSED_EXT,i),r=t.browser.now()),this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run(e),!this._removed){var n=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;var s=this.transform.zoom,l=t.browser.now();this.style.zoomHistory.update(s,l);var c=new t.EvaluationParameters(s,{now:l,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),u=c.crossFadingFactor();1===u&&u===this._crossFadingFactor||(n=!0,this._crossFadingFactor=u),this.style.update(c);}if(this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this._placementDirty=this.style&&this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration,showPadding:this.showPadding,gpuTiming:!!this.listens(\"gpu-timing-layer\")}),this.fire(new t.Event(\"render\")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new t.Event(\"load\"))),this.style&&(this.style.hasTransitions()||n)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles(),this.listens(\"gpu-timing-frame\")){var h=t.browser.now()-r;a.endQueryEXT(a.TIME_ELAPSED_EXT,i),setTimeout((function(){var e=a.getQueryObjectEXT(i,a.QUERY_RESULT_EXT)/1e6;a.deleteQueryEXT(i),o.fire(new t.Event(\"gpu-timing-frame\",{cpuTime:h,gpuTime:e}));}),50);}if(this.listens(\"gpu-timing-layer\")){var p=this.painter.collectGpuTimers();setTimeout((function(){var e=o.painter.queryGpuTimers(p);o.fire(new t.Event(\"gpu-timing-layer\",{layerTimes:e}));}),50);}var d=this._sourcesDirty||this._styleDirty||this._placementDirty;return d||this._repaint?this.triggerRepaint():!this.isMoving()&&this.loaded()&&this.fire(new t.Event(\"idle\")),!this._loaded||this._fullyLoaded||d||(this._fullyLoaded=!0),this}},r.prototype.remove=function(){this._hash&&this._hash.remove();for(var e=0,i=this._controls;e<i.length;e+=1)i[e].onRemove(this);this._controls=[],this._frame&&(this._frame.cancel(),this._frame=null),this._renderTaskQueue.clear(),this.painter.destroy(),this.handlers.destroy(),delete this.handlers,this.setStyle(null),void 0!==t.window&&(t.window.removeEventListener(\"resize\",this._onWindowResize,!1),t.window.removeEventListener(\"orientationchange\",this._onWindowResize,!1),t.window.removeEventListener(\"online\",this._onWindowOnline,!1));var o=this.painter.context.gl.getExtension(\"WEBGL_lose_context\");o&&o.loseContext(),Cr(this._canvasContainer),Cr(this._controlContainer),Cr(this._missingCSSCanary),this._container.classList.remove(\"mapboxgl-map\"),this._removed=!0,this.fire(new t.Event(\"remove\"));},r.prototype.triggerRepaint=function(){var e=this;this.style&&!this._frame&&(this._frame=t.browser.frame((function(t){e._frame=null,e._render(t);})));},r.prototype._onWindowOnline=function(){this._update();},r.prototype._onWindowResize=function(t){this._trackResize&&this.resize({originalEvent:t})._update();},a.showTileBoundaries.get=function(){return !!this._showTileBoundaries},a.showTileBoundaries.set=function(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update());},a.showPadding.get=function(){return !!this._showPadding},a.showPadding.set=function(t){this._showPadding!==t&&(this._showPadding=t,this._update());},a.showCollisionBoxes.get=function(){return !!this._showCollisionBoxes},a.showCollisionBoxes.set=function(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,t?this.style._generateCollisionBoxes():this._update());},a.showOverdrawInspector.get=function(){return !!this._showOverdrawInspector},a.showOverdrawInspector.set=function(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update());},a.repaint.get=function(){return !!this._repaint},a.repaint.set=function(t){this._repaint!==t&&(this._repaint=t,this.triggerRepaint());},a.vertices.get=function(){return !!this._vertices},a.vertices.set=function(t){this._vertices=t,this._update();},r.prototype._setCacheLimits=function(e,i){t.setCacheLimits(e,i);},a.version.get=function(){return t.version},Object.defineProperties(r.prototype,a),r}(vr);function Cr(t){t.parentNode&&t.parentNode.removeChild(t);}var zr={showCompass:!0,showZoom:!0,visualizePitch:!1},Dr=function(e){var o=this;this.options=t.extend({},zr,e),this._container=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this.options.showZoom&&(t.bindAll([\"_setButtonTitle\",\"_updateZoomButtons\"],this),this._zoomInButton=this._createButton(\"mapboxgl-ctrl-zoom-in\",(function(t){return o._map.zoomIn({},{originalEvent:t})})),i.create(\"span\",\"mapboxgl-ctrl-icon\",this._zoomInButton).setAttribute(\"aria-hidden\",!0),this._zoomOutButton=this._createButton(\"mapboxgl-ctrl-zoom-out\",(function(t){return o._map.zoomOut({},{originalEvent:t})})),i.create(\"span\",\"mapboxgl-ctrl-icon\",this._zoomOutButton).setAttribute(\"aria-hidden\",!0)),this.options.showCompass&&(t.bindAll([\"_rotateCompassArrow\"],this),this._compass=this._createButton(\"mapboxgl-ctrl-compass\",(function(t){o.options.visualizePitch?o._map.resetNorthPitch({},{originalEvent:t}):o._map.resetNorth({},{originalEvent:t});})),this._compassIcon=i.create(\"span\",\"mapboxgl-ctrl-icon\",this._compass),this._compassIcon.setAttribute(\"aria-hidden\",!0));};Dr.prototype._updateZoomButtons=function(){var t=this._map.getZoom(),e=t===this._map.getMaxZoom(),i=t===this._map.getMinZoom();this._zoomInButton.disabled=e,this._zoomOutButton.disabled=i,this._zoomInButton.setAttribute(\"aria-disabled\",e.toString()),this._zoomOutButton.setAttribute(\"aria-disabled\",i.toString());},Dr.prototype._rotateCompassArrow=function(){var t=this.options.visualizePitch?\"scale(\"+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+\") rotateX(\"+this._map.transform.pitch+\"deg) rotateZ(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\":\"rotate(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\";this._compassIcon.style.transform=t;},Dr.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._setButtonTitle(this._zoomInButton,\"ZoomIn\"),this._setButtonTitle(this._zoomOutButton,\"ZoomOut\"),this._map.on(\"zoom\",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this._setButtonTitle(this._compass,\"ResetBearing\"),this.options.visualizePitch&&this._map.on(\"pitch\",this._rotateCompassArrow),this._map.on(\"rotate\",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new Ar(this._map,this._compass,this.options.visualizePitch)),this._container},Dr.prototype.onRemove=function(){i.remove(this._container),this.options.showZoom&&this._map.off(\"zoom\",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off(\"pitch\",this._rotateCompassArrow),this._map.off(\"rotate\",this._rotateCompassArrow),this._handler.off(),delete this._handler),delete this._map;},Dr.prototype._createButton=function(t,e){var o=i.create(\"button\",t,this._container);return o.type=\"button\",o.addEventListener(\"click\",e),o},Dr.prototype._setButtonTitle=function(t,e){var i=this._map._getUIString(\"NavigationControl.\"+e);t.title=i,t.setAttribute(\"aria-label\",i);};var Ar=function(e,o,r){void 0===r&&(r=!1),this._clickTolerance=10,this.element=o,this.mouseRotate=new Xo({clickTolerance:e.dragRotate._mouseRotate._clickTolerance}),this.map=e,r&&(this.mousePitch=new Ho({clickTolerance:e.dragRotate._mousePitch._clickTolerance})),t.bindAll([\"mousedown\",\"mousemove\",\"mouseup\",\"touchstart\",\"touchmove\",\"touchend\",\"reset\"],this),i.addEventListener(o,\"mousedown\",this.mousedown),i.addEventListener(o,\"touchstart\",this.touchstart,{passive:!1}),i.addEventListener(o,\"touchmove\",this.touchmove),i.addEventListener(o,\"touchend\",this.touchend),i.addEventListener(o,\"touchcancel\",this.reset);};function Mr(e,i,o){if(e=new t.LngLat(e.lng,e.lat),i){var r=new t.LngLat(e.lng-360,e.lat),a=new t.LngLat(e.lng+360,e.lat),n=o.locationPoint(e).distSqr(i);o.locationPoint(r).distSqr(i)<n?e=r:o.locationPoint(a).distSqr(i)<n&&(e=a);}for(;Math.abs(e.lng-o.center.lng)>180;){var s=o.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=o.width&&s.y<=o.height)break;e.lng>o.center.lng?e.lng-=360:e.lng+=360;}return e}Ar.prototype.down=function(t,e){this.mouseRotate.mousedown(t,e),this.mousePitch&&this.mousePitch.mousedown(t,e),i.disableDrag();},Ar.prototype.move=function(t,e){var i=this.map,o=this.mouseRotate.mousemoveWindow(t,e);if(o&&o.bearingDelta&&i.setBearing(i.getBearing()+o.bearingDelta),this.mousePitch){var r=this.mousePitch.mousemoveWindow(t,e);r&&r.pitchDelta&&i.setPitch(i.getPitch()+r.pitchDelta);}},Ar.prototype.off=function(){var t=this.element;i.removeEventListener(t,\"mousedown\",this.mousedown),i.removeEventListener(t,\"touchstart\",this.touchstart,{passive:!1}),i.removeEventListener(t,\"touchmove\",this.touchmove),i.removeEventListener(t,\"touchend\",this.touchend),i.removeEventListener(t,\"touchcancel\",this.reset),this.offTemp();},Ar.prototype.offTemp=function(){i.enableDrag(),i.removeEventListener(t.window,\"mousemove\",this.mousemove),i.removeEventListener(t.window,\"mouseup\",this.mouseup);},Ar.prototype.mousedown=function(e){this.down(t.extend({},e,{ctrlKey:!0,preventDefault:function(){return e.preventDefault()}}),i.mousePos(this.element,e)),i.addEventListener(t.window,\"mousemove\",this.mousemove),i.addEventListener(t.window,\"mouseup\",this.mouseup);},Ar.prototype.mousemove=function(t){this.move(t,i.mousePos(this.element,t));},Ar.prototype.mouseup=function(t){this.mouseRotate.mouseupWindow(t),this.mousePitch&&this.mousePitch.mouseupWindow(t),this.offTemp();},Ar.prototype.touchstart=function(t){1!==t.targetTouches.length?this.reset():(this._startPos=this._lastPos=i.touchPos(this.element,t.targetTouches)[0],this.down({type:\"mousedown\",button:0,ctrlKey:!0,preventDefault:function(){return t.preventDefault()}},this._startPos));},Ar.prototype.touchmove=function(t){1!==t.targetTouches.length?this.reset():(this._lastPos=i.touchPos(this.element,t.targetTouches)[0],this.move({preventDefault:function(){return t.preventDefault()}},this._lastPos));},Ar.prototype.touchend=function(t){0===t.targetTouches.length&&this._startPos&&this._lastPos&&this._startPos.dist(this._lastPos)<this._clickTolerance&&this.element.click(),this.reset();},Ar.prototype.reset=function(){this.mouseRotate.reset(),this.mousePitch&&this.mousePitch.reset(),delete this._startPos,delete this._lastPos,this.offTemp();};var Lr={center:\"translate(-50%,-50%)\",top:\"translate(-50%,0)\",\"top-left\":\"translate(0,0)\",\"top-right\":\"translate(-100%,0)\",bottom:\"translate(-50%,-100%)\",\"bottom-left\":\"translate(0,-100%)\",\"bottom-right\":\"translate(-100%,-100%)\",left:\"translate(0,-50%)\",right:\"translate(-100%,-50%)\"};function Rr(t,e,i){var o=t.classList;for(var r in Lr)o.remove(\"mapboxgl-\"+i+\"-anchor-\"+r);o.add(\"mapboxgl-\"+i+\"-anchor-\"+e);}var kr,Br=function(e){function o(o,r){if(e.call(this),(o instanceof t.window.HTMLElement||r)&&(o=t.extend({element:o},r)),t.bindAll([\"_update\",\"_onMove\",\"_onUp\",\"_addDragHandler\",\"_onMapClick\",\"_onKeyPress\"],this),this._anchor=o&&o.anchor||\"center\",this._color=o&&o.color||\"#3FB1CE\",this._scale=o&&o.scale||1,this._draggable=o&&o.draggable||!1,this._clickTolerance=o&&o.clickTolerance||0,this._isDragging=!1,this._state=\"inactive\",this._rotation=o&&o.rotation||0,this._rotationAlignment=o&&o.rotationAlignment||\"auto\",this._pitchAlignment=o&&o.pitchAlignment&&\"auto\"!==o.pitchAlignment?o.pitchAlignment:this._rotationAlignment,o&&o.element)this._element=o.element,this._offset=t.Point.convert(o&&o.offset||[0,0]);else {this._defaultMarker=!0,this._element=i.create(\"div\"),this._element.setAttribute(\"aria-label\",\"Map marker\");var a=i.createNS(\"http://www.w3.org/2000/svg\",\"svg\");a.setAttributeNS(null,\"display\",\"block\"),a.setAttributeNS(null,\"height\",\"41px\"),a.setAttributeNS(null,\"width\",\"27px\"),a.setAttributeNS(null,\"viewBox\",\"0 0 27 41\");var n=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");n.setAttributeNS(null,\"stroke\",\"none\"),n.setAttributeNS(null,\"stroke-width\",\"1\"),n.setAttributeNS(null,\"fill\",\"none\"),n.setAttributeNS(null,\"fill-rule\",\"evenodd\");var s=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");s.setAttributeNS(null,\"fill-rule\",\"nonzero\");var l=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");l.setAttributeNS(null,\"transform\",\"translate(3.0, 29.0)\"),l.setAttributeNS(null,\"fill\",\"#000000\");for(var c=0,u=[{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"9.5\",ry:\"4.77275007\"},{rx:\"8.5\",ry:\"4.29549936\"},{rx:\"7.5\",ry:\"3.81822308\"},{rx:\"6.5\",ry:\"3.34094679\"},{rx:\"5.5\",ry:\"2.86367051\"},{rx:\"4.5\",ry:\"2.38636864\"}];c<u.length;c+=1){var h=u[c],p=i.createNS(\"http://www.w3.org/2000/svg\",\"ellipse\");p.setAttributeNS(null,\"opacity\",\"0.04\"),p.setAttributeNS(null,\"cx\",\"10.5\"),p.setAttributeNS(null,\"cy\",\"5.80029008\"),p.setAttributeNS(null,\"rx\",h.rx),p.setAttributeNS(null,\"ry\",h.ry),l.appendChild(p);}var d=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");d.setAttributeNS(null,\"fill\",this._color);var _=i.createNS(\"http://www.w3.org/2000/svg\",\"path\");_.setAttributeNS(null,\"d\",\"M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z\"),d.appendChild(_);var f=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");f.setAttributeNS(null,\"opacity\",\"0.25\"),f.setAttributeNS(null,\"fill\",\"#000000\");var m=i.createNS(\"http://www.w3.org/2000/svg\",\"path\");m.setAttributeNS(null,\"d\",\"M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z\"),f.appendChild(m);var g=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");g.setAttributeNS(null,\"transform\",\"translate(6.0, 7.0)\"),g.setAttributeNS(null,\"fill\",\"#FFFFFF\");var v=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");v.setAttributeNS(null,\"transform\",\"translate(8.0, 8.0)\");var y=i.createNS(\"http://www.w3.org/2000/svg\",\"circle\");y.setAttributeNS(null,\"fill\",\"#000000\"),y.setAttributeNS(null,\"opacity\",\"0.25\"),y.setAttributeNS(null,\"cx\",\"5.5\"),y.setAttributeNS(null,\"cy\",\"5.5\"),y.setAttributeNS(null,\"r\",\"5.4999962\");var x=i.createNS(\"http://www.w3.org/2000/svg\",\"circle\");x.setAttributeNS(null,\"fill\",\"#FFFFFF\"),x.setAttributeNS(null,\"cx\",\"5.5\"),x.setAttributeNS(null,\"cy\",\"5.5\"),x.setAttributeNS(null,\"r\",\"5.4999962\"),v.appendChild(y),v.appendChild(x),s.appendChild(l),s.appendChild(d),s.appendChild(f),s.appendChild(g),s.appendChild(v),a.appendChild(s),a.setAttributeNS(null,\"height\",41*this._scale+\"px\"),a.setAttributeNS(null,\"width\",27*this._scale+\"px\"),this._element.appendChild(a),this._offset=t.Point.convert(o&&o.offset||[0,-14]);}this._element.classList.add(\"mapboxgl-marker\"),this._element.addEventListener(\"dragstart\",(function(t){t.preventDefault();})),this._element.addEventListener(\"mousedown\",(function(t){t.preventDefault();})),Rr(this._element,this._anchor,\"marker\"),this._popup=null;}return e&&(o.__proto__=e),(o.prototype=Object.create(e&&e.prototype)).constructor=o,o.prototype.addTo=function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._element),t.on(\"move\",this._update),t.on(\"moveend\",this._update),this.setDraggable(this._draggable),this._update(),this._map.on(\"click\",this._onMapClick),this},o.prototype.remove=function(){return this._map&&(this._map.off(\"click\",this._onMapClick),this._map.off(\"move\",this._update),this._map.off(\"moveend\",this._update),this._map.off(\"mousedown\",this._addDragHandler),this._map.off(\"touchstart\",this._addDragHandler),this._map.off(\"mouseup\",this._onUp),this._map.off(\"touchend\",this._onUp),this._map.off(\"mousemove\",this._onMove),this._map.off(\"touchmove\",this._onMove),delete this._map),i.remove(this._element),this._popup&&this._popup.remove(),this},o.prototype.getLngLat=function(){return this._lngLat},o.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._popup&&this._popup.setLngLat(this._lngLat),this._update(),this},o.prototype.getElement=function(){return this._element},o.prototype.setPopup=function(t){if(this._popup&&(this._popup.remove(),this._popup=null,this._element.removeEventListener(\"keypress\",this._onKeyPress),this._originalTabIndex||this._element.removeAttribute(\"tabindex\")),t){if(!(\"offset\"in t.options)){var e=Math.sqrt(Math.pow(13.5,2)/2);t.options.offset=this._defaultMarker?{top:[0,0],\"top-left\":[0,0],\"top-right\":[0,0],bottom:[0,-38.1],\"bottom-left\":[e,-1*(24.6+e)],\"bottom-right\":[-e,-1*(24.6+e)],left:[13.5,-24.6],right:[-13.5,-24.6]}:this._offset;}this._popup=t,this._lngLat&&this._popup.setLngLat(this._lngLat),this._originalTabIndex=this._element.getAttribute(\"tabindex\"),this._originalTabIndex||this._element.setAttribute(\"tabindex\",\"0\"),this._element.addEventListener(\"keypress\",this._onKeyPress);}return this},o.prototype._onKeyPress=function(t){var e=t.code,i=t.charCode||t.keyCode;\"Space\"!==e&&\"Enter\"!==e&&32!==i&&13!==i||this.togglePopup();},o.prototype._onMapClick=function(t){var e=t.originalEvent.target,i=this._element;this._popup&&(e===i||i.contains(e))&&this.togglePopup();},o.prototype.getPopup=function(){return this._popup},o.prototype.togglePopup=function(){var t=this._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},o.prototype._update=function(t){if(this._map){this._map.transform.renderWorldCopies&&(this._lngLat=Mr(this._lngLat,this._pos,this._map.transform)),this._pos=this._map.project(this._lngLat)._add(this._offset);var e=\"\";\"viewport\"===this._rotationAlignment||\"auto\"===this._rotationAlignment?e=\"rotateZ(\"+this._rotation+\"deg)\":\"map\"===this._rotationAlignment&&(e=\"rotateZ(\"+(this._rotation-this._map.getBearing())+\"deg)\");var o=\"\";\"viewport\"===this._pitchAlignment||\"auto\"===this._pitchAlignment?o=\"rotateX(0deg)\":\"map\"===this._pitchAlignment&&(o=\"rotateX(\"+this._map.getPitch()+\"deg)\"),t&&\"moveend\"!==t.type||(this._pos=this._pos.round()),i.setTransform(this._element,Lr[this._anchor]+\" translate(\"+this._pos.x+\"px, \"+this._pos.y+\"px) \"+o+\" \"+e);}},o.prototype.getOffset=function(){return this._offset},o.prototype.setOffset=function(e){return this._offset=t.Point.convert(e),this._update(),this},o.prototype._onMove=function(e){if(!this._isDragging){var i=this._clickTolerance||this._map._clickTolerance;this._isDragging=e.point.dist(this._pointerdownPos)>=i;}this._isDragging&&(this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents=\"none\",\"pending\"===this._state&&(this._state=\"active\",this.fire(new t.Event(\"dragstart\"))),this.fire(new t.Event(\"drag\")));},o.prototype._onUp=function(){this._element.style.pointerEvents=\"auto\",this._positionDelta=null,this._pointerdownPos=null,this._isDragging=!1,this._map.off(\"mousemove\",this._onMove),this._map.off(\"touchmove\",this._onMove),\"active\"===this._state&&this.fire(new t.Event(\"dragend\")),this._state=\"inactive\";},o.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._pointerdownPos=t.point,this._state=\"pending\",this._map.on(\"mousemove\",this._onMove),this._map.on(\"touchmove\",this._onMove),this._map.once(\"mouseup\",this._onUp),this._map.once(\"touchend\",this._onUp));},o.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on(\"mousedown\",this._addDragHandler),this._map.on(\"touchstart\",this._addDragHandler)):(this._map.off(\"mousedown\",this._addDragHandler),this._map.off(\"touchstart\",this._addDragHandler))),this},o.prototype.isDraggable=function(){return this._draggable},o.prototype.setRotation=function(t){return this._rotation=t||0,this._update(),this},o.prototype.getRotation=function(){return this._rotation},o.prototype.setRotationAlignment=function(t){return this._rotationAlignment=t||\"auto\",this._update(),this},o.prototype.getRotationAlignment=function(){return this._rotationAlignment},o.prototype.setPitchAlignment=function(t){return this._pitchAlignment=t&&\"auto\"!==t?t:this._rotationAlignment,this._update(),this},o.prototype.getPitchAlignment=function(){return this._pitchAlignment},o}(t.Evented),Or={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showAccuracyCircle:!0,showUserLocation:!0},Fr=0,Ur=!1,Nr=function(e){function o(i){e.call(this),this.options=t.extend({},Or,i),t.bindAll([\"_onSuccess\",\"_onError\",\"_onZoom\",\"_finish\",\"_setupUI\",\"_updateCamera\",\"_updateMarker\"],this);}return e&&(o.__proto__=e),(o.prototype=Object.create(e&&e.prototype)).constructor=o,o.prototype.onAdd=function(e){var o;return this._map=e,this._container=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),o=this._setupUI,void 0!==kr?o(kr):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:\"geolocation\"}).then((function(t){o(kr=\"denied\"!==t.state);})):o(kr=!!t.window.navigator.geolocation),this._container},o.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),this.options.showAccuracyCircle&&this._accuracyCircleMarker&&this._accuracyCircleMarker.remove(),i.remove(this._container),this._map.off(\"zoom\",this._onZoom),this._map=void 0,Fr=0,Ur=!1;},o.prototype._isOutOfMapMaxBounds=function(t){var e=this._map.getMaxBounds(),i=t.coords;return e&&(i.longitude<e.getWest()||i.longitude>e.getEast()||i.latitude<e.getSouth()||i.latitude>e.getNorth())},o.prototype._setErrorState=function(){switch(this._watchState){case\"WAITING_ACTIVE\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"ACTIVE_LOCK\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\");break;case\"BACKGROUND\":this._watchState=\"BACKGROUND_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\");}},o.prototype._onSuccess=function(e){if(this._map){if(this._isOutOfMapMaxBounds(e))return this._setErrorState(),this.fire(new t.Event(\"outofmaxbounds\",e)),this._updateMarker(),void this._finish();if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"BACKGROUND\":case\"BACKGROUND_ERROR\":this._watchState=\"BACKGROUND\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\");}this.options.showUserLocation&&\"OFF\"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&\"ACTIVE_LOCK\"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"geolocate\",e)),this._finish();}},o.prototype._updateCamera=function(e){var i=new t.LngLat(e.coords.longitude,e.coords.latitude),o=e.coords.accuracy,r=this._map.getBearing(),a=t.extend({bearing:r},this.options.fitBoundsOptions);this._map.fitBounds(i.toBounds(o),a,{geolocateSource:!0});},o.prototype._updateMarker=function(e){if(e){var i=new t.LngLat(e.coords.longitude,e.coords.latitude);this._accuracyCircleMarker.setLngLat(i).addTo(this._map),this._userLocationDotMarker.setLngLat(i).addTo(this._map),this._accuracy=e.coords.accuracy,this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius();}else this._userLocationDotMarker.remove(),this._accuracyCircleMarker.remove();},o.prototype._updateCircleRadius=function(){var t=this._map._container.clientHeight/2,e=this._map.unproject([0,t]),i=this._map.unproject([1,t]),o=e.distanceTo(i),r=Math.ceil(2*this._accuracy/o);this._circleElement.style.width=r+\"px\",this._circleElement.style.height=r+\"px\";},o.prototype._onZoom=function(){this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius();},o.prototype._onError=function(e){if(this._map){if(this.options.trackUserLocation)if(1===e.code){this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.disabled=!0;var i=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.title=i,this._geolocateButton.setAttribute(\"aria-label\",i),void 0!==this._geolocationWatchID&&this._clearWatch();}else {if(3===e.code&&Ur)return;this._setErrorState();}\"OFF\"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"error\",e)),this._finish();}},o.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0;},o.prototype._setupUI=function(e){var o=this;if(this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this._geolocateButton=i.create(\"button\",\"mapboxgl-ctrl-geolocate\",this._container),i.create(\"span\",\"mapboxgl-ctrl-icon\",this._geolocateButton).setAttribute(\"aria-hidden\",!0),this._geolocateButton.type=\"button\",!1===e){t.warnOnce(\"Geolocation support is not available so the GeolocateControl will be disabled.\");var r=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.disabled=!0,this._geolocateButton.title=r,this._geolocateButton.setAttribute(\"aria-label\",r);}else {var a=this._map._getUIString(\"GeolocateControl.FindMyLocation\");this._geolocateButton.title=a,this._geolocateButton.setAttribute(\"aria-label\",a);}this.options.trackUserLocation&&(this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this._watchState=\"OFF\"),this.options.showUserLocation&&(this._dotElement=i.create(\"div\",\"mapboxgl-user-location-dot\"),this._userLocationDotMarker=new Br(this._dotElement),this._circleElement=i.create(\"div\",\"mapboxgl-user-location-accuracy-circle\"),this._accuracyCircleMarker=new Br({element:this._circleElement,pitchAlignment:\"map\"}),this.options.trackUserLocation&&(this._watchState=\"OFF\"),this._map.on(\"zoom\",this._onZoom)),this._geolocateButton.addEventListener(\"click\",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on(\"movestart\",(function(e){e.geolocateSource||\"ACTIVE_LOCK\"!==o._watchState||e.originalEvent&&\"resize\"===e.originalEvent.type||(o._watchState=\"BACKGROUND\",o._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\"),o._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),o.fire(new t.Event(\"trackuserlocationend\")));}));},o.prototype.trigger=function(){if(!this._setup)return t.warnOnce(\"Geolocate control triggered before added to a map\"),!1;if(this.options.trackUserLocation){switch(this._watchState){case\"OFF\":this._watchState=\"WAITING_ACTIVE\",this.fire(new t.Event(\"trackuserlocationstart\"));break;case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":case\"BACKGROUND_ERROR\":Fr--,Ur=!1,this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this.fire(new t.Event(\"trackuserlocationend\"));break;case\"BACKGROUND\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event(\"trackuserlocationstart\"));}switch(this._watchState){case\"WAITING_ACTIVE\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_LOCK\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"BACKGROUND\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\");break;case\"BACKGROUND_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\");}if(\"OFF\"===this._watchState&&void 0!==this._geolocationWatchID)this._clearWatch();else if(void 0===this._geolocationWatchID){var e;this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"true\"),++Fr>1?(e={maximumAge:6e5,timeout:0},Ur=!0):(e=this.options.positionOptions,Ur=!1),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,e);}}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return !0},o.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this.options.showUserLocation&&this._updateMarker(null);},o}(t.Evented),Zr={maxWidth:100,unit:\"metric\"},qr=function(e){this.options=t.extend({},Zr,e),t.bindAll([\"_onMove\",\"setUnit\"],this);};function jr(t,e,i){var o=i&&i.maxWidth||100,r=t._container.clientHeight/2,a=t.unproject([0,r]),n=t.unproject([o,r]),s=a.distanceTo(n);if(i&&\"imperial\"===i.unit){var l=3.2808*s;l>5280?Vr(e,o,l/5280,t._getUIString(\"ScaleControl.Miles\")):Vr(e,o,l,t._getUIString(\"ScaleControl.Feet\"));}else i&&\"nautical\"===i.unit?Vr(e,o,s/1852,t._getUIString(\"ScaleControl.NauticalMiles\")):s>=1e3?Vr(e,o,s/1e3,t._getUIString(\"ScaleControl.Kilometers\")):Vr(e,o,s,t._getUIString(\"ScaleControl.Meters\"));}function Vr(t,e,i,o){var r,a,n,s=(r=i,(a=Math.pow(10,(\"\"+Math.floor(r)).length-1))*(n=(n=r/a)>=10?10:n>=5?5:n>=3?3:n>=2?2:n>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(n)));t.style.width=e*(s/i)+\"px\",t.innerHTML=s+\"&nbsp;\"+o;}qr.prototype.getDefaultPosition=function(){return \"bottom-left\"},qr.prototype._onMove=function(){jr(this._map,this._container,this.options);},qr.prototype.onAdd=function(t){return this._map=t,this._container=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-scale\",t.getContainer()),this._map.on(\"move\",this._onMove),this._onMove(),this._container},qr.prototype.onRemove=function(){i.remove(this._container),this._map.off(\"move\",this._onMove),this._map=void 0;},qr.prototype.setUnit=function(t){this.options.unit=t,jr(this._map,this._container,this.options);};var Gr=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce(\"Full screen control 'container' must be a DOM element.\")),t.bindAll([\"_onClickFullscreen\",\"_changeIcon\"],this),\"onfullscreenchange\"in t.window.document?this._fullscreenchange=\"fullscreenchange\":\"onmozfullscreenchange\"in t.window.document?this._fullscreenchange=\"mozfullscreenchange\":\"onwebkitfullscreenchange\"in t.window.document?this._fullscreenchange=\"webkitfullscreenchange\":\"onmsfullscreenchange\"in t.window.document&&(this._fullscreenchange=\"MSFullscreenChange\");};Gr.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display=\"none\",t.warnOnce(\"This device does not support fullscreen mode.\")),this._controlContainer},Gr.prototype.onRemove=function(){i.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon);},Gr.prototype._checkFullscreenSupport=function(){return !!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Gr.prototype._setupUI=function(){var e=this._fullscreenButton=i.create(\"button\",\"mapboxgl-ctrl-fullscreen\",this._controlContainer);i.create(\"span\",\"mapboxgl-ctrl-icon\",e).setAttribute(\"aria-hidden\",!0),e.type=\"button\",this._updateTitle(),this._fullscreenButton.addEventListener(\"click\",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon);},Gr.prototype._updateTitle=function(){var t=this._getTitle();this._fullscreenButton.setAttribute(\"aria-label\",t),this._fullscreenButton.title=t;},Gr.prototype._getTitle=function(){return this._map._getUIString(this._isFullscreen()?\"FullscreenControl.Exit\":\"FullscreenControl.Enter\")},Gr.prototype._isFullscreen=function(){return this._fullscreen},Gr.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-shrink\"),this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-fullscreen\"),this._updateTitle());},Gr.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen();};var Wr={closeButton:!0,closeOnClick:!0,focusAfterOpen:!0,className:\"\",maxWidth:\"240px\"},Xr=[\"a[href]\",\"[tabindex]:not([tabindex='-1'])\",\"[contenteditable]:not([contenteditable='false'])\",\"button:not([disabled])\",\"input:not([disabled])\",\"select:not([disabled])\",\"textarea:not([disabled])\"].join(\", \"),Hr=function(e){function o(i){e.call(this),this.options=t.extend(Object.create(Wr),i),t.bindAll([\"_update\",\"_onClose\",\"remove\",\"_onMouseMove\",\"_onMouseUp\",\"_onDrag\"],this);}return e&&(o.__proto__=e),(o.prototype=Object.create(e&&e.prototype)).constructor=o,o.prototype.addTo=function(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on(\"click\",this._onClose),this.options.closeOnMove&&this._map.on(\"move\",this._onClose),this._map.on(\"remove\",this.remove),this._update(),this._focusFirstElement(),this._trackPointer?(this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"mouseup\",this._onMouseUp),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")):this._map.on(\"move\",this._update),this.fire(new t.Event(\"open\")),this},o.prototype.isOpen=function(){return !!this._map},o.prototype.remove=function(){return this._content&&i.remove(this._content),this._container&&(i.remove(this._container),delete this._container),this._map&&(this._map.off(\"move\",this._update),this._map.off(\"move\",this._onClose),this._map.off(\"click\",this._onClose),this._map.off(\"remove\",this.remove),this._map.off(\"mousemove\",this._onMouseMove),this._map.off(\"mouseup\",this._onMouseUp),this._map.off(\"drag\",this._onDrag),delete this._map),this.fire(new t.Event(\"close\")),this},o.prototype.getLngLat=function(){return this._lngLat},o.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on(\"move\",this._update),this._map.off(\"mousemove\",this._onMouseMove),this._container&&this._container.classList.remove(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.remove(\"mapboxgl-track-pointer\")),this},o.prototype.trackPointer=function(){return this._trackPointer=!0,this._pos=null,this._update(),this._map&&(this._map.off(\"move\",this._update),this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"drag\",this._onDrag),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")),this},o.prototype.getElement=function(){return this._container},o.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},o.prototype.setHTML=function(e){var i,o=t.window.document.createDocumentFragment(),r=t.window.document.createElement(\"body\");for(r.innerHTML=e;i=r.firstChild;)o.appendChild(i);return this.setDOMContent(o)},o.prototype.getMaxWidth=function(){return this._container&&this._container.style.maxWidth},o.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},o.prototype.setDOMContent=function(t){if(this._content)for(;this._content.hasChildNodes();)this._content.firstChild&&this._content.removeChild(this._content.firstChild);else this._content=i.create(\"div\",\"mapboxgl-popup-content\",this._container);return this._content.appendChild(t),this._createCloseButton(),this._update(),this._focusFirstElement(),this},o.prototype.addClassName=function(t){this._container&&this._container.classList.add(t);},o.prototype.removeClassName=function(t){this._container&&this._container.classList.remove(t);},o.prototype.setOffset=function(t){return this.options.offset=t,this._update(),this},o.prototype.toggleClassName=function(t){if(this._container)return this._container.classList.toggle(t)},o.prototype._createCloseButton=function(){this.options.closeButton&&(this._closeButton=i.create(\"button\",\"mapboxgl-popup-close-button\",this._content),this._closeButton.type=\"button\",this._closeButton.setAttribute(\"aria-label\",\"Close popup\"),this._closeButton.innerHTML=\"&#215;\",this._closeButton.addEventListener(\"click\",this._onClose));},o.prototype._onMouseUp=function(t){this._update(t.point);},o.prototype._onMouseMove=function(t){this._update(t.point);},o.prototype._onDrag=function(t){this._update(t.point);},o.prototype._update=function(e){var o=this;if(this._map&&(this._lngLat||this._trackPointer)&&this._content&&(this._container||(this._container=i.create(\"div\",\"mapboxgl-popup\",this._map.getContainer()),this._tip=i.create(\"div\",\"mapboxgl-popup-tip\",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(\" \").forEach((function(t){return o._container.classList.add(t)})),this._trackPointer&&this._container.classList.add(\"mapboxgl-popup-track-pointer\")),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=Mr(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||e)){var r=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat),a=this.options.anchor,n=function e(i){if(i){if(\"number\"==typeof i){var o=Math.round(Math.sqrt(.5*Math.pow(i,2)));return {center:new t.Point(0,0),top:new t.Point(0,i),\"top-left\":new t.Point(o,o),\"top-right\":new t.Point(-o,o),bottom:new t.Point(0,-i),\"bottom-left\":new t.Point(o,-o),\"bottom-right\":new t.Point(-o,-o),left:new t.Point(i,0),right:new t.Point(-i,0)}}if(i instanceof t.Point||Array.isArray(i)){var r=t.Point.convert(i);return {center:r,top:r,\"top-left\":r,\"top-right\":r,bottom:r,\"bottom-left\":r,\"bottom-right\":r,left:r,right:r}}return {center:t.Point.convert(i.center||[0,0]),top:t.Point.convert(i.top||[0,0]),\"top-left\":t.Point.convert(i[\"top-left\"]||[0,0]),\"top-right\":t.Point.convert(i[\"top-right\"]||[0,0]),bottom:t.Point.convert(i.bottom||[0,0]),\"bottom-left\":t.Point.convert(i[\"bottom-left\"]||[0,0]),\"bottom-right\":t.Point.convert(i[\"bottom-right\"]||[0,0]),left:t.Point.convert(i.left||[0,0]),right:t.Point.convert(i.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!a){var s,l=this._container.offsetWidth,c=this._container.offsetHeight;s=r.y+n.bottom.y<c?[\"top\"]:r.y>this._map.transform.height-c?[\"bottom\"]:[],r.x<l/2?s.push(\"left\"):r.x>this._map.transform.width-l/2&&s.push(\"right\"),a=0===s.length?\"bottom\":s.join(\"-\");}var u=r.add(n[a]).round();i.setTransform(this._container,Lr[a]+\" translate(\"+u.x+\"px,\"+u.y+\"px)\"),Rr(this._container,a,\"popup\");}},o.prototype._focusFirstElement=function(){if(this.options.focusAfterOpen&&this._container){var t=this._container.querySelector(Xr);t&&t.focus();}},o.prototype._onClose=function(){this.remove();},o}(t.Evented),Kr={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,getRTLTextPluginStatus:t.getRTLTextPluginStatus,Map:Sr,NavigationControl:Dr,GeolocateControl:Nr,AttributionControl:yr,ScaleControl:qr,FullscreenControl:Gr,Popup:Hr,Marker:Br,Style:je,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,prewarm:function(){Ft().acquire(Rt);},clearPrewarmedResources:function(){var t=Bt;t&&(t.isPreloaded()&&1===t.numActive()?(t.release(Rt),Bt=null):console.warn(\"Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()\"));},get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e;},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e;},get workerCount(){return kt.workerCount},set workerCount(t){kt.workerCount=t;},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e;},clearStorage:function(e){t.clearTileCache(e);},workerUrl:\"\"};return Kr}));\n\n//\n\nreturn mapboxgl;\n\n})));\n//# sourceMappingURL=mapbox-gl.js.map\n","/*\n * This module exists for optimizations in the build process through rollup and terser.  We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nexport type SdkSource = 'npm' | 'cdn' | 'loader';\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(): boolean {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nexport function getSDKSource(): SdkSource {\n  // @ts-expect-error __SENTRY_SDK_SOURCE__ is injected by rollup during build process\n  return __SENTRY_SDK_SOURCE__;\n}\n","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var af = moment.defineLocale('af', {\n        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM: function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Vandag om] LT',\n            nextDay: '[Môre om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[Gister om] LT',\n            lastWeek: '[Laas] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oor %s',\n            past: '%s gelede',\n            s: \"'n paar sekondes\",\n            ss: '%d sekondes',\n            m: \"'n minuut\",\n            mm: '%d minute',\n            h: \"'n uur\",\n            hh: '%d ure',\n            d: \"'n dag\",\n            dd: '%d dae',\n            M: \"'n maand\",\n            MM: '%d maande',\n            y: \"'n jaar\",\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            ); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week: {\n            dow: 1, // Maandag is die eerste dag van die week.\n            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        },\n    });\n\n    return af;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var ar = moment.defineLocale('ar', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ar;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'جانفي',\n            'فيفري',\n            'مارس',\n            'أفريل',\n            'ماي',\n            'جوان',\n            'جويلية',\n            'أوت',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arDz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arKw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Libya) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '1',\n            2: '2',\n            3: '3',\n            4: '4',\n            5: '5',\n            6: '6',\n            7: '7',\n            8: '8',\n            9: '9',\n            0: '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arLy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arMa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Palestine) [ar-ps]\n//! author : Majd Al-Shihabi : https://github.com/majdal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arPs = moment.defineLocale('ar-ps', {\n        months: 'كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل'.split(\n            '_'\n        ),\n        monthsShort:\n            'ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .split('') // reversed since negative lookbehind not supported everywhere\n                .reverse()\n                .join('')\n                .replace(/[١٢](?![\\u062a\\u0643])/g, function (match) {\n                    return numberMap[match];\n                })\n                .split('')\n                .reverse()\n                .join('')\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return arPs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return arSa;\n\n})));\n","//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arTn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı',\n    };\n\n    var az = moment.defineLocale('az', {\n        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays:\n            'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n                '_'\n            ),\n        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[sabah saat] LT',\n            nextWeek: '[gələn həftə] dddd [saat] LT',\n            lastDay: '[dünən] LT',\n            lastWeek: '[keçən həftə] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s əvvəl',\n            s: 'bir neçə saniyə',\n            ss: '%d saniyə',\n            m: 'bir dəqiqə',\n            mm: '%d dəqiqə',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir il',\n            yy: '%d il',\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM: function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal: function (number) {\n            if (number === 0) {\n                // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = (number % 100) - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return az;\n\n})));\n","//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            dd: 'дзень_дні_дзён',\n            MM: 'месяц_месяцы_месяцаў',\n            yy: 'год_гады_гадоў',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months: {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n                '_'\n            ),\n            standalone:\n                'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays: {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n                '_'\n            ),\n            standalone:\n                'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n                    '_'\n                ),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n        },\n        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n        },\n        calendar: {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'праз %s',\n            past: '%s таму',\n            s: 'некалькі секунд',\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithPlural,\n            hh: relativeTimeWithPlural,\n            d: 'дзень',\n            dd: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM: function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) &&\n                        number % 100 !== 12 &&\n                        number % 100 !== 13\n                        ? number + '-і'\n                        : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bg = moment.defineLocale('bg', {\n        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Днес в] LT',\n            nextDay: '[Утре в] LT',\n            nextWeek: 'dddd [в] LT',\n            lastDay: '[Вчера в] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Миналата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Миналия] dddd [в] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'след %s',\n            past: 'преди %s',\n            s: 'няколко секунди',\n            ss: '%d секунди',\n            m: 'минута',\n            mm: '%d минути',\n            h: 'час',\n            hh: '%d часа',\n            d: 'ден',\n            dd: '%d дена',\n            w: 'седмица',\n            ww: '%d седмици',\n            M: 'месец',\n            MM: '%d месеца',\n            y: 'година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bm = moment.defineLocale('bm', {\n        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n            '_'\n        ),\n        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'MMMM [tile] D [san] YYYY',\n            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bi lɛrɛ] LT',\n            nextDay: '[Sini lɛrɛ] LT',\n            nextWeek: 'dddd [don lɛrɛ] LT',\n            lastDay: '[Kunu lɛrɛ] LT',\n            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s kɔnɔ',\n            past: 'a bɛ %s bɔ',\n            s: 'sanga dama dama',\n            ss: 'sekondi %d',\n            m: 'miniti kelen',\n            mm: 'miniti %d',\n            h: 'lɛrɛ kelen',\n            hh: 'lɛrɛ %d',\n            d: 'tile kelen',\n            dd: 'tile %d',\n            M: 'kalo kelen',\n            MM: 'kalo %d',\n            y: 'san kelen',\n            yy: 'san %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return bm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bn = moment.defineLocale('bn', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bnBd = moment.defineLocale('bn-bd', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n\n        meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'রাত') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ভোর') {\n                return hour;\n            } else if (meridiem === 'সকাল') {\n                return hour;\n            } else if (meridiem === 'দুপুর') {\n                return hour >= 3 ? hour : hour + 12;\n            } else if (meridiem === 'বিকাল') {\n                return hour + 12;\n            } else if (meridiem === 'সন্ধ্যা') {\n                return hour + 12;\n            }\n        },\n\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 6) {\n                return 'ভোর';\n            } else if (hour < 12) {\n                return 'সকাল';\n            } else if (hour < 15) {\n                return 'দুপুর';\n            } else if (hour < 18) {\n                return 'বিকাল';\n            } else if (hour < 20) {\n                return 'সন্ধ্যা';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bnBd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '༡',\n            2: '༢',\n            3: '༣',\n            4: '༤',\n            5: '༥',\n            6: '༦',\n            7: '༧',\n            8: '༨',\n            9: '༩',\n            0: '༠',\n        },\n        numberMap = {\n            '༡': '1',\n            '༢': '2',\n            '༣': '3',\n            '༤': '4',\n            '༥': '5',\n            '༦': '6',\n            '༧': '7',\n            '༨': '8',\n            '༩': '9',\n            '༠': '0',\n        };\n\n    var bo = moment.defineLocale('bo', {\n        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n                '_'\n            ),\n        monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n        monthsParseExact: true,\n        weekdays:\n            'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n                '_'\n            ),\n        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n            '_'\n        ),\n        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[དི་རིང] LT',\n            nextDay: '[སང་ཉིན] LT',\n            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay: '[ཁ་སང] LT',\n            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ལ་',\n            past: '%s སྔན་ལ',\n            s: 'ལམ་སང',\n            ss: '%d སྐར་ཆ།',\n            m: 'སྐར་མ་གཅིག',\n            mm: '%d སྐར་མ',\n            h: 'ཆུ་ཚོད་གཅིག',\n            hh: '%d ཆུ་ཚོད',\n            d: 'ཉིན་གཅིག',\n            dd: '%d ཉིན་',\n            M: 'ཟླ་བ་གཅིག',\n            MM: '%d ཟླ་བ',\n            y: 'ལོ་གཅིག',\n            yy: '%d ལོ',\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            mm: 'munutenn',\n            MM: 'miz',\n            dd: 'devezh',\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            m: 'v',\n            b: 'v',\n            d: 'z',\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var monthsParse = [\n            /^gen/i,\n            /^c[ʼ\\']hwe/i,\n            /^meu/i,\n            /^ebr/i,\n            /^mae/i,\n            /^(mez|eve)/i,\n            /^gou/i,\n            /^eos/i,\n            /^gwe/i,\n            /^her/i,\n            /^du/i,\n            /^ker/i,\n        ],\n        monthsRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        monthsStrictRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n        monthsShortStrictRegex =\n            /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        fullWeekdaysParse = [\n            /^sul/i,\n            /^lun/i,\n            /^meurzh/i,\n            /^merc[ʼ\\']her/i,\n            /^yaou/i,\n            /^gwener/i,\n            /^sadorn/i,\n        ],\n        shortWeekdaysParse = [\n            /^Sul/i,\n            /^Lun/i,\n            /^Meu/i,\n            /^Mer/i,\n            /^Yao/i,\n            /^Gwe/i,\n            /^Sad/i,\n        ],\n        minWeekdaysParse = [\n            /^Su/i,\n            /^Lu/i,\n            /^Me([^r]|$)/i,\n            /^Mer/i,\n            /^Ya/i,\n            /^Gw/i,\n            /^Sa/i,\n        ];\n\n    var br = moment.defineLocale('br', {\n        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n            '_'\n        ),\n        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParse: minWeekdaysParse,\n        fullWeekdaysParse: fullWeekdaysParse,\n        shortWeekdaysParse: shortWeekdaysParse,\n        minWeekdaysParse: minWeekdaysParse,\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [a viz] MMMM YYYY',\n            LLL: 'D [a viz] MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hiziv da] LT',\n            nextDay: '[Warcʼhoazh da] LT',\n            nextWeek: 'dddd [da] LT',\n            lastDay: '[Decʼh da] LT',\n            lastWeek: 'dddd [paset da] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'a-benn %s',\n            past: '%s ʼzo',\n            s: 'un nebeud segondennoù',\n            ss: '%d eilenn',\n            m: 'ur vunutenn',\n            mm: relativeTimeWithMutation,\n            h: 'un eur',\n            hh: '%d eur',\n            d: 'un devezh',\n            dd: relativeTimeWithMutation,\n            M: 'ur miz',\n            MM: relativeTimeWithMutation,\n            y: 'ur bloaz',\n            yy: specialMutationForYears,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'añ' : 'vet';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n        isPM: function (token) {\n            return token === 'g.m.';\n        },\n        meridiem: function (hour, minute, isLower) {\n            return hour < 12 ? 'a.m.' : 'g.m.';\n        },\n    });\n\n    return br;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! author : Rasid Redzic : https://github.com/rasidre\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 'm':\n                return withoutSuffix\n                    ? 'jedna minuta'\n                    : isFuture\n                      ? 'jednu minutu'\n                      : 'jedne minute';\n        }\n    }\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jedan sat';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: processRelativeTime,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ca = moment.defineLocale('ca', {\n        months: {\n            standalone:\n                'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n                    '_'\n                ),\n            format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n                '_'\n            ),\n        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a les] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextDay: function () {\n                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastDay: function () {\n                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [passat a ' +\n                    (this.hours() !== 1 ? 'les' : 'la') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'uns segons',\n            ss: '%d segons',\n            m: 'un minut',\n            mm: '%d minuts',\n            h: 'una hora',\n            hh: '%d hores',\n            d: 'un dia',\n            dd: '%d dies',\n            M: 'un mes',\n            MM: '%d mesos',\n            y: 'un any',\n            yy: '%d anys',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                      ? 'n'\n                      : number === 3\n                        ? 'r'\n                        : number === 4\n                          ? 't'\n                          : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ca;\n\n})));\n","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = {\n            standalone:\n                'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n                    '_'\n                ),\n            format: 'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n                '_'\n            ),\n            isFormat: /DD?[o.]?(\\[[^\\[\\]]*\\]|\\s)+MMMM/,\n        },\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n        monthsParse = [\n            /^led/i,\n            /^úno/i,\n            /^bře/i,\n            /^dub/i,\n            /^kvě/i,\n            /^(čvn|červen$|června)/i,\n            /^(čvc|červenec|července)/i,\n            /^srp/i,\n            /^zář/i,\n            /^říj/i,\n            /^lis/i,\n            /^pro/i,\n        ],\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsRegex =\n            /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return n > 1 && n < 5 && ~~(n / 10) !== 1;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex:\n            /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex:\n            /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n            l: 'D. M. YYYY',\n        },\n        calendar: {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'před %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cv = moment.defineLocale('cv', {\n        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n            '_'\n        ),\n        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays:\n            'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n                '_'\n            ),\n        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        },\n        calendar: {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (output) {\n                var affix = /сехет$/i.exec(output)\n                    ? 'рен'\n                    : /ҫул$/i.exec(output)\n                      ? 'тан'\n                      : 'ран';\n                return output + affix;\n            },\n            past: '%s каялла',\n            s: 'пӗр-ик ҫеккунт',\n            ss: '%d ҫеккунт',\n            m: 'пӗр минут',\n            mm: '%d минут',\n            h: 'пӗр сехет',\n            hh: '%d сехет',\n            d: 'пӗр кун',\n            dd: '%d кун',\n            M: 'пӗр уйӑх',\n            MM: '%d уйӑх',\n            y: 'пӗр ҫул',\n            yy: '%d ҫул',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal: '%d-мӗш',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return cv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n            '_'\n        ),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n            '_'\n        ),\n        weekdays:\n            'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact: true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '',\n                    'af',\n                    'il',\n                    'ydd',\n                    'ydd',\n                    'ed',\n                    'ed',\n                    'ed',\n                    'fed',\n                    'fed',\n                    'fed', // 1af to 10fed\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'fed', // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var da = moment.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'på dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[i] dddd[s kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'få sekunder',\n            ss: '%d sekunder',\n            m: 'et minut',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dage',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'et år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return da;\n\n})));\n","//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return de;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deAt;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'ޖެނުއަރީ',\n            'ފެބްރުއަރީ',\n            'މާރިޗު',\n            'އޭޕްރީލު',\n            'މޭ',\n            'ޖޫން',\n            'ޖުލައި',\n            'އޯގަސްޓު',\n            'ސެޕްޓެމްބަރު',\n            'އޮކްޓޯބަރު',\n            'ނޮވެމްބަރު',\n            'ޑިސެމްބަރު',\n        ],\n        weekdays = [\n            'އާދިއްތަ',\n            'ހޯމަ',\n            'އަންގާރަ',\n            'ބުދަ',\n            'ބުރާސްފަތި',\n            'ހުކުރު',\n            'ހޮނިހިރު',\n        ];\n\n    var dv = moment.defineLocale('dv', {\n        months: months,\n        monthsShort: months,\n        weekdays: weekdays,\n        weekdaysShort: weekdays,\n        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/M/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM: function (input) {\n            return 'މފ' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar: {\n            sameDay: '[މިއަދު] LT',\n            nextDay: '[މާދަމާ] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[އިއްޔެ] LT',\n            lastWeek: '[ފާއިތުވި] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ތެރޭގައި %s',\n            past: 'ކުރިން %s',\n            s: 'ސިކުންތުކޮޅެއް',\n            ss: 'd% ސިކުންތު',\n            m: 'މިނިޓެއް',\n            mm: 'މިނިޓު %d',\n            h: 'ގަޑިއިރެއް',\n            hh: 'ގަޑިއިރު %d',\n            d: 'ދުވަހެއް',\n            dd: 'ދުވަސް %d',\n            M: 'މަހެއް',\n            MM: 'މަސް %d',\n            y: 'އަހަރެއް',\n            yy: 'އަހަރު %d',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 7, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return dv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl:\n            'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n                '_'\n            ),\n        monthsGenitiveEl:\n            'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n                '_'\n            ),\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (\n                typeof format === 'string' &&\n                /D/.test(format.substring(0, format.indexOf('MMMM')))\n            ) {\n                // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n            '_'\n        ),\n        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM: function (input) {\n            return (input + '').toLowerCase()[0] === 'μ';\n        },\n        meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendarEl: {\n            sameDay: '[Σήμερα {}] LT',\n            nextDay: '[Αύριο {}] LT',\n            nextWeek: 'dddd [{}] LT',\n            lastDay: '[Χθες {}] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        calendar: function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n        },\n        relativeTime: {\n            future: 'σε %s',\n            past: '%s πριν',\n            s: 'λίγα δευτερόλεπτα',\n            ss: '%d δευτερόλεπτα',\n            m: 'ένα λεπτό',\n            mm: '%d λεπτά',\n            h: 'μία ώρα',\n            hh: '%d ώρες',\n            d: 'μία μέρα',\n            dd: '%d μέρες',\n            M: 'ένας μήνας',\n            MM: '%d μήνες',\n            y: 'ένας χρόνος',\n            yy: '%d χρόνια',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4st is the first week of the year.\n        },\n    });\n\n    return el;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enAu = moment.defineLocale('en-au', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enAu;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enCa = moment.defineLocale('en-ca', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'YYYY-MM-DD',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY h:mm A',\n            LLLL: 'dddd, MMMM D, YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    return enCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enGb = moment.defineLocale('en-gb', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enGb;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIe = moment.defineLocale('en-ie', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enIe;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIl = moment.defineLocale('en-il', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    return enIl;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIn = moment.defineLocale('en-in', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return enIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enNz = moment.defineLocale('en-nz', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enNz;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enSg = moment.defineLocale('en-sg', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enSg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eo = moment.defineLocale('eo', {\n        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: '[la] D[-an de] MMMM, YYYY',\n            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar: {\n            sameDay: '[Hodiaŭ je] LT',\n            nextDay: '[Morgaŭ je] LT',\n            nextWeek: 'dddd[n je] LT',\n            lastDay: '[Hieraŭ je] LT',\n            lastWeek: '[pasintan] dddd[n je] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'post %s',\n            past: 'antaŭ %s',\n            s: 'kelkaj sekundoj',\n            ss: '%d sekundoj',\n            m: 'unu minuto',\n            mm: '%d minutoj',\n            h: 'unu horo',\n            hh: '%d horoj',\n            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n            dd: '%d tagoj',\n            M: 'unu monato',\n            MM: '%d monatoj',\n            y: 'unu jaro',\n            yy: '%d jaroj',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal: '%da',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return es;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return esDo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esMx = moment.defineLocale('es-mx', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return esMx;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'MM/DD/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return esUs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            ss: [number + 'sekundi', number + 'sekundit'],\n            m: ['ühe minuti', 'üks minut'],\n            mm: [number + ' minuti', number + ' minutit'],\n            h: ['ühe tunni', 'tund aega', 'üks tund'],\n            hh: [number + ' tunni', number + ' tundi'],\n            d: ['ühe päeva', 'üks päev'],\n            M: ['kuu aja', 'kuu aega', 'üks kuu'],\n            MM: [number + ' kuu', number + ' kuud'],\n            y: ['ühe aasta', 'aasta', 'üks aasta'],\n            yy: [number + ' aasta', number + ' aastat'],\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays:\n            'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n                '_'\n            ),\n        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Täna,] LT',\n            nextDay: '[Homme,] LT',\n            nextWeek: '[Järgmine] dddd LT',\n            lastDay: '[Eile,] LT',\n            lastWeek: '[Eelmine] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s pärast',\n            past: '%s tagasi',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: '%d päeva',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return et;\n\n})));\n","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eu = moment.defineLocale('eu', {\n        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n            '_'\n        ),\n        monthsShort:\n            'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n                '_'\n            ),\n        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY[ko] MMMM[ren] D[a]',\n            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l: 'YYYY-M-D',\n            ll: 'YYYY[ko] MMM D[a]',\n            lll: 'YYYY[ko] MMM D[a] HH:mm',\n            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n        },\n        calendar: {\n            sameDay: '[gaur] LT[etan]',\n            nextDay: '[bihar] LT[etan]',\n            nextWeek: 'dddd LT[etan]',\n            lastDay: '[atzo] LT[etan]',\n            lastWeek: '[aurreko] dddd LT[etan]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s barru',\n            past: 'duela %s',\n            s: 'segundo batzuk',\n            ss: '%d segundo',\n            m: 'minutu bat',\n            mm: '%d minutu',\n            h: 'ordu bat',\n            hh: '%d ordu',\n            d: 'egun bat',\n            dd: '%d egun',\n            M: 'hilabete bat',\n            MM: '%d hilabete',\n            y: 'urte bat',\n            yy: '%d urte',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '۱',\n            2: '۲',\n            3: '۳',\n            4: '۴',\n            5: '۵',\n            6: '۶',\n            7: '۷',\n            8: '۸',\n            9: '۹',\n            0: '۰',\n        },\n        numberMap = {\n            '۱': '1',\n            '۲': '2',\n            '۳': '3',\n            '۴': '4',\n            '۵': '5',\n            '۶': '6',\n            '۷': '7',\n            '۸': '8',\n            '۹': '9',\n            '۰': '0',\n        };\n\n    var fa = moment.defineLocale('fa', {\n        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n                '_'\n            ),\n        weekdays:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar: {\n            sameDay: '[امروز ساعت] LT',\n            nextDay: '[فردا ساعت] LT',\n            nextWeek: 'dddd [ساعت] LT',\n            lastDay: '[دیروز ساعت] LT',\n            lastWeek: 'dddd [پیش] [ساعت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'در %s',\n            past: '%s پیش',\n            s: 'چند ثانیه',\n            ss: '%d ثانیه',\n            m: 'یک دقیقه',\n            mm: '%d دقیقه',\n            h: 'یک ساعت',\n            hh: '%d ساعت',\n            d: 'یک روز',\n            dd: '%d روز',\n            M: 'یک ماه',\n            MM: '%d ماه',\n            y: 'یک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal: '%dم',\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return fa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersPast =\n            'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n                ' '\n            ),\n        numbersFuture = [\n            'nolla',\n            'yhden',\n            'kahden',\n            'kolmen',\n            'neljän',\n            'viiden',\n            'kuuden',\n            numbersPast[7],\n            numbersPast[8],\n            numbersPast[9],\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                result = isFuture ? 'sekunnin' : 'sekuntia';\n                break;\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10\n            ? isFuture\n                ? numbersFuture[number]\n                : numbersPast[number]\n            : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n            '_'\n        ),\n        monthsShort:\n            'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n                '_'\n            ),\n        weekdays:\n            'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n                '_'\n            ),\n        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[ta] YYYY',\n            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l: 'D.M.YYYY',\n            ll: 'Do MMM YYYY',\n            lll: 'Do MMM YYYY, [klo] HH.mm',\n            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n        },\n        calendar: {\n            sameDay: '[tänään] [klo] LT',\n            nextDay: '[huomenna] [klo] LT',\n            nextWeek: 'dddd [klo] LT',\n            lastDay: '[eilen] [klo] LT',\n            lastWeek: '[viime] dddd[na] [klo] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s päästä',\n            past: '%s sitten',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fil = moment.defineLocale('fil', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fil;\n\n})));\n","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fo = moment.defineLocale('fo', {\n        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D. MMMM, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Í dag kl.] LT',\n            nextDay: '[Í morgin kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[Í gjár kl.] LT',\n            lastWeek: '[síðstu] dddd [kl] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'um %s',\n            past: '%s síðani',\n            s: 'fá sekund',\n            ss: '%d sekundir',\n            m: 'ein minuttur',\n            mm: '%d minuttir',\n            h: 'ein tími',\n            hh: '%d tímar',\n            d: 'ein dagur',\n            dd: '%d dagar',\n            M: 'ein mánaður',\n            MM: '%d mánaðir',\n            y: 'eitt ár',\n            yy: '%d ár',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fo;\n\n})));\n","//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsStrictRegex =\n            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsShortStrictRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n        monthsRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsParse = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    var fr = moment.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fr;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n    });\n\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return frCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact: true,\n        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n            '_'\n        ),\n        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oer %s',\n            past: '%s lyn',\n            s: 'in pear sekonden',\n            ss: '%d sekonden',\n            m: 'ien minút',\n            mm: '%d minuten',\n            h: 'ien oere',\n            hh: '%d oeren',\n            d: 'ien dei',\n            dd: '%d dagen',\n            M: 'ien moanne',\n            MM: '%d moannen',\n            y: 'ien jier',\n            yy: '%d jierren',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Eanáir',\n            'Feabhra',\n            'Márta',\n            'Aibreán',\n            'Bealtaine',\n            'Meitheamh',\n            'Iúil',\n            'Lúnasa',\n            'Meán Fómhair',\n            'Deireadh Fómhair',\n            'Samhain',\n            'Nollaig',\n        ],\n        monthsShort = [\n            'Ean',\n            'Feabh',\n            'Márt',\n            'Aib',\n            'Beal',\n            'Meith',\n            'Iúil',\n            'Lún',\n            'M.F.',\n            'D.F.',\n            'Samh',\n            'Noll',\n        ],\n        weekdays = [\n            'Dé Domhnaigh',\n            'Dé Luain',\n            'Dé Máirt',\n            'Dé Céadaoin',\n            'Déardaoin',\n            'Dé hAoine',\n            'Dé Sathairn',\n        ],\n        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné ag] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d míonna',\n            y: 'bliain',\n            yy: '%d bliain',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ga;\n\n})));\n","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Am Faoilleach',\n            'An Gearran',\n            'Am Màrt',\n            'An Giblean',\n            'An Cèitean',\n            'An t-Ògmhios',\n            'An t-Iuchar',\n            'An Lùnastal',\n            'An t-Sultain',\n            'An Dàmhair',\n            'An t-Samhain',\n            'An Dùbhlachd',\n        ],\n        monthsShort = [\n            'Faoi',\n            'Gear',\n            'Màrt',\n            'Gibl',\n            'Cèit',\n            'Ògmh',\n            'Iuch',\n            'Lùn',\n            'Sult',\n            'Dàmh',\n            'Samh',\n            'Dùbh',\n        ],\n        weekdays = [\n            'Didòmhnaich',\n            'Diluain',\n            'Dimàirt',\n            'Diciadain',\n            'Diardaoin',\n            'Dihaoine',\n            'Disathairne',\n        ],\n        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n        weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[An-diugh aig] LT',\n            nextDay: '[A-màireach aig] LT',\n            nextWeek: 'dddd [aig] LT',\n            lastDay: '[An-dè aig] LT',\n            lastWeek: 'dddd [seo chaidh] [aig] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ann an %s',\n            past: 'bho chionn %s',\n            s: 'beagan diogan',\n            ss: '%d diogan',\n            m: 'mionaid',\n            mm: '%d mionaidean',\n            h: 'uair',\n            hh: '%d uairean',\n            d: 'latha',\n            dd: '%d latha',\n            M: 'mìos',\n            MM: '%d mìosan',\n            y: 'bliadhna',\n            yy: '%d bliadhna',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var gl = moment.defineLocale('gl', {\n        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort:\n            'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n            },\n            lastDay: function () {\n                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past: 'hai %s',\n            s: 'uns segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'unha hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n            m: ['एका मिणटान', 'एक मिनूट'],\n            mm: [number + ' मिणटांनी', number + ' मिणटां'],\n            h: ['एका वरान', 'एक वर'],\n            hh: [number + ' वरांनी', number + ' वरां'],\n            d: ['एका दिसान', 'एक दीस'],\n            dd: [number + ' दिसांनी', number + ' दीस'],\n            M: ['एका म्हयन्यान', 'एक म्हयनो'],\n            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n            y: ['एका वर्सान', 'एक वर्स'],\n            yy: [number + ' वर्सांनी', number + ' वर्सां'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomDeva = moment.defineLocale('gom-deva', {\n        months: {\n            standalone:\n                'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n                    '_'\n                ),\n            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [वाजतां]',\n            LTS: 'A h:mm:ss [वाजतां]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n        },\n        calendar: {\n            sameDay: '[आयज] LT',\n            nextDay: '[फाल्यां] LT',\n            nextWeek: '[फुडलो] dddd[,] LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[फाटलो] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s आदीं',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'वेर' only applies to day of the month\n                case 'D':\n                    return number + 'वेर';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राती') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळीं') {\n                return hour;\n            } else if (meridiem === 'दनपारां') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'सांजे') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'राती';\n            } else if (hour < 12) {\n                return 'सकाळीं';\n            } else if (hour < 16) {\n                return 'दनपारां';\n            } else if (hour < 20) {\n                return 'सांजे';\n            } else {\n                return 'राती';\n            }\n        },\n    });\n\n    return gomDeva;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['thoddea sekondamni', 'thodde sekond'],\n            ss: [number + ' sekondamni', number + ' sekond'],\n            m: ['eka mintan', 'ek minut'],\n            mm: [number + ' mintamni', number + ' mintam'],\n            h: ['eka voran', 'ek vor'],\n            hh: [number + ' voramni', number + ' voram'],\n            d: ['eka disan', 'ek dis'],\n            dd: [number + ' disamni', number + ' dis'],\n            M: ['eka mhoinean', 'ek mhoino'],\n            MM: [number + ' mhoineamni', number + ' mhoine'],\n            y: ['eka vorsan', 'ek voros'],\n            yy: [number + ' vorsamni', number + ' vorsam'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months: {\n            standalone:\n                'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n                    '_'\n                ),\n            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [vazta]',\n            LTS: 'A h:mm:ss [vazta]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [vazta]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n        },\n        calendar: {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Fuddlo] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fattlo] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s adim',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /rati|sokallim|donparam|sanje/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokallim') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokallim';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        },\n    });\n\n    return gomLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '૧',\n            2: '૨',\n            3: '૩',\n            4: '૪',\n            5: '૫',\n            6: '૬',\n            7: '૭',\n            8: '૮',\n            9: '૯',\n            0: '૦',\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0',\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n            '_'\n        ),\n        monthsShort:\n            'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n            '_'\n        ),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પહેલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ',\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return gu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var he = moment.defineLocale('he', {\n        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n            '_'\n        ),\n        monthsShort:\n            'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [ב]MMMM YYYY',\n            LLL: 'D [ב]MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[היום ב־]LT',\n            nextDay: '[מחר ב־]LT',\n            nextWeek: 'dddd [בשעה] LT',\n            lastDay: '[אתמול ב־]LT',\n            lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'בעוד %s',\n            past: 'לפני %s',\n            s: 'מספר שניות',\n            ss: '%d שניות',\n            m: 'דקה',\n            mm: '%d דקות',\n            h: 'שעה',\n            hh: function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d: 'יום',\n            dd: function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M: 'חודש',\n            MM: function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y: 'שנה',\n            yy: function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            },\n        },\n        meridiemParse:\n            /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM: function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        },\n    });\n\n    return he;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        },\n        monthsParse = [\n            /^जन/i,\n            /^फ़र|फर/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सितं|सित/i,\n            /^अक्टू/i,\n            /^नव|नवं/i,\n            /^दिसं|दिस/i,\n        ],\n        shortMonthsParse = [\n            /^जन/i,\n            /^फ़र/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सित/i,\n            /^अक्टू/i,\n            /^नव/i,\n            /^दिस/i,\n        ];\n\n    var hi = moment.defineLocale('hi', {\n        months: {\n            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n                '_'\n            ),\n            standalone:\n                'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm बजे',\n            LTS: 'A h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n        },\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: shortMonthsParse,\n\n        monthsRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsShortRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsStrictRegex:\n            /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n        monthsShortStrictRegex:\n            /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[कल] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[कल] LT',\n            lastWeek: '[पिछले] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s में',\n            past: '%s पहले',\n            s: 'कुछ ही क्षण',\n            ss: '%d सेकंड',\n            m: 'एक मिनट',\n            mm: '%d मिनट',\n            h: 'एक घंटा',\n            hh: '%d घंटे',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महीने',\n            MM: '%d महीने',\n            y: 'एक वर्ष',\n            yy: '%d वर्ष',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return hi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months: {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n                '_'\n            ),\n            standalone:\n                'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM YYYY',\n            LLL: 'Do MMMM YYYY H:mm',\n            LLLL: 'dddd, Do MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prošlu] [nedjelju] [u] LT';\n                    case 3:\n                        return '[prošlu] [srijedu] [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt  : https://github.com/passatgt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var weekEndings =\n        'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix)\n                    ? ' másodperc'\n                    : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY. MMMM D.',\n            LLL: 'YYYY. MMMM D. H:mm',\n            LLLL: 'YYYY. MMMM D., dddd H:mm',\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar: {\n            sameDay: '[ma] LT[-kor]',\n            nextDay: '[holnap] LT[-kor]',\n            nextWeek: function () {\n                return week.call(this, true);\n            },\n            lastDay: '[tegnap] LT[-kor]',\n            lastWeek: function () {\n                return week.call(this, false);\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s múlva',\n            past: '%s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return hu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months: {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n                '_'\n            ),\n            standalone:\n                'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays:\n            'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n                '_'\n            ),\n        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY թ.',\n            LLL: 'D MMMM YYYY թ., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n        },\n        calendar: {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s հետո',\n            past: '%s առաջ',\n            s: 'մի քանի վայրկյան',\n            ss: '%d վայրկյան',\n            m: 'րոպե',\n            mm: '%d րոպե',\n            h: 'ժամ',\n            hh: '%d ժամ',\n            d: 'օր',\n            dd: '%d օր',\n            M: 'ամիս',\n            MM: '%d ամիս',\n            y: 'տարի',\n            yy: '%d տարի',\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem: function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hyAm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var id = moment.defineLocale('id', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Besok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kemarin pukul] LT',\n            lastWeek: 'dddd [lalu pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lalu',\n            s: 'beberapa detik',\n            ss: '%d detik',\n            m: 'semenit',\n            mm: '%d menit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return id;\n\n})));\n","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nokkrar sekúndur'\n                    : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n                    );\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return (\n                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n                    );\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture\n                            ? 'klukkustundir'\n                            : 'klukkustundum')\n                    );\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n        },\n        calendar: {\n            sameDay: '[í dag kl.] LT',\n            nextDay: '[á morgun kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[í gær kl.] LT',\n            lastWeek: '[síðasta] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'eftir %s',\n            past: 'fyrir %s síðan',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: 'klukkustund',\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return is;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var it = moment.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return it;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var itCh = moment.defineLocale('it-ch', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return itCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ja = moment.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    return ja;\n\n})));\n","//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var jv = moment.defineLocale('jv', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar: {\n            sameDay: '[Dinten puniko pukul] LT',\n            nextDay: '[Mbenjang pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kala wingi pukul] LT',\n            lastWeek: 'dddd [kepengker pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'wonten ing %s',\n            past: '%s ingkang kepengker',\n            s: 'sawetawis detik',\n            ss: '%d detik',\n            m: 'setunggal menit',\n            mm: '%d menit',\n            h: 'setunggal jam',\n            hh: '%d jam',\n            d: 'sedinten',\n            dd: '%d dinten',\n            M: 'sewulan',\n            MM: '%d wulan',\n            y: 'setaun',\n            yy: '%d taun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return jv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ka = moment.defineLocale('ka', {\n        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n            '_'\n        ),\n        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays: {\n            standalone:\n                'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n                    '_'\n                ),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n                '_'\n            ),\n            isFormat: /(წინა|შემდეგ)/,\n        },\n        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[დღეს] LT[-ზე]',\n            nextDay: '[ხვალ] LT[-ზე]',\n            lastDay: '[გუშინ] LT[-ზე]',\n            nextWeek: '[შემდეგ] dddd LT[-ზე]',\n            lastWeek: '[წინა] dddd LT-ზე',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return s.replace(\n                    /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,\n                    function ($0, $1, $2) {\n                        return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n                    }\n                );\n            },\n            past: function (s) {\n                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if (/წელი/.test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n                return s;\n            },\n            s: 'რამდენიმე წამი',\n            ss: '%d წამი',\n            m: 'წუთი',\n            mm: '%d წუთი',\n            h: 'საათი',\n            hh: '%d საათი',\n            d: 'დღე',\n            dd: '%d დღე',\n            M: 'თვე',\n            MM: '%d თვე',\n            y: 'წელი',\n            yy: '%d წელი',\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal: function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if (\n                number < 20 ||\n                (number <= 100 && number % 20 === 0) ||\n                number % 100 === 0\n            ) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week: {\n            dow: 1,\n            doy: 7,\n        },\n    });\n\n    return ka;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші',\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n            '_'\n        ),\n        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n            '_'\n        ),\n        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгін сағат] LT',\n            nextDay: '[Ертең сағат] LT',\n            nextWeek: 'dddd [сағат] LT',\n            lastDay: '[Кеше сағат] LT',\n            lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ішінде',\n            past: '%s бұрын',\n            s: 'бірнеше секунд',\n            ss: '%d секунд',\n            m: 'бір минут',\n            mm: '%d минут',\n            h: 'бір сағат',\n            hh: '%d сағат',\n            d: 'бір күн',\n            dd: '%d күн',\n            M: 'бір ай',\n            MM: '%d ай',\n            y: 'бір жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return kk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '១',\n            2: '២',\n            3: '៣',\n            4: '៤',\n            5: '៥',\n            6: '៦',\n            7: '៧',\n            8: '៨',\n            9: '៩',\n            0: '០',\n        },\n        numberMap = {\n            '១': '1',\n            '២': '2',\n            '៣': '3',\n            '៤': '4',\n            '៥': '5',\n            '៦': '6',\n            '៧': '7',\n            '៨': '8',\n            '៩': '9',\n            '០': '0',\n        };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort:\n            'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n                '_'\n            ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ',\n        },\n        dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n        ordinal: 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return km;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '೧',\n            2: '೨',\n            3: '೩',\n            4: '೪',\n            5: '೫',\n            6: '೬',\n            7: '೭',\n            8: '೮',\n            9: '೯',\n            0: '೦',\n        },\n        numberMap = {\n            '೧': '1',\n            '೨': '2',\n            '೩': '3',\n            '೪': '4',\n            '೫': '5',\n            '೬': '6',\n            '೭': '7',\n            '೮': '8',\n            '೯': '9',\n            '೦': '0',\n        };\n\n    var kn = moment.defineLocale('kn', {\n        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n            '_'\n        ),\n        monthsShort:\n            'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[ಇಂದು] LT',\n            nextDay: '[ನಾಳೆ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ನಿನ್ನೆ] LT',\n            lastWeek: '[ಕೊನೆಯ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ನಂತರ',\n            past: '%s ಹಿಂದೆ',\n            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss: '%d ಸೆಕೆಂಡುಗಳು',\n            m: 'ಒಂದು ನಿಮಿಷ',\n            mm: '%d ನಿಮಿಷ',\n            h: 'ಒಂದು ಗಂಟೆ',\n            hh: '%d ಗಂಟೆ',\n            d: 'ಒಂದು ದಿನ',\n            dd: '%d ದಿನ',\n            M: 'ಒಂದು ತಿಂಗಳು',\n            MM: '%d ತಿಂಗಳು',\n            y: 'ಒಂದು ವರ್ಷ',\n            yy: '%d ವರ್ಷ',\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal: function (number) {\n            return number + 'ನೇ';\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return kn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ko = moment.defineLocale('ko', {\n        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n            '_'\n        ),\n        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY년 MMMM D일',\n            LLL: 'YYYY년 MMMM D일 A h:mm',\n            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n            l: 'YYYY.MM.DD.',\n            ll: 'YYYY년 MMMM D일',\n            lll: 'YYYY년 MMMM D일 A h:mm',\n            llll: 'YYYY년 MMMM D일 dddd A h:mm',\n        },\n        calendar: {\n            sameDay: '오늘 LT',\n            nextDay: '내일 LT',\n            nextWeek: 'dddd LT',\n            lastDay: '어제 LT',\n            lastWeek: '지난주 dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s 후',\n            past: '%s 전',\n            s: '몇 초',\n            ss: '%d초',\n            m: '1분',\n            mm: '%d분',\n            h: '한 시간',\n            hh: '%d시간',\n            d: '하루',\n            dd: '%d일',\n            M: '한 달',\n            MM: '%d달',\n            y: '일 년',\n            yy: '%d년',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse: /오전|오후/,\n        isPM: function (token) {\n            return token === '오후';\n        },\n        meridiem: function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        },\n    });\n\n    return ko;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        months = [\n            'کانونی دووەم',\n            'شوبات',\n            'ئازار',\n            'نیسان',\n            'ئایار',\n            'حوزەیران',\n            'تەمموز',\n            'ئاب',\n            'ئەیلوول',\n            'تشرینی یەكەم',\n            'تشرینی دووەم',\n            'كانونی یەکەم',\n        ];\n\n    var ku = moment.defineLocale('ku', {\n        months: months,\n        monthsShort: months,\n        weekdays:\n            'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar: {\n            sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay: '[به‌یانی كاتژمێر] LT',\n            nextWeek: 'dddd [كاتژمێر] LT',\n            lastDay: '[دوێنێ كاتژمێر] LT',\n            lastWeek: 'dddd [كاتژمێر] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'له‌ %s',\n            past: '%s',\n            s: 'چه‌ند چركه‌یه‌ك',\n            ss: 'چركه‌ %d',\n            m: 'یه‌ك خوله‌ك',\n            mm: '%d خوله‌ك',\n            h: 'یه‌ك كاتژمێر',\n            hh: '%d كاتژمێر',\n            d: 'یه‌ك ڕۆژ',\n            dd: '%d ڕۆژ',\n            M: 'یه‌ك مانگ',\n            MM: '%d مانگ',\n            y: 'یه‌ك ساڵ',\n            yy: '%d ساڵ',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ku;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Kurdish [ku-kmr]\n//! authors : Mazlum Özdogan : https://github.com/mergehez\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(num, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['çend sanîye', 'çend sanîyeyan'],\n            ss: [num + ' sanîye', num + ' sanîyeyan'],\n            m: ['deqîqeyek', 'deqîqeyekê'],\n            mm: [num + ' deqîqe', num + ' deqîqeyan'],\n            h: ['saetek', 'saetekê'],\n            hh: [num + ' saet', num + ' saetan'],\n            d: ['rojek', 'rojekê'],\n            dd: [num + ' roj', num + ' rojan'],\n            w: ['hefteyek', 'hefteyekê'],\n            ww: [num + ' hefte', num + ' hefteyan'],\n            M: ['mehek', 'mehekê'],\n            MM: [num + ' meh', num + ' mehan'],\n            y: ['salek', 'salekê'],\n            yy: [num + ' sal', num + ' salan'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    // function obliqueNumSuffix(num) {\n    //     if(num.includes(':'))\n    //         num = parseInt(num.split(':')[0]);\n    //     else\n    //         num = parseInt(num);\n    //     return num == 0 || num % 10 == 1 ? 'ê'\n    //                         : (num > 10 && num % 10 == 0 ? 'î' : 'an');\n    // }\n    function ezafeNumSuffix(num) {\n        num = '' + num;\n        var l = num.substring(num.length - 1),\n            ll = num.length > 1 ? num.substring(num.length - 2) : '';\n        if (\n            !(ll == 12 || ll == 13) &&\n            (l == '2' || l == '3' || ll == '50' || l == '70' || l == '80')\n        )\n            return 'yê';\n        return 'ê';\n    }\n\n    var kuKmr = moment.defineLocale('ku-kmr', {\n        // According to the spelling rules defined by the work group of Weqfa Mezopotamyayê (Mesopotamia Foundation)\n        // this should be: 'Kanûna Paşîn_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Çirîya Pêşîn_Çirîya Paşîn_Kanûna Pêşîn'\n        // But the names below are more well known and handy\n        months: 'Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar'.split(\n            '_'\n        ),\n        monthsShort: 'Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî'.split('_'),\n        weekdaysShort: 'Yek_Du_Sê_Çar_Pên_În_Şem'.split('_'),\n        weekdaysMin: 'Ye_Du_Sê_Ça_Pê_În_Şe'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'bn' : 'BN';\n            } else {\n                return isLower ? 'pn' : 'PN';\n            }\n        },\n        meridiemParse: /bn|BN|pn|PN/,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[a] YYYY[an]',\n            LLL: 'Do MMMM[a] YYYY[an] HH:mm',\n            LLLL: 'dddd, Do MMMM[a] YYYY[an] HH:mm',\n            ll: 'Do MMM[.] YYYY[an]',\n            lll: 'Do MMM[.] YYYY[an] HH:mm',\n            llll: 'ddd[.], Do MMM[.] YYYY[an] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Îro di saet] LT [de]',\n            nextDay: '[Sibê di saet] LT [de]',\n            nextWeek: 'dddd [di saet] LT [de]',\n            lastDay: '[Duh di saet] LT [de]',\n            lastWeek: 'dddd[a borî di saet] LT [de]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'di %s de',\n            past: 'berî %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(?:yê|ê|\\.)/,\n        ordinal: function (num, period) {\n            var p = period.toLowerCase();\n            if (p.includes('w') || p.includes('m')) return num + '.';\n\n            return num + ezafeNumSuffix(num);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return kuKmr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү',\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n            '_'\n        ),\n        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n            '_'\n        ),\n        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгүн саат] LT',\n            nextDay: '[Эртең саат] LT',\n            nextWeek: 'dddd [саат] LT',\n            lastDay: '[Кечээ саат] LT',\n            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ичинде',\n            past: '%s мурун',\n            s: 'бирнече секунд',\n            ss: '%d секунд',\n            m: 'бир мүнөт',\n            mm: '%d мүнөт',\n            h: 'бир саат',\n            hh: '%d саат',\n            d: 'бир күн',\n            dd: '%d күн',\n            M: 'бир ай',\n            MM: '%d ай',\n            y: 'бир жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ky;\n\n})));\n","//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eng Minutt', 'enger Minutt'],\n            h: ['eng Stonn', 'enger Stonn'],\n            d: ['een Dag', 'engem Dag'],\n            M: ['ee Mount', 'engem Mount'],\n            y: ['ee Joer', 'engem Joer'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10,\n                firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            },\n        },\n        relativeTime: {\n            future: processFutureTime,\n            past: processPastTime,\n            s: 'e puer Sekonnen',\n            ss: '%d Sekonnen',\n            m: processRelativeTime,\n            mm: '%d Minutten',\n            h: processRelativeTime,\n            hh: '%d Stonnen',\n            d: processRelativeTime,\n            dd: '%d Deeg',\n            M: processRelativeTime,\n            MM: '%d Méint',\n            y: processRelativeTime,\n            yy: '%d Joer',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var lo = moment.defineLocale('lo', {\n        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n                '_'\n            ),\n        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar: {\n            sameDay: '[ມື້ນີ້ເວລາ] LT',\n            nextDay: '[ມື້ອື່ນເວລາ] LT',\n            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ອີກ %s',\n            past: '%sຜ່ານມາ',\n            s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss: '%d ວິນາທີ',\n            m: '1 ນາທີ',\n            mm: '%d ນາທີ',\n            h: '1 ຊົ່ວໂມງ',\n            hh: '%d ຊົ່ວໂມງ',\n            d: '1 ມື້',\n            dd: '%d ມື້',\n            M: '1 ເດືອນ',\n            MM: '%d ເດືອນ',\n            y: '1 ປີ',\n            yy: '%d ປີ',\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal: function (number) {\n            return 'ທີ່' + number;\n        },\n    });\n\n    return lo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundė_sekundžių_sekundes',\n        m: 'minutė_minutės_minutę',\n        mm: 'minutės_minučių_minutes',\n        h: 'valanda_valandos_valandą',\n        hh: 'valandos_valandų_valandas',\n        d: 'diena_dienos_dieną',\n        dd: 'dienos_dienų_dienas',\n        M: 'mėnuo_mėnesio_mėnesį',\n        MM: 'mėnesiai_mėnesių_mėnesius',\n        y: 'metai_metų_metus',\n        yy: 'metai_metų_metus',\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix\n            ? forms(key)[0]\n            : isFuture\n              ? forms(key)[1]\n              : forms(key)[2];\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return (\n                result + translateSingular(number, withoutSuffix, key[0], isFuture)\n            );\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months: {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n                '_'\n            ),\n            standalone:\n                'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n                    '_'\n                ),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n        },\n        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays: {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n                '_'\n            ),\n            standalone:\n                'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n                    '_'\n                ),\n            isFormat: /dddd HH:mm/,\n        },\n        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY [m.] MMMM D [d.]',\n            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l: 'YYYY-MM-DD',\n            ll: 'YYYY [m.] MMMM D [d.]',\n            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n        },\n        calendar: {\n            sameDay: '[Šiandien] LT',\n            nextDay: '[Rytoj] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[Vakar] LT',\n            lastWeek: '[Praėjusį] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'po %s',\n            past: 'prieš %s',\n            s: translateSeconds,\n            ss: translate,\n            m: translateSingular,\n            mm: translate,\n            h: translateSingular,\n            hh: translate,\n            d: translateSingular,\n            dd: translate,\n            M: translateSingular,\n            MM: translate,\n            y: translateSingular,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal: function (number) {\n            return number + '-oji';\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        h: 'stundas_stundām_stunda_stundas'.split('_'),\n        hh: 'stundas_stundām_stunda_stundas'.split('_'),\n        d: 'dienas_dienām_diena_dienas'.split('_'),\n        dd: 'dienas_dienām_diena_dienas'.split('_'),\n        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        y: 'gada_gadiem_gads_gadi'.split('_'),\n        yy: 'gada_gadiem_gads_gadi'.split('_'),\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays:\n            'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY.',\n            LL: 'YYYY. [gada] D. MMMM',\n            LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n        },\n        calendar: {\n            sameDay: '[Šodien pulksten] LT',\n            nextDay: '[Rīt pulksten] LT',\n            nextWeek: 'dddd [pulksten] LT',\n            lastDay: '[Vakar pulksten] LT',\n            lastWeek: '[Pagājušā] dddd [pulksten] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'pēc %s',\n            past: 'pirms %s',\n            s: relativeSeconds,\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithSingular,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithSingular,\n            hh: relativeTimeWithPlural,\n            d: relativeTimeWithSingular,\n            dd: relativeTimeWithPlural,\n            M: relativeTimeWithSingular,\n            MM: relativeTimeWithPlural,\n            y: relativeTimeWithSingular,\n            yy: relativeTimeWithPlural,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                  ? wordKey[1]\n                  : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'dan',\n            dd: translator.translate,\n            M: 'mjesec',\n            MM: translator.translate,\n            y: 'godinu',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return me;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n            '_'\n        ),\n        monthsShort:\n            'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n                '_'\n            ),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mk = moment.defineLocale('mk', {\n        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Денес во] LT',\n            nextDay: '[Утре во] LT',\n            nextWeek: '[Во] dddd [во] LT',\n            lastDay: '[Вчера во] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пред %s',\n            s: 'неколку секунди',\n            ss: '%d секунди',\n            m: 'една минута',\n            mm: '%d минути',\n            h: 'еден час',\n            hh: '%d часа',\n            d: 'еден ден',\n            dd: '%d дена',\n            M: 'еден месец',\n            MM: '%d месеци',\n            y: 'една година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return mk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ml = moment.defineLocale('ml', {\n        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n                '_'\n            ),\n        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm -നു',\n            LTS: 'A h:mm:ss -നു',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm -നു',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n        },\n        calendar: {\n            sameDay: '[ഇന്ന്] LT',\n            nextDay: '[നാളെ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ഇന്നലെ] LT',\n            lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s കഴിഞ്ഞ്',\n            past: '%s മുൻപ്',\n            s: 'അൽപ നിമിഷങ്ങൾ',\n            ss: '%d സെക്കൻഡ്',\n            m: 'ഒരു മിനിറ്റ്',\n            mm: '%d മിനിറ്റ്',\n            h: 'ഒരു മണിക്കൂർ',\n            hh: '%d മണിക്കൂർ',\n            d: 'ഒരു ദിവസം',\n            dd: '%d ദിവസം',\n            M: 'ഒരു മാസം',\n            MM: '%d മാസം',\n            y: 'ഒരു വർഷം',\n            yy: '%d വർഷം',\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        },\n    });\n\n    return ml;\n\n})));\n","//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n            '_'\n        ),\n        monthsShort:\n            '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY оны MMMMын D',\n            LLL: 'YYYY оны MMMMын D HH:mm',\n            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM: function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar: {\n            sameDay: '[Өнөөдөр] LT',\n            nextDay: '[Маргааш] LT',\n            nextWeek: '[Ирэх] dddd LT',\n            lastDay: '[Өчигдөр] LT',\n            lastWeek: '[Өнгөрсөн] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s дараа',\n            past: '%s өмнө',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        },\n    });\n\n    return mn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंद';\n                    break;\n                case 'ss':\n                    output = '%d सेकंद';\n                    break;\n                case 'm':\n                    output = 'एक मिनिट';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटे';\n                    break;\n                case 'h':\n                    output = 'एक तास';\n                    break;\n                case 'hh':\n                    output = '%d तास';\n                    break;\n                case 'd':\n                    output = 'एक दिवस';\n                    break;\n                case 'dd':\n                    output = '%d दिवस';\n                    break;\n                case 'M':\n                    output = 'एक महिना';\n                    break;\n                case 'MM':\n                    output = '%d महिने';\n                    break;\n                case 'y':\n                    output = 'एक वर्ष';\n                    break;\n                case 'yy':\n                    output = '%d वर्षे';\n                    break;\n            }\n        } else {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंदां';\n                    break;\n                case 'ss':\n                    output = '%d सेकंदां';\n                    break;\n                case 'm':\n                    output = 'एका मिनिटा';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटां';\n                    break;\n                case 'h':\n                    output = 'एका तासा';\n                    break;\n                case 'hh':\n                    output = '%d तासां';\n                    break;\n                case 'd':\n                    output = 'एका दिवसा';\n                    break;\n                case 'dd':\n                    output = '%d दिवसां';\n                    break;\n                case 'M':\n                    output = 'एका महिन्या';\n                    break;\n                case 'MM':\n                    output = '%d महिन्यां';\n                    break;\n                case 'y':\n                    output = 'एका वर्षा';\n                    break;\n                case 'yy':\n                    output = '%d वर्षां';\n                    break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm वाजता',\n            LTS: 'A h:mm:ss वाजता',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm वाजता',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[उद्या] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr,\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n                return hour;\n            } else if (\n                meridiem === 'दुपारी' ||\n                meridiem === 'सायंकाळी' ||\n                meridiem === 'रात्री'\n            ) {\n                return hour >= 12 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour >= 0 && hour < 6) {\n                return 'पहाटे';\n            } else if (hour < 12) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return mr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ms = moment.defineLocale('ms', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ms;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var msMy = moment.defineLocale('ms-my', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return msMy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mt = moment.defineLocale('mt', {\n        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays:\n            'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n                '_'\n            ),\n        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Illum fil-]LT',\n            nextDay: '[Għada fil-]LT',\n            nextWeek: 'dddd [fil-]LT',\n            lastDay: '[Il-bieraħ fil-]LT',\n            lastWeek: 'dddd [li għadda] [fil-]LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'f’ %s',\n            past: '%s ilu',\n            s: 'ftit sekondi',\n            ss: '%d sekondi',\n            m: 'minuta',\n            mm: '%d minuti',\n            h: 'siegħa',\n            hh: '%d siegħat',\n            d: 'ġurnata',\n            dd: '%d ġranet',\n            M: 'xahar',\n            MM: '%d xhur',\n            y: 'sena',\n            yy: '%d sni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '၁',\n            2: '၂',\n            3: '၃',\n            4: '၄',\n            5: '၅',\n            6: '၆',\n            7: '၇',\n            8: '၈',\n            9: '၉',\n            0: '၀',\n        },\n        numberMap = {\n            '၁': '1',\n            '၂': '2',\n            '၃': '3',\n            '၄': '4',\n            '၅': '5',\n            '၆': '6',\n            '၇': '7',\n            '၈': '8',\n            '၉': '9',\n            '၀': '0',\n        };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n            '_'\n        ),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n            '_'\n        ),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss: '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်',\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return my;\n\n})));\n","//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nb = moment.defineLocale('nb', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'noen sekunder',\n            ss: '%d sekunder',\n            m: 'ett minutt',\n            mm: '%d minutter',\n            h: 'én time',\n            hh: '%d timer',\n            d: 'én dag',\n            dd: '%d dager',\n            w: 'én uke',\n            ww: '%d uker',\n            M: 'én måned',\n            MM: '%d måneder',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    var ne = moment.defineLocale('ne', {\n        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n            '_'\n        ),\n        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'Aको h:mm बजे',\n            LTS: 'Aको h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[भोलि] LT',\n            nextWeek: '[आउँदो] dddd[,] LT',\n            lastDay: '[हिजो] LT',\n            lastWeek: '[गएको] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमा',\n            past: '%s अगाडि',\n            s: 'केही क्षण',\n            ss: '%d सेकेण्ड',\n            m: 'एक मिनेट',\n            mm: '%d मिनेट',\n            h: 'एक घण्टा',\n            hh: '%d घण्टा',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महिना',\n            MM: '%d महिना',\n            y: 'एक बर्ष',\n            yy: '%d बर्ष',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ne;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^(maart|mrt\\.?)$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^(maart|mrt\\.?)$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nlBe;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nn = moment.defineLocale('nn', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s sidan',\n            s: 'nokre sekund',\n            ss: '%d sekund',\n            m: 'eit minutt',\n            mm: '%d minutt',\n            h: 'ein time',\n            hh: '%d timar',\n            d: 'ein dag',\n            dd: '%d dagar',\n            w: 'ei veke',\n            ww: '%d veker',\n            M: 'ein månad',\n            MM: '%d månader',\n            y: 'eit år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ocLnc = moment.defineLocale('oc-lnc', {\n        months: {\n            standalone:\n                'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n                    '_'\n                ),\n            format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n            '_'\n        ),\n        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: '[uèi a] LT',\n            nextDay: '[deman a] LT',\n            nextWeek: 'dddd [a] LT',\n            lastDay: '[ièr a] LT',\n            lastWeek: 'dddd [passat a] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'unas segondas',\n            ss: '%d segondas',\n            m: 'una minuta',\n            mm: '%d minutas',\n            h: 'una ora',\n            hh: '%d oras',\n            d: 'un jorn',\n            dd: '%d jorns',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                      ? 'n'\n                      : number === 3\n                        ? 'r'\n                        : number === 4\n                          ? 't'\n                          : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4,\n        },\n    });\n\n    return ocLnc;\n\n})));\n","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '੧',\n            2: '੨',\n            3: '੩',\n            4: '੪',\n            5: '੫',\n            6: '੬',\n            7: '੭',\n            8: '੮',\n            9: '੯',\n            0: '੦',\n        },\n        numberMap = {\n            '੧': '1',\n            '੨': '2',\n            '੩': '3',\n            '੪': '4',\n            '੫': '5',\n            '੬': '6',\n            '੭': '7',\n            '੮': '8',\n            '੯': '9',\n            '੦': '0',\n        };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n                '_'\n            ),\n        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm ਵਜੇ',\n            LTS: 'A h:mm:ss ਵਜੇ',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n        },\n        calendar: {\n            sameDay: '[ਅਜ] LT',\n            nextDay: '[ਕਲ] LT',\n            nextWeek: '[ਅਗਲਾ] dddd, LT',\n            lastDay: '[ਕਲ] LT',\n            lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ਵਿੱਚ',\n            past: '%s ਪਿਛਲੇ',\n            s: 'ਕੁਝ ਸਕਿੰਟ',\n            ss: '%d ਸਕਿੰਟ',\n            m: 'ਇਕ ਮਿੰਟ',\n            mm: '%d ਮਿੰਟ',\n            h: 'ਇੱਕ ਘੰਟਾ',\n            hh: '%d ਘੰਟੇ',\n            d: 'ਇੱਕ ਦਿਨ',\n            dd: '%d ਦਿਨ',\n            M: 'ਇੱਕ ਮਹੀਨਾ',\n            MM: '%d ਮਹੀਨੇ',\n            y: 'ਇੱਕ ਸਾਲ',\n            yy: '%d ਸਾਲ',\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return paIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsNominative =\n            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n                '_'\n            ),\n        monthsSubjective =\n            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n                '_'\n            ),\n        monthsParse = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays:\n            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate,\n            M: 'miesiąc',\n            MM: translate,\n            y: 'rok',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pt = moment.defineLocale('pt', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            w: 'uma semana',\n            ww: '%d semanas',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'poucos segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        invalidDate: 'Data inválida',\n    });\n\n    return ptBr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                ss: 'secunde',\n                mm: 'minute',\n                hh: 'ore',\n                dd: 'zile',\n                ww: 'săptămâni',\n                MM: 'luni',\n                yy: 'ani',\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n            '_'\n        ),\n        monthsShort:\n            'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'peste %s',\n            past: '%s în urmă',\n            s: 'câteva secunde',\n            ss: relativeTimeWithPlural,\n            m: 'un minut',\n            mm: relativeTimeWithPlural,\n            h: 'o oră',\n            hh: relativeTimeWithPlural,\n            d: 'o zi',\n            dd: relativeTimeWithPlural,\n            w: 'o săptămână',\n            ww: relativeTimeWithPlural,\n            M: 'o lună',\n            MM: relativeTimeWithPlural,\n            y: 'un an',\n            yy: relativeTimeWithPlural,\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ro;\n\n})));\n","//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone:\n                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                    '_'\n                ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone:\n                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                    '_'\n                ),\n        },\n        weekdays: {\n            standalone:\n                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                    '_'\n                ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex:\n            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соответствует только сокращённым формам\n        monthsShortStrictRegex:\n            /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., H:mm',\n            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n        },\n        calendar: {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'через %s',\n            past: '%s назад',\n            s: 'несколько секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'час',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            w: 'неделя',\n            ww: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM: function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ru;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوري',\n            'فيبروري',\n            'مارچ',\n            'اپريل',\n            'مئي',\n            'جون',\n            'جولاءِ',\n            'آگسٽ',\n            'سيپٽمبر',\n            'آڪٽوبر',\n            'نومبر',\n            'ڊسمبر',\n        ],\n        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n    var sd = moment.defineLocale('sd', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[اڄ] LT',\n            nextDay: '[سڀاڻي] LT',\n            nextWeek: 'dddd [اڳين هفتي تي] LT',\n            lastDay: '[ڪالهه] LT',\n            lastWeek: '[گزريل هفتي] dddd [تي] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s پوء',\n            past: '%s اڳ',\n            s: 'چند سيڪنڊ',\n            ss: '%d سيڪنڊ',\n            m: 'هڪ منٽ',\n            mm: '%d منٽ',\n            h: 'هڪ ڪلاڪ',\n            hh: '%d ڪلاڪ',\n            d: 'هڪ ڏينهن',\n            dd: '%d ڏينهن',\n            M: 'هڪ مهينو',\n            MM: '%d مهينا',\n            y: 'هڪ سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var se = moment.defineLocale('se', {\n        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n            '_'\n        ),\n        monthsShort:\n            'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays:\n            'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n                '_'\n            ),\n        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'MMMM D. [b.] YYYY',\n            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s geažes',\n            past: 'maŋit %s',\n            s: 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m: 'okta minuhta',\n            mm: '%d minuhtat',\n            h: 'okta diimmu',\n            hh: '%d diimmut',\n            d: 'okta beaivi',\n            dd: '%d beaivvit',\n            M: 'okta mánnu',\n            MM: '%d mánut',\n            y: 'okta jahki',\n            yy: '%d jagit',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return se;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n            '_'\n        ),\n        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n            '_'\n        ),\n        weekdays:\n            'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n                '_'\n            ),\n        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'a h:mm',\n            LTS: 'a h:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY MMMM D',\n            LLL: 'YYYY MMMM D, a h:mm',\n            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n        },\n        calendar: {\n            sameDay: '[අද] LT[ට]',\n            nextDay: '[හෙට] LT[ට]',\n            nextWeek: 'dddd LT[ට]',\n            lastDay: '[ඊයේ] LT[ට]',\n            lastWeek: '[පසුගිය] dddd LT[ට]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sකින්',\n            past: '%sකට පෙර',\n            s: 'තත්පර කිහිපය',\n            ss: 'තත්පර %d',\n            m: 'මිනිත්තුව',\n            mm: 'මිනිත්තු %d',\n            h: 'පැය',\n            hh: 'පැය %d',\n            d: 'දිනය',\n            dd: 'දින %d',\n            M: 'මාසය',\n            MM: 'මාස %d',\n            y: 'වසර',\n            yy: 'වසර %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal: function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM: function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        },\n    });\n\n    return si;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months =\n            'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n                '_'\n            ),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return n > 1 && n < 5;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months: months,\n        monthsShort: monthsShort,\n        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pred %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nekaj sekund'\n                    : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD. MM. YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danes ob] LT',\n            nextDay: '[jutri ob] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay: '[včeraj ob] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'čez %s',\n            past: 'pred %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sq = moment.defineLocale('sq', {\n        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n            '_'\n        ),\n        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Sot në] LT',\n            nextDay: '[Nesër në] LT',\n            nextWeek: 'dddd [në] LT',\n            lastDay: '[Dje në] LT',\n            lastWeek: 'dddd [e kaluar në] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'në %s',\n            past: '%s më parë',\n            s: 'disa sekonda',\n            ss: '%d sekonda',\n            m: 'një minutë',\n            mm: '%d minuta',\n            h: 'një orë',\n            hh: '%d orë',\n            d: 'një ditë',\n            dd: '%d ditë',\n            M: 'një muaj',\n            MM: '%d muaj',\n            y: 'një vit',\n            yy: '%d vite',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sq;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            d: ['jedan dan', 'jednog dana'],\n            dd: ['dan', 'dana', 'dana'],\n            M: ['jedan mesec', 'jednog meseca'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            y: ['jednu godinu', 'jedne godine'],\n            yy: ['godinu', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'jedna godina';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'godinu') {\n                return number + ' godina';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pre %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једног минута'],\n            mm: ['минут', 'минута', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            d: ['један дан', 'једног дана'],\n            dd: ['дан', 'дана', 'дана'],\n            M: ['један месец', 'једног месеца'],\n            MM: ['месец', 'месеца', 'месеци'],\n            y: ['једну годину', 'једне године'],\n            yy: ['годину', 'године', 'година'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'једна година';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'годину') {\n                return number + ' година';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n            '_'\n        ),\n        monthsShort:\n            'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay: '[јуче у] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пре %s',\n            s: 'неколико секунди',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return srCyrl;\n\n})));\n","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ss = moment.defineLocale('ss', {\n        months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n            '_'\n        ),\n        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays:\n            'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n                '_'\n            ),\n        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Namuhla nga] LT',\n            nextDay: '[Kusasa nga] LT',\n            nextWeek: 'dddd [nga] LT',\n            lastDay: '[Itolo nga] LT',\n            lastWeek: 'dddd [leliphelile] [nga] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'nga %s',\n            past: 'wenteka nga %s',\n            s: 'emizuzwana lomcane',\n            ss: '%d mzuzwana',\n            m: 'umzuzu',\n            mm: '%d emizuzu',\n            h: 'lihora',\n            hh: '%d emahora',\n            d: 'lilanga',\n            dd: '%d emalanga',\n            M: 'inyanga',\n            MM: '%d tinyanga',\n            y: 'umnyaka',\n            yy: '%d iminyaka',\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: '%d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ss;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sv = moment.defineLocale('sv', {\n        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: 'för %s sedan',\n            s: 'några sekunder',\n            ss: '%d sekunder',\n            m: 'en minut',\n            mm: '%d minuter',\n            h: 'en timme',\n            hh: '%d timmar',\n            d: 'en dag',\n            dd: '%d dagar',\n            M: 'en månad',\n            MM: '%d månader',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? ':e'\n                        : b === 1\n                          ? ':a'\n                          : b === 2\n                            ? ':a'\n                            : b === 3\n                              ? ':e'\n                              : ':e';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sw = moment.defineLocale('sw', {\n        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays:\n            'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n                '_'\n            ),\n        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'hh:mm A',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[leo saa] LT',\n            nextDay: '[kesho saa] LT',\n            nextWeek: '[wiki ijayo] dddd [saat] LT',\n            lastDay: '[jana] LT',\n            lastWeek: '[wiki iliyopita] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s baadaye',\n            past: 'tokea %s',\n            s: 'hivi punde',\n            ss: 'sekunde %d',\n            m: 'dakika moja',\n            mm: 'dakika %d',\n            h: 'saa limoja',\n            hh: 'masaa %d',\n            d: 'siku moja',\n            dd: 'siku %d',\n            M: 'mwezi mmoja',\n            MM: 'miezi %d',\n            y: 'mwaka mmoja',\n            yy: 'miaka %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '௧',\n            2: '௨',\n            3: '௩',\n            4: '௪',\n            5: '௫',\n            6: '௬',\n            7: '௭',\n            8: '௮',\n            9: '௯',\n            0: '௦',\n        },\n        numberMap = {\n            '௧': '1',\n            '௨': '2',\n            '௩': '3',\n            '௪': '4',\n            '௫': '5',\n            '௬': '6',\n            '௭': '7',\n            '௮': '8',\n            '௯': '9',\n            '௦': '0',\n        };\n\n    var ta = moment.defineLocale('ta', {\n        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n            '_'\n        ),\n        monthsShort:\n            'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n                '_'\n            ),\n        weekdays:\n            'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n                '_'\n            ),\n        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n            '_'\n        ),\n        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, HH:mm',\n            LLLL: 'dddd, D MMMM YYYY, HH:mm',\n        },\n        calendar: {\n            sameDay: '[இன்று] LT',\n            nextDay: '[நாளை] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[நேற்று] LT',\n            lastWeek: '[கடந்த வாரம்] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s இல்',\n            past: '%s முன்',\n            s: 'ஒரு சில விநாடிகள்',\n            ss: '%d விநாடிகள்',\n            m: 'ஒரு நிமிடம்',\n            mm: '%d நிமிடங்கள்',\n            h: 'ஒரு மணி நேரம்',\n            hh: '%d மணி நேரம்',\n            d: 'ஒரு நாள்',\n            dd: '%d நாட்கள்',\n            M: 'ஒரு மாதம்',\n            MM: '%d மாதங்கள்',\n            y: 'ஒரு வருடம்',\n            yy: '%d ஆண்டுகள்',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal: function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை'; // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ta;\n\n})));\n","//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var te = moment.defineLocale('te', {\n        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n            '_'\n        ),\n        monthsShort:\n            'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n                '_'\n            ),\n        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[నేడు] LT',\n            nextDay: '[రేపు] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[నిన్న] LT',\n            lastWeek: '[గత] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s లో',\n            past: '%s క్రితం',\n            s: 'కొన్ని క్షణాలు',\n            ss: '%d సెకన్లు',\n            m: 'ఒక నిమిషం',\n            mm: '%d నిమిషాలు',\n            h: 'ఒక గంట',\n            hh: '%d గంటలు',\n            d: 'ఒక రోజు',\n            dd: '%d రోజులు',\n            M: 'ఒక నెల',\n            MM: '%d నెలలు',\n            y: 'ఒక సంవత్సరం',\n            yy: '%d సంవత్సరాలు',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n        ordinal: '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return te;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tet = moment.defineLocale('tet', {\n        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'iha %s',\n            past: '%s liuba',\n            s: 'segundu balun',\n            ss: 'segundu %d',\n            m: 'minutu ida',\n            mm: 'minutu %d',\n            h: 'oras ida',\n            hh: 'oras %d',\n            d: 'loron ida',\n            dd: 'loron %d',\n            M: 'fulan ida',\n            MM: 'fulan %d',\n            y: 'tinan ida',\n            yy: 'tinan %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tet;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум',\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months: {\n            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n                '_'\n            ),\n            standalone:\n                'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n            '_'\n        ),\n        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Имрӯз соати] LT',\n            nextDay: '[Фардо соати] LT',\n            lastDay: '[Дирӯз соати] LT',\n            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'баъди %s',\n            past: '%s пеш',\n            s: 'якчанд сония',\n            m: 'як дақиқа',\n            mm: '%d дақиқа',\n            h: 'як соат',\n            hh: '%d соат',\n            d: 'як рӯз',\n            dd: '%d рӯз',\n            M: 'як моҳ',\n            MM: '%d моҳ',\n            y: 'як сол',\n            yy: '%d сол',\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1th is the first week of the year.\n        },\n    });\n\n    return tg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var th = moment.defineLocale('th', {\n        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n            '_'\n        ),\n        monthsShort:\n            'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY เวลา H:mm',\n            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar: {\n            sameDay: '[วันนี้ เวลา] LT',\n            nextDay: '[พรุ่งนี้ เวลา] LT',\n            nextWeek: 'dddd[หน้า เวลา] LT',\n            lastDay: '[เมื่อวานนี้ เวลา] LT',\n            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'อีก %s',\n            past: '%sที่แล้ว',\n            s: 'ไม่กี่วินาที',\n            ss: '%d วินาที',\n            m: '1 นาที',\n            mm: '%d นาที',\n            h: '1 ชั่วโมง',\n            hh: '%d ชั่วโมง',\n            d: '1 วัน',\n            dd: '%d วัน',\n            w: '1 สัปดาห์',\n            ww: '%d สัปดาห์',\n            M: '1 เดือน',\n            MM: '%d เดือน',\n            y: '1 ปี',\n            yy: '%d ปี',\n        },\n    });\n\n    return th;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inji\",\n        5: \"'inji\",\n        8: \"'inji\",\n        70: \"'inji\",\n        80: \"'inji\",\n        2: \"'nji\",\n        7: \"'nji\",\n        20: \"'nji\",\n        50: \"'nji\",\n        3: \"'ünji\",\n        4: \"'ünji\",\n        100: \"'ünji\",\n        6: \"'njy\",\n        9: \"'unjy\",\n        10: \"'unjy\",\n        30: \"'unjy\",\n        60: \"'ynjy\",\n        90: \"'ynjy\",\n    };\n\n    var tk = moment.defineLocale('tk', {\n        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n            '_'\n        ),\n        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün sagat] LT',\n            nextDay: '[ertir sagat] LT',\n            nextWeek: '[indiki] dddd [sagat] LT',\n            lastDay: '[düýn] LT',\n            lastWeek: '[geçen] dddd [sagat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s soň',\n            past: '%s öň',\n            s: 'birnäçe sekunt',\n            m: 'bir minut',\n            mm: '%d minut',\n            h: 'bir sagat',\n            hh: '%d sagat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir aý',\n            MM: '%d aý',\n            y: 'bir ýyl',\n            yy: '%d ýyl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'unjy\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlPh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'leS'\n                : output.indexOf('jar') !== -1\n                  ? time.slice(0, -3) + 'waQ'\n                  : output.indexOf('DIS') !== -1\n                    ? time.slice(0, -3) + 'nem'\n                    : time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'Hu’'\n                : output.indexOf('jar') !== -1\n                  ? time.slice(0, -3) + 'wen'\n                  : output.indexOf('DIS') !== -1\n                    ? time.slice(0, -3) + 'ben'\n                    : time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n            ten = Math.floor((number % 100) / 10),\n            one = number % 10,\n            word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[one];\n        }\n        return word === '' ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n            '_'\n        ),\n        monthsShort:\n            'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        weekdaysShort:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: translateFuture,\n            past: translatePast,\n            s: 'puS lup',\n            ss: translate,\n            m: 'wa’ tup',\n            mm: translate,\n            h: 'wa’ rep',\n            hh: translate,\n            d: 'wa’ jaj',\n            dd: translate,\n            M: 'wa’ jar',\n            MM: translate,\n            y: 'wa’ DIS',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'öö' : 'ÖÖ';\n            } else {\n                return isLower ? 'ös' : 'ÖS';\n            }\n        },\n        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n        isPM: function (input) {\n            return input === 'ös' || input === 'ÖS';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[yarın saat] LT',\n            nextWeek: '[gelecek] dddd [saat] LT',\n            lastDay: '[dün] LT',\n            lastWeek: '[geçen] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s önce',\n            s: 'birkaç saniye',\n            ss: '%d saniye',\n            m: 'bir dakika',\n            mm: '%d dakika',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            w: 'bir hafta',\n            ww: '%d hafta',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir yıl',\n            yy: '%d yıl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'ıncı\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM [dallas] YYYY',\n            LLL: 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM: function (input) {\n            return \"d'o\" === input.toLowerCase();\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? \"d'o\" : \"D'O\";\n            } else {\n                return isLower ? \"d'a\" : \"D'A\";\n            }\n        },\n        calendar: {\n            sameDay: '[oxhi à] LT',\n            nextDay: '[demà à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[ieiri à] LT',\n            lastWeek: '[sür el] dddd [lasteu à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'osprei %s',\n            past: 'ja%s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['viensas secunds', \"'iensas secunds\"],\n            ss: [number + ' secunds', '' + number + ' secunds'],\n            m: [\"'n míut\", \"'iens míut\"],\n            mm: [number + ' míuts', '' + number + ' míuts'],\n            h: [\"'n þora\", \"'iensa þora\"],\n            hh: [number + ' þoras', '' + number + ' þoras'],\n            d: [\"'n ziua\", \"'iensa ziua\"],\n            dd: [number + ' ziuas', '' + number + ' ziuas'],\n            M: [\"'n mes\", \"'iens mes\"],\n            MM: [number + ' mesen', '' + number + ' mesen'],\n            y: [\"'n ar\", \"'iens ar\"],\n            yy: [number + ' ars', '' + number + ' ars'],\n        };\n        return isFuture\n            ? format[key][0]\n            : withoutSuffix\n              ? format[key][0]\n              : format[key][1];\n    }\n\n    return tzl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzm = moment.defineLocale('tzm', {\n        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n                '_'\n            ),\n        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past: 'ⵢⴰⵏ %s',\n            s: 'ⵉⵎⵉⴽ',\n            ss: '%d ⵉⵎⵉⴽ',\n            m: 'ⵎⵉⵏⵓⴺ',\n            mm: '%d ⵎⵉⵏⵓⴺ',\n            h: 'ⵙⴰⵄⴰ',\n            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d: 'ⴰⵙⵙ',\n            dd: '%d oⵙⵙⴰⵏ',\n            M: 'ⴰⵢoⵓⵔ',\n            MM: '%d ⵉⵢⵢⵉⵔⵏ',\n            y: 'ⴰⵙⴳⴰⵙ',\n            yy: '%d ⵉⵙⴳⴰⵙⵏ',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n            '_'\n        ),\n        monthsShort:\n            'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n                '_'\n            ),\n        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dadkh s yan %s',\n            past: 'yan %s',\n            s: 'imik',\n            ss: '%d imik',\n            m: 'minuḍ',\n            mm: '%d minuḍ',\n            h: 'saɛa',\n            hh: '%d tassaɛin',\n            d: 'ass',\n            dd: '%d ossan',\n            M: 'ayowr',\n            MM: '%d iyyirn',\n            y: 'asgas',\n            yy: '%d isgasn',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzmLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n                '_'\n            ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل',\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return ugCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative:\n                    'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n                        '_'\n                    ),\n                accusative:\n                    'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n                        '_'\n                    ),\n                genitive:\n                    'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n                        '_'\n                    ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n              ? 'genitive'\n              : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone:\n                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'годину',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            M: 'місяць',\n            MM: relativeTimeWithPlural,\n            y: 'рік',\n            yy: relativeTimeWithPlural,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوری',\n            'فروری',\n            'مارچ',\n            'اپریل',\n            'مئی',\n            'جون',\n            'جولائی',\n            'اگست',\n            'ستمبر',\n            'اکتوبر',\n            'نومبر',\n            'دسمبر',\n        ],\n        days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n    var ur = moment.defineLocale('ur', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[آج بوقت] LT',\n            nextDay: '[کل بوقت] LT',\n            nextWeek: 'dddd [بوقت] LT',\n            lastDay: '[گذشتہ روز بوقت] LT',\n            lastWeek: '[گذشتہ] dddd [بوقت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s بعد',\n            past: '%s قبل',\n            s: 'چند سیکنڈ',\n            ss: '%d سیکنڈ',\n            m: 'ایک منٹ',\n            mm: '%d منٹ',\n            h: 'ایک گھنٹہ',\n            hh: '%d گھنٹے',\n            d: 'ایک دن',\n            dd: '%d دن',\n            M: 'ایک ماہ',\n            MM: '%d ماہ',\n            y: 'ایک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ur;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uz = moment.defineLocale('uz', {\n        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бугун соат] LT [да]',\n            nextDay: '[Эртага] LT [да]',\n            nextWeek: 'dddd [куни соат] LT [да]',\n            lastDay: '[Кеча соат] LT [да]',\n            lastWeek: '[Утган] dddd [куни соат] LT [да]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Якин %s ичида',\n            past: 'Бир неча %s олдин',\n            s: 'фурсат',\n            ss: '%d фурсат',\n            m: 'бир дакика',\n            mm: '%d дакика',\n            h: 'бир соат',\n            hh: '%d соат',\n            d: 'бир кун',\n            dd: '%d кун',\n            M: 'бир ой',\n            MM: '%d ой',\n            y: 'бир йил',\n            yy: '%d йил',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return uz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays:\n            'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n                '_'\n            ),\n        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bugun soat] LT [da]',\n            nextDay: '[Ertaga] LT [da]',\n            nextWeek: 'dddd [kuni soat] LT [da]',\n            lastDay: '[Kecha soat] LT [da]',\n            lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Yaqin %s ichida',\n            past: 'Bir necha %s oldin',\n            s: 'soniya',\n            ss: '%d soniya',\n            m: 'bir daqiqa',\n            mm: '%d daqiqa',\n            h: 'bir soat',\n            hh: '%d soat',\n            d: 'bir kun',\n            dd: '%d kun',\n            M: 'bir oy',\n            MM: '%d oy',\n            y: 'bir yil',\n            yy: '%d yil',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uzLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var vi = moment.defineLocale('vi', {\n        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n            '_'\n        ),\n        monthsShort:\n            'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n            '_'\n        ),\n        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /sa|ch/i,\n        isPM: function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [năm] YYYY',\n            LLL: 'D MMMM [năm] YYYY HH:mm',\n            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n            l: 'DD/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần trước lúc] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s tới',\n            past: '%s trước',\n            s: 'vài giây',\n            ss: '%d giây',\n            m: 'một phút',\n            mm: '%d phút',\n            h: 'một giờ',\n            hh: '%d giờ',\n            d: 'một ngày',\n            dd: '%d ngày',\n            w: 'một tuần',\n            ww: '%d tuần',\n            M: 'một tháng',\n            MM: '%d tháng',\n            y: 'một năm',\n            yy: '%d năm',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return vi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n            '_'\n        ),\n        monthsShort:\n            'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n                '_'\n            ),\n        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[T~ódá~ý át] LT',\n            nextDay: '[T~ómó~rró~w át] LT',\n            nextWeek: 'dddd [át] LT',\n            lastDay: '[Ý~ést~érdá~ý át] LT',\n            lastWeek: '[L~ást] dddd [át] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'í~ñ %s',\n            past: '%s á~gó',\n            s: 'á ~féw ~sécó~ñds',\n            ss: '%d s~écóñ~ds',\n            m: 'á ~míñ~úté',\n            mm: '%d m~íñú~tés',\n            h: 'á~ñ hó~úr',\n            hh: '%d h~óúrs',\n            d: 'á ~dáý',\n            dd: '%d d~áýs',\n            M: 'á ~móñ~th',\n            MM: '%d m~óñt~hs',\n            y: 'á ~ýéár',\n            yy: '%d ý~éárs',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return xPseudo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var yo = moment.defineLocale('yo', {\n        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n            '_'\n        ),\n        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Ònì ni] LT',\n            nextDay: '[Ọ̀la ni] LT',\n            nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n            lastDay: '[Àna ni] LT',\n            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ní %s',\n            past: '%s kọjá',\n            s: 'ìsẹjú aayá die',\n            ss: 'aayá %d',\n            m: 'ìsẹjú kan',\n            mm: 'ìsẹjú %d',\n            h: 'wákati kan',\n            hh: 'wákati %d',\n            d: 'ọjọ́ kan',\n            dd: 'ọjọ́ %d',\n            M: 'osù kan',\n            MM: 'osù %d',\n            y: 'ọdún kan',\n            yy: 'ọdún %d',\n        },\n        dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n        ordinal: 'ọjọ́ %d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return yo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日Ah点mm分',\n            LLLL: 'YYYY年M月D日ddddAh点mm分',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[下]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            lastDay: '[昨天]LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[上]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s后',\n            past: '%s前',\n            s: '几秒',\n            ss: '%d 秒',\n            m: '1 分钟',\n            mm: '%d 分钟',\n            h: '1 小时',\n            hh: '%d 小时',\n            d: '1 天',\n            dd: '%d 天',\n            w: '1 周',\n            ww: '%d 周',\n            M: '1 个月',\n            MM: '%d 个月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return zhCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1200) {\n                return '上午';\n            } else if (hm === 1200) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: '[下]ddddLT',\n            lastDay: '[昨天]LT',\n            lastWeek: '[上]ddddLT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhHk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhMo = moment.defineLocale('zh-mo', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s內',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhMo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhTw;\n\n})));\n","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.7.6\";\n\n  return Qty;\n\n})));\n","/**\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\n *\n * @version 0.10.1\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2023\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n  'use strict';\n\n  var ERROR = 'input is invalid type';\n  var WINDOW = typeof window === 'object';\n  var root = WINDOW ? window : {};\n  if (root.JS_SHA256_NO_WINDOW) {\n    WINDOW = false;\n  }\n  var WEB_WORKER = !WINDOW && typeof self === 'object';\n  var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  } else if (WEB_WORKER) {\n    root = self;\n  }\n  var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [-2147483648, 8388608, 32768, 128];\n  var SHIFT = [24, 16, 8, 0];\n  var K = [\n    0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n    0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n    0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n    0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n    0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n    0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n    0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n    0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n  ];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n  var blocks = [];\n\n  if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {\n    Array.isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n    ArrayBuffer.isView = function (obj) {\n      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n    };\n  }\n\n  var createOutputMethod = function (outputType, is224) {\n    return function (message) {\n      return new Sha256(is224, true).update(message)[outputType]();\n    };\n  };\n\n  var createMethod = function (is224) {\n    var method = createOutputMethod('hex', is224);\n    if (NODE_JS) {\n      method = nodeWrap(method, is224);\n    }\n    method.create = function () {\n      return new Sha256(is224);\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type, is224);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method, is224) {\n    var crypto = require('crypto')\n    var Buffer = require('buffer').Buffer;\n    var algorithm = is224 ? 'sha224' : 'sha256';\n    var bufferFrom;\n    if (Buffer.from && !root.JS_SHA256_NO_BUFFER_FROM) {\n      bufferFrom = Buffer.from;\n    } else {\n      bufferFrom = function (message) {\n        return new Buffer(message);\n      };\n    }\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');\n      } else {\n        if (message === null || message === undefined) {\n          throw new Error(ERROR);\n        } else if (message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        }\n      }\n      if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n        message.constructor === Buffer) {\n        return crypto.createHash(algorithm).update(bufferFrom(message)).digest('hex');\n      } else {\n        return method(message);\n      }\n    };\n    return nodeMethod;\n  };\n\n  var createHmacOutputMethod = function (outputType, is224) {\n    return function (key, message) {\n      return new HmacSha256(key, is224, true).update(message)[outputType]();\n    };\n  };\n\n  var createHmacMethod = function (is224) {\n    var method = createHmacOutputMethod('hex', is224);\n    method.create = function (key) {\n      return new HmacSha256(key, is224);\n    };\n    method.update = function (key, message) {\n      return method.create(key).update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createHmacOutputMethod(type, is224);\n    }\n    return method;\n  };\n\n  function Sha256(is224, sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n    } else {\n      this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n    }\n\n    if (is224) {\n      this.h0 = 0xc1059ed8;\n      this.h1 = 0x367cd507;\n      this.h2 = 0x3070dd17;\n      this.h3 = 0xf70e5939;\n      this.h4 = 0xffc00b31;\n      this.h5 = 0x68581511;\n      this.h6 = 0x64f98fa7;\n      this.h7 = 0xbefa4fa4;\n    } else { // 256\n      this.h0 = 0x6a09e667;\n      this.h1 = 0xbb67ae85;\n      this.h2 = 0x3c6ef372;\n      this.h3 = 0xa54ff53a;\n      this.h4 = 0x510e527f;\n      this.h5 = 0x9b05688c;\n      this.h6 = 0x1f83d9ab;\n      this.h7 = 0x5be0cd19;\n    }\n\n    this.block = this.start = this.bytes = this.hBytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n    this.is224 = is224;\n  }\n\n  Sha256.prototype.update = function (message) {\n    if (this.finalized) {\n      return;\n    }\n    var notString, type = typeof message;\n    if (type !== 'string') {\n      if (type === 'object') {\n        if (message === null) {\n          throw new Error(ERROR);\n        } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        } else if (!Array.isArray(message)) {\n          if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n            throw new Error(ERROR);\n          }\n        }\n      } else {\n        throw new Error(ERROR);\n      }\n      notString = true;\n    }\n    var code, index = 0, i, length = message.length, blocks = this.blocks;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = this.block;\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n          blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n          blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n          blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if (notString) {\n        for (i = this.start; index < length && i < 64; ++index) {\n          blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n        }\n      } else {\n        for (i = this.start; index < length && i < 64; ++index) {\n          code = message.charCodeAt(index);\n          if (code < 0x80) {\n            blocks[i >> 2] |= code << SHIFT[i++ & 3];\n          } else if (code < 0x800) {\n            blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          } else if (code < 0xd800 || code >= 0xe000) {\n            blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          } else {\n            code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n            blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          }\n        }\n      }\n\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.block = blocks[16];\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    if (this.bytes > 4294967295) {\n      this.hBytes += this.bytes / 4294967296 << 0;\n      this.bytes = this.bytes % 4294967296;\n    }\n    return this;\n  };\n\n  Sha256.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[16] = this.block;\n    blocks[i >> 2] |= EXTRA[i & 3];\n    this.block = blocks[16];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = this.block;\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n    blocks[15] = this.bytes << 3;\n    this.hash();\n  };\n\n  Sha256.prototype.hash = function () {\n    var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,\n      h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;\n\n    for (j = 16; j < 64; ++j) {\n      // rightrotate\n      t1 = blocks[j - 15];\n      s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);\n      t1 = blocks[j - 2];\n      s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);\n      blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;\n    }\n\n    bc = b & c;\n    for (j = 0; j < 64; j += 4) {\n      if (this.first) {\n        if (this.is224) {\n          ab = 300032;\n          t1 = blocks[0] - 1413257819;\n          h = t1 - 150054599 << 0;\n          d = t1 + 24177077 << 0;\n        } else {\n          ab = 704751109;\n          t1 = blocks[0] - 210244248;\n          h = t1 - 1521486534 << 0;\n          d = t1 + 143694565 << 0;\n        }\n        this.first = false;\n      } else {\n        s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));\n        s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));\n        ab = a & b;\n        maj = ab ^ (a & c) ^ bc;\n        ch = (e & f) ^ (~e & g);\n        t1 = h + s1 + ch + K[j] + blocks[j];\n        t2 = s0 + maj;\n        h = d + t1 << 0;\n        d = t1 + t2 << 0;\n      }\n      s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));\n      s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));\n      da = d & a;\n      maj = da ^ (d & b) ^ ab;\n      ch = (h & e) ^ (~h & f);\n      t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];\n      t2 = s0 + maj;\n      g = c + t1 << 0;\n      c = t1 + t2 << 0;\n      s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));\n      s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));\n      cd = c & d;\n      maj = cd ^ (c & a) ^ da;\n      ch = (g & h) ^ (~g & e);\n      t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];\n      t2 = s0 + maj;\n      f = b + t1 << 0;\n      b = t1 + t2 << 0;\n      s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));\n      s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));\n      bc = b & c;\n      maj = bc ^ (b & d) ^ cd;\n      ch = (f & g) ^ (~f & h);\n      t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];\n      t2 = s0 + maj;\n      e = a + t1 << 0;\n      a = t1 + t2 << 0;\n      this.chromeBugWorkAround = true;\n    }\n\n    this.h0 = this.h0 + a << 0;\n    this.h1 = this.h1 + b << 0;\n    this.h2 = this.h2 + c << 0;\n    this.h3 = this.h3 + d << 0;\n    this.h4 = this.h4 + e << 0;\n    this.h5 = this.h5 + f << 0;\n    this.h6 = this.h6 + g << 0;\n    this.h7 = this.h7 + h << 0;\n  };\n\n  Sha256.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\n      h6 = this.h6, h7 = this.h7;\n\n    var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n      HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n      HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n      HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n      HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n      HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n      HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n      HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n      HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n      HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n      HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n      HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n      HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n      HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n      HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n      HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n      HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n      HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n      HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n      HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +\n      HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +\n      HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +\n      HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +\n      HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +\n      HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +\n      HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +\n      HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +\n      HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];\n    if (!this.is224) {\n      hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +\n        HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +\n        HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +\n        HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];\n    }\n    return hex;\n  };\n\n  Sha256.prototype.toString = Sha256.prototype.hex;\n\n  Sha256.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\n      h6 = this.h6, h7 = this.h7;\n\n    var arr = [\n      (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n      (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n      (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n      (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n      (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF,\n      (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF,\n      (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF\n    ];\n    if (!this.is224) {\n      arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF);\n    }\n    return arr;\n  };\n\n  Sha256.prototype.array = Sha256.prototype.digest;\n\n  Sha256.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(this.is224 ? 28 : 32);\n    var dataView = new DataView(buffer);\n    dataView.setUint32(0, this.h0);\n    dataView.setUint32(4, this.h1);\n    dataView.setUint32(8, this.h2);\n    dataView.setUint32(12, this.h3);\n    dataView.setUint32(16, this.h4);\n    dataView.setUint32(20, this.h5);\n    dataView.setUint32(24, this.h6);\n    if (!this.is224) {\n      dataView.setUint32(28, this.h7);\n    }\n    return buffer;\n  };\n\n  function HmacSha256(key, is224, sharedMemory) {\n    var i, type = typeof key;\n    if (type === 'string') {\n      var bytes = [], length = key.length, index = 0, code;\n      for (i = 0; i < length; ++i) {\n        code = key.charCodeAt(i);\n        if (code < 0x80) {\n          bytes[index++] = code;\n        } else if (code < 0x800) {\n          bytes[index++] = (0xc0 | (code >> 6));\n          bytes[index++] = (0x80 | (code & 0x3f));\n        } else if (code < 0xd800 || code >= 0xe000) {\n          bytes[index++] = (0xe0 | (code >> 12));\n          bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\n          bytes[index++] = (0x80 | (code & 0x3f));\n        } else {\n          code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\n          bytes[index++] = (0xf0 | (code >> 18));\n          bytes[index++] = (0x80 | ((code >> 12) & 0x3f));\n          bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\n          bytes[index++] = (0x80 | (code & 0x3f));\n        }\n      }\n      key = bytes;\n    } else {\n      if (type === 'object') {\n        if (key === null) {\n          throw new Error(ERROR);\n        } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {\n          key = new Uint8Array(key);\n        } else if (!Array.isArray(key)) {\n          if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {\n            throw new Error(ERROR);\n          }\n        }\n      } else {\n        throw new Error(ERROR);\n      }\n    }\n\n    if (key.length > 64) {\n      key = (new Sha256(is224, true)).update(key).array();\n    }\n\n    var oKeyPad = [], iKeyPad = [];\n    for (i = 0; i < 64; ++i) {\n      var b = key[i] || 0;\n      oKeyPad[i] = 0x5c ^ b;\n      iKeyPad[i] = 0x36 ^ b;\n    }\n\n    Sha256.call(this, is224, sharedMemory);\n\n    this.update(iKeyPad);\n    this.oKeyPad = oKeyPad;\n    this.inner = true;\n    this.sharedMemory = sharedMemory;\n  }\n  HmacSha256.prototype = new Sha256();\n\n  HmacSha256.prototype.finalize = function () {\n    Sha256.prototype.finalize.call(this);\n    if (this.inner) {\n      this.inner = false;\n      var innerHash = this.array();\n      Sha256.call(this, this.is224, this.sharedMemory);\n      this.update(this.oKeyPad);\n      this.update(innerHash);\n      Sha256.prototype.finalize.call(this);\n    }\n  };\n\n  var exports = createMethod();\n  exports.sha256 = exports;\n  exports.sha224 = createMethod(true);\n  exports.sha256.hmac = createHmacMethod();\n  exports.sha224.hmac = createHmacMethod(true);\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    root.sha256 = exports.sha256;\n    root.sha224 = exports.sha224;\n    if (AMD) {\n      define(function () {\n        return exports;\n      });\n    }\n  }\n})();\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nfunction createErrorType(name, init, superErrorClass = Error) {\n    function JsJodaException(message) {\n        if (!Error.captureStackTrace) {\n            this.stack = (new Error()).stack;\n        } else {\n            Error.captureStackTrace(this, this.constructor);\n        }\n        this.message = message;\n        init && init.apply(this, arguments);\n        this.toString = function () {\n            return `${this.name}: ${this.message}`;\n        };\n    }\n    JsJodaException.prototype = Object.create(superErrorClass.prototype);\n    JsJodaException.prototype.name = name;\n    JsJodaException.prototype.constructor = JsJodaException;\n    return JsJodaException;\n}\n\nexport const DateTimeException = createErrorType('DateTimeException', messageWithCause);\nexport const DateTimeParseException = createErrorType('DateTimeParseException', messageForDateTimeParseException);\nexport const UnsupportedTemporalTypeException = createErrorType('UnsupportedTemporalTypeException', null, DateTimeException);\nexport const ArithmeticException = createErrorType('ArithmeticException');\nexport const IllegalArgumentException = createErrorType('IllegalArgumentException');\nexport const IllegalStateException = createErrorType('IllegalStateException');\nexport const NullPointerException = createErrorType('NullPointerException');\n\nfunction messageWithCause(message, cause = null) {\n    let msg = message || this.name;\n    if (cause !== null && cause instanceof Error) {\n        msg += `\\n-------\\nCaused by: ${cause.stack}\\n-------\\n`;\n    }\n    this.message = msg;\n}\n\nfunction messageForDateTimeParseException(message, text = '', index = 0, cause = null) {\n    let msg = message || this.name;\n    msg += `: ${text}, at index: ${index}`;\n    if (cause !== null && cause instanceof Error) {\n        msg += `\\n-------\\nCaused by: ${cause.stack}\\n-------\\n`;\n    }\n    this.message = msg;\n    this.parsedString = () => {\n        return text;\n    };\n    this.errorIndex = () => {\n        return index;\n    };\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport { NullPointerException, IllegalArgumentException } from './errors';\n\n/**\n * @private\n *\n * @param assertion\n * @param msg\n * @param error\n */\nexport function assert(assertion, msg, error) {\n    if(!assertion){\n        if (error) {\n            throw new error(msg);\n        } else {\n            throw new Error(msg);\n        }\n    }\n}\n\n/**\n * @private\n *\n * @param value\n * @param parameterName\n * @returns {*}\n */\nexport function requireNonNull(value, parameterName) {\n    if (value == null) {\n        throw new NullPointerException(`${parameterName} must not be null`);\n    }\n    return value;\n}\n\n/**\n * @private\n *\n * @param value\n * @param _class\n * @param parameterName\n * @returns {_class}\n */\nexport function requireInstance(value, _class, parameterName) {\n    if (!(value instanceof _class)) {\n        throw new IllegalArgumentException(`${parameterName} must be an instance of ${_class.name ? _class.name : _class}${value && value.constructor && value.constructor.name ? `, but is ${value.constructor.name}` : ''}`);\n    }\n    return value;\n}\n\n/**\n * @private\n *\n * @param methodName\n */\nexport function abstractMethodFail(methodName){\n    throw new TypeError(`abstract method \"${methodName}\" is not implemented`);\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport { ArithmeticException } from './errors';\n\nexport const MAX_SAFE_INTEGER = 9007199254740991;\nexport const MIN_SAFE_INTEGER = -9007199254740991;\n\n/**\n * Math helper with static function for integer operations\n */\nexport class MathUtil {\n    /**\n     *\n     * @param {number} x\n     * @param {number} y\n     * @returns {number}\n     */\n    static intDiv(x, y) {\n        let r = x/y;\n        r = MathUtil.roundDown(r);\n        return MathUtil.safeZero(r);\n    }\n\n    /**\n     *\n     * @param {number} x\n     * @param {number} y\n     * @returns {number}\n     */\n    static intMod(x, y) {\n        let r = x - MathUtil.intDiv(x, y) * y;\n        r = MathUtil.roundDown(r);\n        return MathUtil.safeZero(r);\n    }\n\n    /**\n     *\n     * @param {number} r\n     * @returns {number}\n     */\n    static roundDown(r){\n        if (r < 0) {\n            return Math.ceil(r);\n        } else {\n            return Math.floor(r);\n        }\n    }\n\n    /**\n     *\n     * @param {number} x\n     * @param {number} y\n     * @returns {number}\n     */\n    static floorDiv(x, y){\n        const r = Math.floor(x / y);\n        return MathUtil.safeZero(r);\n    }\n\n    /**\n     *\n     * @param {number} x\n     * @param {number} y\n     * @returns {number}\n     */\n    static floorMod(x, y){\n        const r = x - MathUtil.floorDiv(x, y) * y;\n        return MathUtil.safeZero(r);\n    }\n\n    /**\n     *\n     * @param {number} x\n     * @param {number} y\n     * @returns {number}\n     */\n    static safeAdd(x, y) {\n        MathUtil.verifyInt(x);\n        MathUtil.verifyInt(y);\n        if (x === 0) {\n            return MathUtil.safeZero(y);\n        }\n        if (y === 0) {\n            return MathUtil.safeZero(x);\n        }\n        const r = MathUtil.safeToInt(x + y);\n        if (r === x || r === y) {\n            throw new ArithmeticException('Invalid addition beyond MAX_SAFE_INTEGER!');\n        }\n        return r;\n    }\n\n    /**\n     *\n     * @param {number} x\n     * @param {number} y\n     * @returns {number}\n     */\n    static safeSubtract(x, y) {\n        MathUtil.verifyInt(x);\n        MathUtil.verifyInt(y);\n        if (x === 0 && y === 0) {\n            return 0;\n        } else if (x === 0) {\n            return MathUtil.safeZero(-1 * y);\n        } else if (y === 0) {\n            return MathUtil.safeZero(x);\n        }\n        return MathUtil.safeToInt(x - y);\n    }\n\n    /**\n     *\n     * @param {number} x\n     * @param {number} y\n     * @returns {number}\n     */\n    static safeMultiply(x, y) {\n        MathUtil.verifyInt(x);\n        MathUtil.verifyInt(y);\n        if (x === 1) {\n            return MathUtil.safeZero(y);\n        }\n        if (y === 1) {\n            return MathUtil.safeZero(x);\n        }\n        if (x === 0 || y === 0) {\n            return 0;\n        }\n        const r = MathUtil.safeToInt(x * y);\n        if (r / y !== x || (x === MIN_SAFE_INTEGER && y === -1) || (y === MIN_SAFE_INTEGER && x === -1)) {\n            throw new ArithmeticException(`Multiplication overflows: ${x} * ${y}`);\n        }\n        return r;\n    }\n\n    /**\n     *\n     * @param {number} value\n     * @returns {number}\n     */\n    static parseInt(value) {\n        const r = parseInt(value);\n        return MathUtil.safeToInt(r);\n    }\n\n    /**\n     *\n     * @param {number} value\n     * @returns {number}\n     */\n    static safeToInt(value) {\n        MathUtil.verifyInt(value);\n        return MathUtil.safeZero(value);\n    }\n\n    /**\n     *\n     * @param {number} value\n     */\n    static verifyInt(value){\n        if (value == null) {\n            throw new ArithmeticException(`Invalid value: '${value}', using null or undefined as argument`);\n        }\n        if (isNaN(value)) {\n            throw new ArithmeticException('Invalid int value, using NaN as argument');\n        }\n        if ((value % 1) !== 0) {\n            throw new ArithmeticException(`Invalid value: '${value}' is a float`);\n        }\n        if (value > MAX_SAFE_INTEGER || value < MIN_SAFE_INTEGER) {\n            throw new ArithmeticException(`Calculation overflows an int: ${value}`);\n        }\n    }\n\n    /**\n     * convert -0 to 0 and int as string to a number ( '1' -> 1 )\n     *\n     * @param {number} value\n     * @returns {number}\n     */\n    static safeZero(value){\n        return value === 0 ? 0 : +value;\n    }\n\n    /**\n     * Compares two Numbers.\n     *\n     * @param {number} a  the first value\n     * @param {number} b  the second value\n     * @return {number} the result\n     */\n    static compareNumbers(a, b) {\n        if (a < b) {\n            return -1;\n        }\n        if (a > b) {\n            return 1;\n        }\n        return 0;\n    }\n\n    // convert to small integer for v8 optimisation\n    static smi(int) {\n        return ((int >>> 1) & 0x40000000) | (int & 0xBFFFFFFF);\n    }\n\n    // calculate 32 bit hash of a number and convert to SMI\n    static hash(number) {\n        if (number !== number || number === Infinity) {\n            return 0;\n        }\n        let result = number;\n        while (number > 0xFFFFFFFF) {\n            number /= 0xFFFFFFFF;\n            result ^= number;\n        }\n        return MathUtil.smi(result);\n    }\n\n    // default hashCode calculation for a number sequence as mentioned by Joshua Bloch\n    static hashCode(...numbers) {\n        let result = 17;\n        for (const n of numbers) {\n            result = (result << 5) - result + MathUtil.hash(n);\n        }\n        return MathUtil.hash(result);\n    }\n}\n\nMathUtil.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;\nMathUtil.MIN_SAFE_INTEGER = MIN_SAFE_INTEGER;\n\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n/***\n * Base class for a pseudo enum\n */\nexport class Enum {\n    constructor(name){\n        this._name = name;\n    }\n\n    equals(other){\n        return this === other;\n    }\n\n    toString() {\n        return this._name;\n    }\n\n    /**\n     * toJSON() use by JSON.stringify\n     * delegates to toString()\n     *\n     * @return {string}\n     */\n    toJSON() {\n        return this.toString();\n    }\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { abstractMethodFail } from '../assert';\n\n/**\n * Framework-level interface defining an amount of time, such as\n * \"6 hours\", \"8 days\" or \"2 years and 3 months\".\n *\n * This is the base interface type for amounts of time.\n * An amount is distinct from a date or time-of-day in that it is not tied\n * to any specific point on the time-line.\n *\n * The amount can be thought of as a {@link Map} of {@link TemporalUnit} to\n * `long`, exposed via {@link getUnits} and {@link get}.\n * A simple case might have a single unit-value pair, such as \"6 hours\".\n * A more complex case may have multiple unit-value pairs, such as\n * \"7 years, 3 months and 5 days\".\n *\n * There are two common implementations.\n * {@link Period} is a date-based implementation, storing years, months and days.\n * {@link Duration} is a time-based implementation, storing seconds and nanoseconds,\n * but providing some access using other duration based units such as minutes,\n * hours and fixed 24-hour days.\n *\n * This interface is a framework-level interface that should not be widely\n * used in application code. Instead, applications should create and pass\n * around instances of concrete types, such as {@link Period} and {@link Duration}.\n *\n * @interface\n */\nexport class TemporalAmount {\n    /**\n     * Returns the value of the requested unit.\n     * The units returned from {@link getUnits} uniquely define the\n     * value of the {@link TemporalAmount}.  A value must be returned\n     * for each unit listed in {@link getUnits}.\n     *\n     * @implSpec\n     * Implementations may declare support for units not listed by {@link getUnits}.\n     * Typically, the implementation would define additional units\n     * as conversions for the convenience of developers.\n     *\n     * @param {TemporalUnit} unit - the {@link TemporalUnit} for which to return the value\n     * @return {number} the long value of the unit\n     * @throws DateTimeException if a value for the unit cannot be obtained\n     * @throws UnsupportedTemporalTypeException if the {@link unit} is not supported\n     */\n    // eslint-disable-next-line no-unused-vars\n    get(unit) {\n        abstractMethodFail('get');\n    }\n    \n    /**\n     * Returns the list of units uniquely defining the value of this TemporalAmount.\n     * The list of {@link TemporalUnits} is defined by the implementation class.\n     * The list is a snapshot of the units at the time {@link getUnits}\n     * is called and is not mutable.\n     * The units are ordered from longest duration to the shortest duration\n     * of the unit.\n     *\n     * @implSpec\n     * The list of units completely and uniquely represents the\n     * state of the object without omissions, overlaps or duplication.\n     * The units are in order from longest duration to shortest.\n     *\n     * @return {TemporalUnit[]} the List of {@link TemporalUnits}; not null\n     */\n    units() {\n        abstractMethodFail('units');\n    }\n    \n    /**\n     * Adds to the specified temporal object.\n     *\n     * Adds the amount to the specified temporal object using the logic\n     * encapsulated in the implementing class.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link Temporal#plus}:\n     * <pre>\n     *   // These two lines are equivalent, but the second approach is recommended\n     *   dateTime = amount.addTo(dateTime);\n     *   dateTime = dateTime.plus(adder);\n     * </pre>\n     * It is recommended to use the second approach, {@link plus},\n     * as it is a lot clearer to read in code.\n     *\n     * @implSpec\n     * The implementation must take the input object and add to it.\n     * The implementation defines the logic of the addition and is responsible for\n     * documenting that logic. It may use any method on {@link Temporal} to\n     * query the temporal object and perform the addition.\n     * The returned object must have the same observable type as the input object\n     *\n     * The input object must not be altered.\n     * Instead, an adjusted copy of the original must be returned.\n     * This provides equivalent, safe behavior for immutable and mutable temporal objects.\n     *\n     * The input temporal object may be in a calendar system other than ISO.\n     * Implementations may choose to document compatibility with other calendar systems,\n     * or reject non-ISO temporal objects by querying the chronology (see {@link TemporalQueries#chronology}).\n     *\n     * This method may be called from multiple threads in parallel.\n     * It must be thread-safe when invoked.\n     *\n     * @param {Temporal} temporal - the temporal object to add the amount to, not null\n     * @return {Temporal} an object of the same observable type with the addition made, not null\n     * @throws DateTimeException if unable to add\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    // eslint-disable-next-line no-unused-vars\n    addTo(temporal) {\n        abstractMethodFail('addTo');\n    }\n    \n    /**\n     * Subtracts this object from the specified temporal object.\n     *\n     * Subtracts the amount from the specified temporal object using the logic\n     * encapsulated in the implementing class.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link Temporal#minus}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   dateTime = amount.subtractFrom(dateTime);\n     *   dateTime = dateTime.minus(amount);\n     * </pre>\n     * It is recommended to use the second approach, {@link minus},\n     * as it is a lot clearer to read in code.\n     *\n     * @implSpec\n     * The implementation must take the input object and subtract from it.\n     * The implementation defines the logic of the subtraction and is responsible for\n     * documenting that logic. It may use any method on {@link Temporal} to\n     * query the temporal object and perform the subtraction.\n     * The returned object must have the same observable type as the input object\n     *\n     * The input object must not be altered.\n     * Instead, an adjusted copy of the original must be returned.\n     * This provides equivalent, safe behavior for immutable and mutable temporal objects.\n     *\n     * The input temporal object may be in a calendar system other than ISO.\n     * Implementations may choose to document compatibility with other calendar systems,\n     * or reject non-ISO temporal objects by querying the chronology (see {@link TemporalQueries#chronology}).\n     *\n     * This method may be called from multiple threads in parallel.\n     * It must be thread-safe when invoked.\n     *\n     * @param {Temporal} temporal - the temporal object to subtract the amount from, not null\n     * @return {Temporal} an object of the same observable type with the subtraction made, not null\n     * @throws DateTimeException if unable to subtract\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    // eslint-disable-next-line no-unused-vars\n    subtractFrom(temporal) {\n        abstractMethodFail('subtractFrom');\n    }\n    \n}\n\nif (typeof Symbol !== 'undefined' && Symbol.toPrimitive) {\n    TemporalAmount.prototype[Symbol.toPrimitive] = function (hint) {\n        // hint could be 'number', 'string' or 'default'. Only 'number'\n        // should throw and 'default' is treated as 'string'.\n        if (hint !== 'number') {\n            return this.toString();\n        }\n\n        throw new TypeError(\n            'A conversion from TemporalAmount to a number is not allowed. ' +\n            'To compare use the methods .equals(), .compareTo(), .isBefore() ' +\n            'or one that is more suitable to your use case.'\n        );\n    };\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { abstractMethodFail } from '../assert';\n\n/**\n * A unit of date-time, such as Days or Hours.\n *\n * Measurement of time is built on units, such as years, months, days, hours, minutes and seconds.\n * Implementations of this interface represent those units.\n *\n * An instance of this interface represents the unit itself, rather than an amount of the unit.\n * See {@link Period} for a class that represents an amount in terms of the common units.\n *\n * The most commonly used units are defined in {@link ChronoUnit}.\n * Further units are supplied in {@link IsoFields}.\n * Units can also be written by application code by implementing this interface.\n *\n * The unit works using double dispatch. Client code calls methods on a date-time like\n * {@link LocalDateTime} which check if the unit is a {@link ChronoUnit}.\n * If it is, then the date-time must handle it.\n * Otherwise, the method call is re-dispatched to the matching method in this interface.\n *\n * @interface\n */\nexport class TemporalUnit {\n    /**\n     * Gets the duration of this unit, which may be an estimate.\n     *\n     * All units return a duration measured in standard nanoseconds from this method.\n     * The duration will be positive and non-zero.\n     * For example, an hour has a duration of `60 * 60 * 1,000,000,000 ns`.\n     *\n     * Some units may return an accurate duration while others return an estimate.\n     * For example, days have an estimated duration due to the possibility of\n     * daylight saving time changes.\n     * To determine if the duration is an estimate, use {@link isDurationEstimated}.\n     *\n     * @return {Duration} the duration of this unit, which may be an estimate.\n     */\n    duration() {\n        abstractMethodFail('duration');\n    }\n\n    /**\n     * Checks if the duration of the unit is an estimate.\n     *\n     * All units have a duration, however the duration is not always accurate.\n     * For example, days have an estimated duration due to the possibility of\n     * daylight saving time changes.\n     * This method returns true if the duration is an estimate and false if it is\n     * accurate. Note that accurate/estimated ignores leap seconds.\n     *\n     * @return {boolean} `true` if the duration is estimated, `false` if accurate.\n     */\n    isDurationEstimated() {\n        abstractMethodFail('isDurationEstimated');\n    }\n\n    /**\n     * Checks if this unit is date-based.\n     *\n     * @return {boolean} `true` if date unit, `false` if a time unit.\n     */\n    isDateBased() {\n        abstractMethodFail('isDateBased');\n    }\n\n    /**\n     * Checks if this unit is time-based.\n     *\n     * @return {boolean} `true` if time unit, `false` if a date unit.\n     */\n    isTimeBased() {\n        abstractMethodFail('isTimeBased');\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this unit is supported by the specified temporal object.\n     *\n     * This checks that the implementing date-time can add/subtract this unit.\n     * This can be used to avoid throwing an exception.\n     *\n     * @param {!Temporal} temporal the temporal object to check.\n     * @return {boolean} `true` if the unit is supported.\n     */\n    // eslint-disable-next-line no-unused-vars\n    isSupportedBy(temporal) {\n        abstractMethodFail('isSupportedBy');\n    }\n\n    /**\n     * Returns a copy of the specified temporal object with the specified period added.\n     *\n     * The period added is a multiple of this unit. For example, this method\n     * could be used to add \"3 days\" to a date by calling this method on the\n     * instance representing \"days\", passing the date and the period \"3\".\n     * The period to be added may be negative, which is equivalent to subtraction.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link Temporal#plus}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisUnit.doPlus(temporal);\n     *   temporal = temporal.plus(thisUnit);\n     * </pre>\n     * It is recommended to use the second approach, {@link plus},\n     * as it is a lot clearer to read in code.\n     *\n     * Implementations should perform any queries or calculations using the units\n     * available in {@link ChronoUnit} or the fields available in {@link ChronoField}.\n     * If the field is not supported a {@link DateTimeException} must be thrown.\n     *\n     * Implementations must not alter the specified temporal object.\n     * Instead, an adjusted copy of the original must be returned.\n     * This provides equivalent, safe behavior for immutable and mutable implementations.\n     *\n     * @param {!Temporal} dateTime the temporal object to adjust.\n     * @param {number} periodToAdd the period of this unit to add, positive or negative.\n     * @return {Temporal} the adjusted temporal object.\n     * @throws DateTimeException if the period cannot be added.\n     */\n    // eslint-disable-next-line no-unused-vars\n    addTo(dateTime, periodToAdd) {\n        abstractMethodFail('addTo');\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Calculates the period in terms of this unit between two temporal objects of the same type.\n     *\n     * This calculates the period between two temporals in terms of this unit.\n     * The start and end points are supplied as temporal objects and must be of the same type.\n     * The result will be negative if the end is before the start.\n     * For example, the period in hours between two temporal objects can be calculated\n     * using {@link HOURS.between}.\n     *\n     * The calculation returns a whole number, representing the number of complete units between the two temporals.\n     * For example, the period in hours between the times 11:30 and 13:29 will only be\n     * one hour as it is one minute short of two hours.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link Temporal#until}:\n     * <pre>\n     *   // these two lines are equivalent\n     *   between = thisUnit.between(start, end);\n     *   between = start.until(end, thisUnit);\n     * </pre>\n     * The choice should be made based on which makes the code more readable.\n     *\n     * For example, this method allows the number of days between two dates to be calculated:\n     * <pre>\n     *   long daysBetween = DAYS.between(start, end);\n     *   // or alternatively\n     *   long daysBetween = start.until(end, DAYS);\n     * </pre>\n     * Implementations should perform any queries or calculations using the units available in\n     * {@link ChronoUnit} or the fields available in {@link ChronoField}.\n     * If the unit is not supported a {@link DateTimeException} must be thrown.\n     * Implementations must not alter the specified temporal objects.\n     *\n     * @param {!Temporal} temporal1 the base temporal object.\n     * @param {!Temporal} temporal2 the other temporal object.\n     * @return {number} the period between temporal1 and temporal2 in terms of this unit;\n     *  positive if temporal2 is later than temporal1, negative if earlier.\n     * @throws DateTimeException if the period cannot be calculated.\n     * @throws ArithmeticException if numeric overflow occurs.\n     */\n    // eslint-disable-next-line no-unused-vars\n    between(temporal1, temporal2) {\n        abstractMethodFail('between');\n    }\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport { requireNonNull, requireInstance } from './assert';\nimport { ArithmeticException, DateTimeParseException, UnsupportedTemporalTypeException } from './errors';\nimport { MathUtil, MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from './MathUtil';\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { TemporalAmount } from './temporal/TemporalAmount';\nimport { TemporalUnit } from './temporal/TemporalUnit';\n\nimport { LocalTime } from './LocalTime';\n\n/**\n * A time-based amount of time, such as '34.5 seconds'.\n *\n * This class models a quantity or amount of time in terms of seconds and nanoseconds.\n * It can be accessed using other duration-based units, such as minutes and hours.\n * In addition, the {@link ChronoUnit#DAYS} unit can be used and is treated as\n * exactly equal to 24 hours, thus ignoring daylight savings effects.\n * See {@link Period} for the date-based equivalent to this class.\n *\n * A physical duration could be of infinite length.\n * For practicality, the duration is stored with constraints similar to {@link Instant}.\n * The duration uses nanosecond resolution with a maximum value of the seconds that can\n * be held in a `long`. This is greater than the current estimated age of the universe.\n *\n * The range of a duration requires the storage of a number larger than a `long`.\n * To achieve this, the class stores a `long` representing seconds and an `int`\n * representing nanosecond-of-second, which will always be between 0 and 999,999,999.\n *\n * The duration is measured in \"seconds\", but these are not necessarily identical to\n * the scientific \"SI second\" definition based on atomic clocks.\n * This difference only impacts durations measured near a leap-second and should not affect\n * most applications.\n * See {@link Instant} for a discussion as to the meaning of the second and time-scales.\n *\n * ### Static properties of Class {@link Duration}\n *\n * Duration.ZERO\n *\n * Constant for a duration of zero.\n *\n */\nexport class Duration extends TemporalAmount /*implements TemporalAmount, Comparable<Duration>, Serializable */ {\n\n    /**\n     * Constructs an instance of {@link Duration} using seconds and nanoseconds.\n     *\n     * @param {Number} seconds - the length of the duration in seconds, positive or negative\n     * @param {Number} nanos - the nanoseconds within the second, from 0 to 999,999,999\n     * @private\n     */\n    constructor(seconds, nanos) {\n        super();\n        this._seconds = MathUtil.safeToInt(seconds);\n        this._nanos = MathUtil.safeToInt(nanos);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link Duration} from a number of standard 24 hour days.\n     *\n     * The seconds are calculated based on the standard definition of a day,\n     * where each day is 86400 seconds which implies a 24 hour day.\n     * The nanosecond in second field is set to zero.\n     *\n     * @param {Number} days - the number of days, positive or negative\n     * @return {!Duration}\n     * @throws ArithmeticException if the input days exceeds the capacity of {@link Duration}\n     */\n    static ofDays(days) {\n        return Duration._create(MathUtil.safeMultiply(days, LocalTime.SECONDS_PER_DAY), 0);\n    }\n\n    /**\n     * Obtains an instance of {@link Duration} from a number of standard hours.\n     *\n     * The seconds are calculated based on the standard definition of an hour,\n     * where each hour is 3600 seconds.\n     * The nanosecond in second field is set to zero.\n     *\n     * @param {Number} hours - the number of hours, positive or negative\n     * @return {!Duration}\n     * @throws ArithmeticException if the input hours exceeds the capacity of {@link Duration}\n     */\n    static ofHours(hours) {\n        return Duration._create(MathUtil.safeMultiply(hours, LocalTime.SECONDS_PER_HOUR), 0);\n    }\n\n    /**\n     * Obtains an instance of {@link Duration} from a number of standard minutes.\n     *\n     * The seconds are calculated based on the standard definition of a minute,\n     * where each minute is 60 seconds.\n     * The nanosecond in second field is set to zero.\n     *\n     * @param {Number} minutes - the number of minutes, positive or negative\n     * @return {!Duration}\n     * @throws ArithmeticException if the input minutes exceeds the capacity of {@link Duration}\n     */\n    static ofMinutes(minutes) {\n        return Duration._create(MathUtil.safeMultiply(minutes, LocalTime.SECONDS_PER_MINUTE), 0);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link Duration} from a number of seconds\n     * and an adjustment in nanoseconds.\n     *\n     * This method allows an arbitrary number of nanoseconds to be passed in.\n     * The factory will alter the values of the second and nanosecond in order\n     * to ensure that the stored nanosecond is in the range 0 to 999,999,999.\n     * For example, the following will result in the exactly the same duration:\n     * <pre>\n     *  Duration.ofSeconds(3, 1);\n     *  Duration.ofSeconds(4, -999_999_999);\n     *  Duration.ofSeconds(2, 1000_000_001);\n     * </pre>\n     *\n     * @param {Number} seconds - the number of seconds, positive or negative\n     * @param {Number} nanoAdjustment  the nanosecond adjustment to the number of seconds, positive or negative\n     * @return {!Duration}\n     * @throws ArithmeticException if the adjustment causes the seconds to exceed the capacity of {@link Duration}\n     */\n    static ofSeconds(seconds, nanoAdjustment = 0) {\n        const secs = MathUtil.safeAdd(seconds, MathUtil.floorDiv(nanoAdjustment, LocalTime.NANOS_PER_SECOND));\n        const nos = MathUtil.floorMod(nanoAdjustment, LocalTime.NANOS_PER_SECOND);\n        return Duration._create(secs, nos);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link Duration} from a number of milliseconds.\n     *\n     * The seconds and nanoseconds are extracted from the specified milliseconds.\n     *\n     * @param {Number} millis - the number of milliseconds, positive or negative\n     * @return {!Duration}\n     */\n    static ofMillis(millis) {\n        let secs = MathUtil.intDiv(millis, 1000);\n        let mos = MathUtil.intMod(millis, 1000);\n        if (mos < 0) {\n            mos += 1000;\n            secs--;\n        }\n        return Duration._create(secs, mos * 1000000);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link Duration} from a number of nanoseconds.\n     *\n     * The seconds and nanoseconds are extracted from the specified nanoseconds.\n     *\n     * @param {Number} nanos - the number of nanoseconds, positive or negative\n     * @return {!Duration}\n     */\n    static ofNanos(nanos) {\n        let secs = MathUtil.intDiv(nanos, LocalTime.NANOS_PER_SECOND);\n        let nos = MathUtil.intMod(nanos, LocalTime.NANOS_PER_SECOND);\n        if (nos < 0) {\n            nos += LocalTime.NANOS_PER_SECOND;\n            secs--;\n        }\n        return this._create(secs, nos);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link Duration} from a duration in the specified unit.\n     *\n     * The parameters represent the two parts of a phrase like '6 Hours'. For example:\n     * <pre>\n     *  Duration.of(3, SECONDS);\n     *  Duration.of(465, HOURS);\n     * </pre>\n     * Only a subset of units are accepted by this method.\n     * The unit must either have an exact duration (see {@link TemporalUnit#isDurationEstimated}) or\n     * be {@link ChronoUnit#DAYS} which is treated as 24 hours. Other units throw an exception.\n     *\n     * @param {Number} amount - the amount of the duration, measured in terms of the unit, positive or negative\n     * @param {TemporalUnit} unit - the unit that the duration is measured in, must have an exact duration, not null\n     * @return {!Duration}\n     * @throws DateTimeException if the period unit has an estimated duration\n     * @throws ArithmeticException if a numeric overflow occurs\n     */\n    static of(amount, unit) {\n        return Duration.ZERO.plus(amount, unit);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link Duration} from an amount.\n     *\n     * This obtains a duration based on the specified amount.\n     * A TemporalAmount represents an amount of time, which may be date-based\n     * or time-based, which this factory extracts to a duration.\n     *\n     * The conversion loops around the set of units from the amount and uses\n     * the duration of the unit to calculate the total Duration.\n     * Only a subset of units are accepted by this method.\n     * The unit must either have an exact duration or be ChronoUnit.DAYS which\n     * is treated as 24 hours. If any other units are found then an exception is thrown.\n     *\n     * @param {TemporalAmount} amount - the temporal amount to convert, not null\n     * @return {Duration} the resulting duration, not null\n     * @throws DateTimeException if the amount cannot be converted\n     * @throws ArithmeticException if a numeric overflow occurs\n     */\n    static from(amount) {\n        requireNonNull(amount, 'amount');\n        requireInstance(amount, TemporalAmount);\n        let duration = Duration.ZERO;\n        amount.units().forEach((unit) => {\n            duration = duration.plus(amount.get(unit), unit);\n        });\n        return duration;\n    }\n\n    /**\n     * Obtains an instance of {@link Duration} representing the duration between two instants.\n     *\n     * Obtains a {@link Duration} representing the duration between two instants.\n     * This calculates the duration between two temporal objects of the same type.\n     * The difference in seconds is calculated using {@link Temporal#until}.\n     * The difference in nanoseconds is calculated using by querying the\n     * {@link ChronoField#NANO_OF_SECOND} field.\n     *\n     * The result of this method can be a negative period if the end is before the start.\n     * To guarantee to obtain a positive duration call abs() on the result.\n     *\n     * @param {Temporal} startInclusive - the start instant, inclusive, not null\n     * @param {Temporal} endExclusive - the end instant, exclusive, not null\n     * @return {!Duration}\n     * @throws DateTimeException if the seconds between the temporals cannot be obtained\n     * @throws ArithmeticException if the calculation exceeds the capacity of {@link Duration}\n     */\n    static between(startInclusive, endExclusive) {\n        requireNonNull(startInclusive, 'startInclusive');\n        requireNonNull(endExclusive, 'endExclusive');\n        let secs = startInclusive.until(endExclusive, ChronoUnit.SECONDS);\n        let nanos = 0;\n        if (startInclusive.isSupported(ChronoField.NANO_OF_SECOND) && endExclusive.isSupported(ChronoField.NANO_OF_SECOND)) {\n            try {\n                const startNos = startInclusive.getLong(ChronoField.NANO_OF_SECOND);\n                nanos = endExclusive.getLong(ChronoField.NANO_OF_SECOND) - startNos;\n                if (secs > 0 && nanos < 0) {\n                    nanos += LocalTime.NANOS_PER_SECOND;\n                } else if (secs < 0 && nanos > 0) {\n                    nanos -= LocalTime.NANOS_PER_SECOND;\n                } else if (secs === 0 && nanos !== 0) {\n                    // two possible meanings for result, so recalculate secs\n                    const adjustedEnd = endExclusive.with(ChronoField.NANO_OF_SECOND, startNos);\n                    secs = startInclusive.until(adjustedEnd, ChronoUnit.SECONDS);\n                }\n            } catch (e) {\n                // ignore and only use seconds\n            }\n        }\n        return this.ofSeconds(secs, nanos);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains a {@link Duration} from a text string such as {@link PnDTnHnMn.nS}.\n     *\n     * This will parse a textual representation of a duration, including the\n     * string produced by {@link toString}. The formats accepted are based\n     * on the ISO-8601 duration format {@link PnDTnHnMn.nS} with days\n     * considered to be exactly 24 hours.\n     *\n     * The string starts with an optional sign, denoted by the ASCII negative\n     * or positive symbol. If negative, the whole period is negated.\n     * The ASCII letter \"P\" is next in upper or lower case.\n     * There are then four sections, each consisting of a number and a suffix.\n     * The sections have suffixes in ASCII of \"D\", \"H\", \"M\" and \"S\" for\n     * days, hours, minutes and seconds, accepted in upper or lower case.\n     * The suffixes must occur in order. The ASCII letter \"T\" must occur before\n     * the first occurrence, if any, of an hour, minute or second section.\n     * At least one of the four sections must be present, and if \"T\" is present\n     * there must be at least one section after the \"T\".\n     * The number part of each section must consist of one or more ASCII digits.\n     * The number may be prefixed by the ASCII negative or positive symbol.\n     * The number of days, hours and minutes must parse to a `long`.\n     * The number of seconds must parse to a `long` with optional fraction.\n     * The decimal point may be either a dot or a comma.\n     * The fractional part may have from zero to 9 digits.\n     *\n     * The leading plus/minus sign, and negative values for other units are\n     * not part of the ISO-8601 standard.\n     *\n     * Examples:\n     * <pre>\n     *    \"PT20.345S\" -> parses as \"20.345 seconds\"\n     *    \"PT15M\"     -> parses as \"15 minutes\" (where a minute is 60 seconds)\n     *    \"PT10H\"     -> parses as \"10 hours\" (where an hour is 3600 seconds)\n     *    \"P2D\"       -> parses as \"2 days\" (where a day is 24 hours or 86400 seconds)\n     *    \"P2DT3H4M\"  -> parses as \"2 days, 3 hours and 4 minutes\"\n     *    \"P-6H3M\"    -> parses as \"-6 hours and +3 minutes\"\n     *    \"-P6H3M\"    -> parses as \"-6 hours and -3 minutes\"\n     *    \"-P-6H+3M\"  -> parses as \"+6 hours and -3 minutes\"\n     * </pre>\n     *\n     * @param {String} text - the text to parse, not null\n     * @return {Duration} the parsed duration, not null\n     * @throws DateTimeParseException if the text cannot be parsed to a duration\n     */\n    static parse(text) {\n        requireNonNull(text, 'text');\n        /**\n         * The pattern for parsing.\n         */\n        const PATTERN = new RegExp('([-+]?)P(?:([-+]?[0-9]+)D)?(T(?:([-+]?[0-9]+)H)?(?:([-+]?[0-9]+)M)?(?:([-+]?[0-9]+)(?:[.,]([0-9]{0,9}))?S)?)?', 'i');\n        const matches = PATTERN.exec(text);\n        if (matches !== null) {\n            // check for letter T but no time sections\n            if ('T' === matches[3] === false) {\n                const negate = '-' === matches[1];\n                const dayMatch = matches[2];\n                const hourMatch = matches[4];\n                const minuteMatch = matches[5];\n                const secondMatch = matches[6];\n                const fractionMatch = matches[7];\n                if (dayMatch != null || hourMatch != null || minuteMatch != null || secondMatch != null) {\n                    const daysAsSecs = Duration._parseNumber(text, dayMatch, LocalTime.SECONDS_PER_DAY, 'days');\n                    const hoursAsSecs = Duration._parseNumber(text, hourMatch, LocalTime.SECONDS_PER_HOUR, 'hours');\n                    const minsAsSecs = Duration._parseNumber(text, minuteMatch, LocalTime.SECONDS_PER_MINUTE, 'minutes');\n                    const seconds = Duration._parseNumber(text, secondMatch, 1, 'seconds');\n                    const negativeSecs = secondMatch != null && secondMatch.charAt(0) === '-';\n                    const nanos = Duration._parseFraction(text,  fractionMatch, negativeSecs ? -1 : 1);\n                    try {\n                        return Duration._create(negate, daysAsSecs, hoursAsSecs, minsAsSecs, seconds, nanos);\n                    } catch (ex) {\n                        throw new DateTimeParseException('Text cannot be parsed to a Duration: overflow', text, 0, ex);\n                    }\n                }\n            }\n        }\n        throw new DateTimeParseException('Text cannot be parsed to a Duration', text, 0);\n    }\n\n    static _parseNumber(text, parsed, multiplier, errorText) {\n        // regex limits to [-+]?[0-9]+\n        if (parsed == null) {\n            return 0;\n        }\n        try {\n            if (parsed[0] === '+') {\n                parsed = parsed.substring(1);\n            }\n            return MathUtil.safeMultiply(parseFloat(parsed), multiplier);\n        } catch (ex) {\n            throw new DateTimeParseException(`Text cannot be parsed to a Duration: ${errorText}`, text, 0, ex);\n        }\n    }\n\n    static _parseFraction(text, parsed, negate) {\n        // regex limits to [0-9]{0,9}\n        if (parsed == null || parsed.length === 0) {\n            return 0;\n        }\n        parsed = (`${parsed}000000000`).substring(0, 9);\n        return parseFloat(parsed) * negate;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * to handle function overriding this function accepts any number of arguments, checks their type and delegates to the appropriate\n     * function\n     *\n     * @return {Duration}\n     */\n    static _create() {\n        if (arguments.length <= 2) {\n            return Duration._createSecondsNanos(arguments[0], arguments[1]);\n        } else {\n            return Duration._createNegateDaysHoursMinutesSecondsNanos(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n        }\n    }\n\n    static _createNegateDaysHoursMinutesSecondsNanos(negate, daysAsSecs, hoursAsSecs, minsAsSecs, secs, nanos) {\n        const seconds = MathUtil.safeAdd(daysAsSecs, MathUtil.safeAdd(hoursAsSecs, MathUtil.safeAdd(minsAsSecs, secs)));\n        if (negate) {\n            return Duration.ofSeconds(seconds, nanos).negated();\n        }\n        return Duration.ofSeconds(seconds, nanos);\n    }\n\n    /**\n     * Obtains an instance of {@link Duration} using seconds and nanoseconds.\n     *\n     * @param {Number} seconds - the length of the duration in seconds, positive or negative\n     * @param {Number} nanoAdjustment - the nanosecond adjustment within the second, from 0 to 999,999,999\n     */\n    static _createSecondsNanos(seconds = 0, nanoAdjustment = 0) {\n        if (seconds === 0 && nanoAdjustment === 0) {\n            return Duration.ZERO;\n        }\n        return new Duration(seconds, nanoAdjustment);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the value of the requested unit.\n     *\n     * This returns a value for each of the two supported units,\n     * {@link ChronoUnit#SECONDS} and {@link ChronoUnit#NANOS}.\n     * All other units throw an exception.\n     *\n     * @param {TemporalUnit} unit the {@link TemporalUnit} for which to return the value\n     * @return {number} the const value of the unit\n     * @throws DateTimeException if the unit is not supported\n     * @throws UnsupportedTemporalTypeException if the unit is not supported\n     */\n    get(unit) {\n        if (unit === ChronoUnit.SECONDS) {\n            return this._seconds;\n        } else if (unit === ChronoUnit.NANOS) {\n            return this._nanos;\n        } else {\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n    }\n\n    units() {\n        return [ChronoUnit.SECONDS, ChronoUnit.NANOS];\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this duration is zero length.\n     *\n     * A {@link Duration} represents a directed distance between two points on\n     * the time-line and can therefore be positive, zero or negative.\n     * This method checks whether the length is zero.\n     *\n     * @return {boolean} true if this duration has a total length equal to zero\n     */\n    isZero() {\n        return this._seconds === 0 && this._nanos === 0;\n    }\n\n    /**\n     * Checks if this duration is negative, excluding zero.\n     *\n     * A {@link Duration} represents a directed distance between two points on\n     * the time-line and can therefore be positive, zero or negative.\n     * This method checks whether the length is less than zero.\n     *\n     * @return {boolean} true if this duration has a total length less than zero\n     */\n    isNegative() {\n        return this._seconds < 0;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the number of seconds in this duration.\n     *\n     * The length of the duration is stored using two fields - seconds and nanoseconds.\n     * The nanoseconds part is a value from 0 to 999,999,999 that is an adjustment to\n     * the length in seconds.\n     * The total duration is defined by calling this method and {@link getNano}.\n     *\n     * A {@link Duration} represents a directed distance between two points on the time-line.\n     * A negative duration is expressed by the negative sign of the seconds part.\n     * A duration of -1 nanosecond is stored as -1 seconds plus 999,999,999 nanoseconds.\n     *\n     * @return {number} the whole seconds part of the length of the duration, positive or negative\n     */\n    seconds() {\n        return this._seconds;\n    }\n\n    /**\n     * Gets the number of nanoseconds within the second in this duration.\n     *\n     * The length of the duration is stored using two fields - seconds and nanoseconds.\n     * The nanoseconds part is a value from 0 to 999,999,999 that is an adjustment to\n     * the length in seconds.\n     * The total duration is defined by calling this method and {@link getSeconds}.\n     *\n     * A {@link Duration} represents a directed distance between two points on the time-line.\n     * A negative duration is expressed by the negative sign of the seconds part.\n     * A duration of -1 nanosecond is stored as -1 seconds plus 999,999,999 nanoseconds.\n     *\n     * @return {number} the nanoseconds within the second part of the length of the duration, from 0 to 999,999,999\n     */\n    nano() {\n        return this._nanos;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this duration with the specified amount of seconds.\n     *\n     * This returns a duration with the specified seconds, retaining the\n     * nano-of-second part of this duration.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} seconds - the seconds to represent, may be negative\n     * @return {Duration} based on this period with the requested seconds, not null\n     */\n    withSeconds(seconds) {\n        return Duration._create(seconds, this._nanos);\n    }\n\n    /**\n     * Returns a copy of this duration with the specified nano-of-second.\n     *\n     * This returns a duration with the specified nano-of-second, retaining the\n     * seconds part of this duration.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} nanoOfSecond - the nano-of-second to represent, from 0 to 999,999,999\n     * @return {Duration} based on this period with the requested nano-of-second, not null\n     * @throws DateTimeException if the nano-of-second is invalid\n     */\n    withNanos(nanoOfSecond) {\n        ChronoField.NANO_OF_SECOND.checkValidIntValue(nanoOfSecond);\n        return Duration._create(this._seconds, nanoOfSecond);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this duration with the specified duration added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Duration} duration - the duration to add, positive or negative, not null\n     * @return {Duration} based on this duration with the specified duration added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusDuration(duration) {\n        requireNonNull(duration, 'duration');\n        return this.plus(duration.seconds(), duration.nano());\n    }\n\n\n    /**\n     * function overloading for {@link Duration.plus}\n     *\n     * if called with 1 arguments, then {@link Duration.plusDuration} is executed.\n     *\n     * if called with 2 arguments and second argument is an instance of TemporalUnit, then {@link Duration.plusAmountUnit} is executed.\n     *\n     * Otherwise {@link Duration.plusSecondsNanos} is executed.\n     *\n     * @param {!(Duration|number)} durationOrNumber\n     * @param {!TemporalUnit|number} unitOrNumber\n     * @returns {Duration}\n     */\n    plus(durationOrNumber, unitOrNumber) {\n        if (arguments.length === 1) {\n            return this.plusDuration(durationOrNumber);\n        }\n        else if (arguments.length === 2 && unitOrNumber instanceof TemporalUnit) {\n            return this.plusAmountUnit(durationOrNumber, unitOrNumber);\n        } else {\n            return this.plusSecondsNanos(durationOrNumber, unitOrNumber);\n        }\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration added.\n     *\n     * The duration amount is measured in terms of the specified unit.\n     * Only a subset of units are accepted by this method.\n     * The unit must either have an exact duration (see {@link TemporalUnit#isDurationEstimated}) or\n     * be {@link ChronoUnit#DAYS} which is treated as 24 hours. Other units throw an exception.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} amountToAdd - the amount to add, measured in terms of the unit, positive or negative\n     * @param {TemporalUnit} unit - the unit that the amount is measured in, must have an exact duration, not null\n     * @return {Duration} based on this duration with the specified duration added, not null\n     * @throws UnsupportedTemporalTypeException if the unit is not supported\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusAmountUnit(amountToAdd, unit) {\n        requireNonNull(amountToAdd, 'amountToAdd');\n        requireNonNull(unit, 'unit');\n        if (unit === ChronoUnit.DAYS) {\n            return this.plusSecondsNanos(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_DAY), 0);\n        }\n        if (unit.isDurationEstimated()) {\n            throw new UnsupportedTemporalTypeException('Unit must not have an estimated duration');\n        }\n        if (amountToAdd === 0) {\n            return this;\n        }\n        if (unit instanceof ChronoUnit) {\n            switch (unit) {\n                case ChronoUnit.NANOS: return this.plusNanos(amountToAdd);\n                case ChronoUnit.MICROS: return this.plusSecondsNanos(MathUtil.intDiv(amountToAdd, (1000000 * 1000)) * 1000, MathUtil.intMod(amountToAdd, (1000000 * 1000)) * 1000);\n                case ChronoUnit.MILLIS: return this.plusMillis(amountToAdd);\n                case ChronoUnit.SECONDS: return this.plusSeconds(amountToAdd);\n            }\n            return this.plusSecondsNanos(MathUtil.safeMultiply(unit.duration().seconds(), amountToAdd), 0);\n        }\n        const duration = unit.duration().multipliedBy(amountToAdd);\n        return this.plusSecondsNanos(duration.seconds(), duration.nano());\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this duration with the specified duration in 24 hour days added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} daysToAdd - the days to add, positive or negative\n     * @return {Duration} based on this duration with the specified days added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusDays(daysToAdd) {\n        return this.plusSecondsNanos(MathUtil.safeMultiply(daysToAdd, LocalTime.SECONDS_PER_DAY), 0);\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in hours added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} hoursToAdd - the hours to add, positive or negative\n     * @return {Duration} based on this duration with the specified hours added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusHours(hoursToAdd) {\n        return this.plusSecondsNanos(MathUtil.safeMultiply(hoursToAdd, LocalTime.SECONDS_PER_HOUR), 0);\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in minutes added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} minutesToAdd - the minutes to add, positive or negative\n     * @return {Duration} based on this duration with the specified minutes added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusMinutes(minutesToAdd) {\n        return this.plusSecondsNanos(MathUtil.safeMultiply(minutesToAdd, LocalTime.SECONDS_PER_MINUTE), 0);\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in seconds added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} secondsToAdd - the seconds to add, positive or negative\n     * @return {Duration} based on this duration with the specified seconds added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusSeconds(secondsToAdd) {\n        return this.plusSecondsNanos(secondsToAdd, 0);\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in milliseconds added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} millisToAdd - the milliseconds to add, positive or negative\n     * @return {Duration} based on this duration with the specified milliseconds added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusMillis(millisToAdd) {\n        return this.plusSecondsNanos(MathUtil.intDiv(millisToAdd, 1000), MathUtil.intMod(millisToAdd, 1000) * 1000000);\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in nanoseconds added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} nanosToAdd - the nanoseconds to add, positive or negative\n     * @return {Duration} based on this duration with the specified nanoseconds added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusNanos(nanosToAdd) {\n        return this.plusSecondsNanos(0, nanosToAdd);\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} secondsToAdd - the seconds to add, positive or negative\n     * @param {Number} nanosToAdd - the nanos to add, positive or negative\n     * @return {Duration} based on this duration with the specified seconds added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusSecondsNanos(secondsToAdd, nanosToAdd) {\n        requireNonNull(secondsToAdd, 'secondsToAdd');\n        requireNonNull(nanosToAdd, 'nanosToAdd');\n        if (secondsToAdd === 0 && nanosToAdd === 0) {\n            return this;\n        }\n        let epochSec = MathUtil.safeAdd(this._seconds, secondsToAdd);\n        epochSec = MathUtil.safeAdd(epochSec, MathUtil.intDiv(nanosToAdd, LocalTime.NANOS_PER_SECOND));\n        nanosToAdd = MathUtil.intMod(nanosToAdd, LocalTime.NANOS_PER_SECOND);\n        const nanoAdjustment = MathUtil.safeAdd(this._nanos, nanosToAdd);  // safe int+LocalTime.NANOS_PER_SECOND\n        return Duration.ofSeconds(epochSec, nanoAdjustment);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link Duration.minus}\n     *\n     * if called with 1 arguments and first argument is an instance of Duration, then {@link Duration.minusDuration} is executed.\n     *\n     * Otherwise {@link Duration.minusAmountUnit} is executed.\n     *\n     * @param {!(Duration|number)} durationOrNumber\n     * @param {?TemporalUnit} unit\n     * @return {Duration}\n     */\n    minus(durationOrNumber, unit) {\n        if (arguments.length === 1) {\n            return this.minusDuration(durationOrNumber);\n        } else {\n            return this.minusAmountUnit(durationOrNumber, unit);\n        }\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Duration} duration - the duration to subtract, positive or negative, not null\n     * @return {Duration} based on this duration with the specified duration subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusDuration(duration) {\n        requireNonNull(duration, 'duration');\n        const secsToSubtract = duration.seconds();\n        const nanosToSubtract = duration.nano();\n        if (secsToSubtract === MIN_SAFE_INTEGER) {\n            return this.plus(MAX_SAFE_INTEGER, -nanosToSubtract);\n        }\n        return this.plus(-secsToSubtract, -nanosToSubtract);\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration subtracted.\n     *\n     * The duration amount is measured in terms of the specified unit.\n     * Only a subset of units are accepted by this method.\n     * The unit must either have an exact duration (see {@link TemporalUnit#isDurationEstimated}) or\n     * be {@link ChronoUnit#DAYS} which is treated as 24 hours. Other units throw an exception.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} amountToSubtract - the amount to subtract, measured in terms of the unit, positive or negative\n     * @param {TemporalUnit} unit - the unit that the amount is measured in, must have an exact duration, not null\n     * @return {Duration} based on this duration with the specified duration subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusAmountUnit(amountToSubtract, unit) {\n        requireNonNull(amountToSubtract, 'amountToSubtract');\n        requireNonNull(unit, 'unit');\n        return (amountToSubtract === MIN_SAFE_INTEGER ? this.plusAmountUnit(MAX_SAFE_INTEGER, unit) : this.plusAmountUnit(-amountToSubtract, unit));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this duration with the specified duration in 24 hour days subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} daysToSubtract - the days to subtract, positive or negative\n     * @return {Duration} based on this duration with the specified days subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusDays(daysToSubtract) {\n        return (daysToSubtract === MIN_SAFE_INTEGER ? this.plusDays(MAX_SAFE_INTEGER) : this.plusDays(-daysToSubtract));\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in hours subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} hoursToSubtract - the hours to subtract, positive or negative\n     * @return {Duration} based on this duration with the specified hours subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusHours(hoursToSubtract) {\n        return (hoursToSubtract === MIN_SAFE_INTEGER ? this.plusHours(MAX_SAFE_INTEGER) : this.plusHours(-hoursToSubtract));\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in minutes subtracted.\n     *\n     * The number of hours is multiplied by 60 to obtain the number of seconds to subtract.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} minutesToSubtract - the minutes to subtract, positive or negative\n     * @return {Duration} based on this duration with the specified minutes subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusMinutes(minutesToSubtract) {\n        return (minutesToSubtract === MIN_SAFE_INTEGER ? this.plusMinutes(MAX_SAFE_INTEGER) : this.plusMinutes(-minutesToSubtract));\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in seconds subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} secondsToSubtract - the seconds to subtract, positive or negative\n     * @return {Duration} based on this duration with the specified seconds subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusSeconds(secondsToSubtract) {\n        return (secondsToSubtract === MIN_SAFE_INTEGER ? this.plusSeconds(MAX_SAFE_INTEGER) : this.plusSeconds(-secondsToSubtract));\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in milliseconds subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} millisToSubtract - the milliseconds to subtract, positive or negative\n     * @return {Duration} based on this duration with the specified milliseconds subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusMillis(millisToSubtract) {\n        return (millisToSubtract === MIN_SAFE_INTEGER ? this.plusMillis(MAX_SAFE_INTEGER) : this.plusMillis(-millisToSubtract));\n    }\n\n    /**\n     * Returns a copy of this duration with the specified duration in nanoseconds subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} nanosToSubtract - the nanoseconds to subtract, positive or negative\n     * @return {Duration} based on this duration with the specified nanoseconds subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusNanos(nanosToSubtract) {\n        return (nanosToSubtract === MIN_SAFE_INTEGER ? this.plusNanos(MAX_SAFE_INTEGER) : this.plusNanos(-nanosToSubtract));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this duration multiplied by the scalar.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} multiplicand - the value to multiply the duration by, positive or negative\n     * @return {Duration} based on this duration multiplied by the specified scalar, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    multipliedBy(multiplicand) {\n        if (multiplicand === 0) {\n            return Duration.ZERO;\n        }\n        if (multiplicand === 1) {\n            return this;\n        }\n        let secs = MathUtil.safeMultiply(this._seconds, multiplicand);\n        let nos = MathUtil.safeMultiply(this._nanos, multiplicand);\n        secs = secs + MathUtil.intDiv(nos, LocalTime.NANOS_PER_SECOND);\n        nos = MathUtil.intMod(nos, LocalTime.NANOS_PER_SECOND);\n        return Duration.ofSeconds(secs, nos);\n    }\n\n    /**\n     * Returns a copy of this duration divided by the specified value.\n     *\n     * In opposite to the threeten implementation the division is realized by floating point not by\n     * fixed point arithmetic. Expect floating point rounding errors for {@link Duration.dividedBy}.\n     *\n     * @param {Number} divisor - the value to divide the duration by, positive or negative, not zero\n     * @return {Duration} based on this duration divided by the specified divisor, not null\n     * @throws ArithmeticException if the divisor is zero or if numeric overflow occurs\n     */\n    dividedBy(divisor) {\n        if (divisor === 0) {\n            throw new ArithmeticException('Cannot divide by zero');\n        }\n        if (divisor === 1) {\n            return this;\n        }\n        const secs = MathUtil.intDiv(this._seconds, divisor);\n        const secsMod = MathUtil.roundDown(((this._seconds/ divisor) - secs) * LocalTime.NANOS_PER_SECOND);\n        let nos = MathUtil.intDiv(this._nanos, divisor);\n        nos = secsMod + nos;\n        return Duration.ofSeconds(secs, nos);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this duration with the length negated.\n     *\n     * This method swaps the sign of the total length of this duration.\n     * For example, {@link PT1.3S} will be returned as {@link PT-1.3S}.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @return {Duration} based on this duration with the amount negated, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    negated() {\n        return this.multipliedBy(-1);\n    }\n\n    /**\n     * Returns a copy of this duration with a positive length.\n     *\n     * This method returns a positive duration by effectively removing the sign from any negative total length.\n     * For example, {@link PT-1.3S} will be returned as {@link PT1.3S}.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @return {Duration} based on this duration with an absolute length, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    abs() {\n        return this.isNegative() ? this.negated() : this;\n    }\n\n    //-------------------------------------------------------------------------\n    /**\n     * Adds this duration to the specified temporal object.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with this duration added.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#plus}.\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   dateTime = thisDuration.addTo(dateTime);\n     *   dateTime = dateTime.plus(thisDuration);\n     * </pre>\n     *\n     * The calculation will add the seconds, then nanos.\n     * Only non-zero amounts will be added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} temporal - the temporal object to adjust, not null\n     * @return {Temporal} an object of the same type with the adjustment made, not null\n     * @throws DateTimeException if unable to add\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    addTo(temporal) {\n        requireNonNull(temporal, 'temporal');\n        if (this._seconds !== 0) {\n            temporal = temporal.plus(this._seconds, ChronoUnit.SECONDS);\n        }\n        if (this._nanos !== 0) {\n            temporal = temporal.plus(this._nanos, ChronoUnit.NANOS);\n        }\n        return temporal;\n    }\n\n    /**\n     * Subtracts this duration from the specified temporal object.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with this duration subtracted.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#minus}.\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   dateTime = thisDuration.subtractFrom(dateTime);\n     *   dateTime = dateTime.minus(thisDuration);\n     * </pre>\n     *\n     * The calculation will subtract the seconds, then nanos.\n     * Only non-zero amounts will be added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} temporal - the temporal object to adjust, not null\n     * @return {Temporal} an object of the same type with the adjustment made, not null\n     * @throws DateTimeException if unable to subtract\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    subtractFrom(temporal) {\n        requireNonNull(temporal, 'temporal');\n        if (this._seconds !== 0) {\n            temporal = temporal.minus(this._seconds, ChronoUnit.SECONDS);\n        }\n        if (this._nanos !== 0) {\n            temporal = temporal.minus(this._nanos, ChronoUnit.NANOS);\n        }\n        return temporal;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the number of days in this duration.\n     *\n     * This returns the total number of days in the duration by dividing the\n     * number of seconds by 86400.\n     * This is based on the standard definition of a day as 24 hours.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @return {number} the number of days in the duration, may be negative\n     */\n    toDays() {\n        return MathUtil.intDiv(this._seconds, LocalTime.SECONDS_PER_DAY);\n    }\n\n    /**\n     * Gets the number of hours in this duration.\n     *\n     * This returns the total number of hours in the duration by dividing the\n     * number of seconds by 3600.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @return {number} the number of hours in the duration, may be negative\n     */\n    toHours() {\n        return MathUtil.intDiv(this._seconds, LocalTime.SECONDS_PER_HOUR);\n    }\n\n    /**\n     * Gets the number of minutes in this duration.\n     *\n     * This returns the total number of minutes in the duration by dividing the\n     * number of seconds by 60.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @return {number} the number of minutes in the duration, may be negative\n     */\n    toMinutes() {\n        return MathUtil.intDiv(this._seconds, LocalTime.SECONDS_PER_MINUTE);\n    }\n\n    /**\n     * Converts this duration to the total length in milliseconds.\n     *\n     * If this duration is too large to fit in a `long` milliseconds, then an\n     * exception is thrown.\n     *\n     * If this duration has greater than millisecond precision, then the conversion\n     * will drop any excess precision information as though the amount in nanoseconds\n     * was subject to integer division by one million.\n     *\n     * @return {number} the total length of the duration in milliseconds\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    toMillis() {\n        let millis = Math.round(MathUtil.safeMultiply(this._seconds, 1000));\n        millis = MathUtil.safeAdd(millis, MathUtil.intDiv(this._nanos, 1000000));\n        return millis;\n    }\n\n    /**\n     * Converts this duration to the total length in nanoseconds expressed as a `long`.\n     *\n     * If this duration is too large to fit in a `long` nanoseconds, then an\n     * exception is thrown.\n     *\n     * @return {number} the total length of the duration in nanoseconds\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    toNanos() {\n        let totalNanos = MathUtil.safeMultiply(this._seconds, LocalTime.NANOS_PER_SECOND);\n        totalNanos = MathUtil.safeAdd(totalNanos, this._nanos);\n        return totalNanos;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Compares this duration to the specified {@link Duration}.\n     *\n     * The comparison is based on the total length of the durations.\n     *\n     * @param {Duration} otherDuration - the other duration to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     */\n    compareTo(otherDuration) {\n        requireNonNull(otherDuration, 'otherDuration');\n        requireInstance(otherDuration, Duration, 'otherDuration');\n        const cmp = MathUtil.compareNumbers(this._seconds, otherDuration.seconds());\n        if (cmp !== 0) {\n            return cmp;\n        }\n        return this._nanos - otherDuration.nano();\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this duration is equal to the specified {@link Duration}.\n     *\n     * The comparison is based on the total length of the durations.\n     *\n     * @param {*} otherDuration - the other duration, null returns false\n     * @return {boolean} true if the other duration is equal to this one\n     */\n    equals(otherDuration) {\n        if (this === otherDuration) {\n            return true;\n        }\n        if (otherDuration instanceof Duration) {\n            return this.seconds() === otherDuration.seconds() &&\n                   this.nano() === otherDuration.nano();\n        }\n        return false;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * A string representation of this duration using ISO-8601 seconds\n     * based representation, such as {@link PT8H6M12.345S}.\n     *\n     * The format of the returned string will be {@link PTnHnMnS}, where n is\n     * the relevant hours, minutes or seconds part of the duration.\n     * Any fractional seconds are placed after a decimal point in the seconds section.\n     * If a section has a zero value, it is omitted.\n     * The hours, minutes and seconds will all have the same sign.\n     *\n     * Examples:\n     * <pre>\n     *    \"20.345 seconds\"                 -> \"PT20.345S\n     *    \"15 minutes\" (15 * 60 seconds)   -> \"PT15M\"\n     *    \"10 hours\" (10 * 3600 seconds)   -> \"PT10H\"\n     *    \"2 days\" (2 * 86400 seconds)     -> \"PT48H\"\n     * </pre>\n     * Note that multiples of 24 hours are not output as days to avoid confusion\n     * with {@link Period}.\n     *\n     * @return {string} an ISO-8601 representation of this duration, not null\n     */\n    toString() {\n        if (this === Duration.ZERO) {\n            return 'PT0S';\n        }\n        const hours = MathUtil.intDiv(this._seconds, LocalTime.SECONDS_PER_HOUR);\n        const minutes = MathUtil.intDiv(MathUtil.intMod(this._seconds, LocalTime.SECONDS_PER_HOUR), LocalTime.SECONDS_PER_MINUTE);\n        const secs = MathUtil.intMod(this._seconds, LocalTime.SECONDS_PER_MINUTE);\n        let rval = 'PT';\n        if (hours !== 0) {\n            rval += `${hours}H`;\n        }\n        if (minutes !== 0) {\n            rval += `${minutes}M`;\n        }\n        if (secs === 0 && this._nanos === 0 && rval.length > 2) {\n            return rval;\n        }\n        if (secs < 0 && this._nanos > 0) {\n            if (secs === -1) {\n                rval += '-0';\n            } else {\n                rval += secs + 1;\n            }\n        } else {\n            rval += secs;\n        }\n        if (this._nanos > 0) {\n            rval += '.';\n            let nanoString;\n            if (secs < 0) {\n                nanoString = `${2 * LocalTime.NANOS_PER_SECOND - this._nanos}`;\n            } else {\n                nanoString = `${LocalTime.NANOS_PER_SECOND + this._nanos}`;\n            }\n            // remove the leading '1'\n            nanoString = nanoString.slice(1, nanoString.length);\n            rval += nanoString;\n            while (rval.charAt(rval.length - 1) === '0') {\n                rval = rval.slice(0, rval.length - 1);\n            }\n        }\n        rval += 'S';\n        return rval;\n    }\n\n    /**\n     *\n     * @return {string} same as {@link Duration.toString}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n}\n\nexport function _init() {\n    /**\n     * Constant for a duration of zero.\n     */\n    Duration.ZERO = new Duration(0, 0);\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE.md in the root directory of this source tree)\n */\n\n/**\n * attempt to avoid dependency cycles... define all constants here and they could be used\n * so instead of using e.g. Year.MAX_VALUE we could use YearConstants.MAX_VALUE to avoid the cycle\n */\nexport class YearConstants {}\n\nexport function _init() {\n    /**\n     * The minimum supported year\n     */\n    YearConstants.MIN_VALUE = -999999;\n    /**\n     * The maximum supported year\n     */\n    YearConstants.MAX_VALUE = 999999;\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { MathUtil } from '../MathUtil';\n\nimport { Duration } from '../Duration';\nimport { YearConstants } from '../YearConstants';\nimport { TemporalUnit } from './TemporalUnit';\n\n/**\n * A standard set of date periods units.\n *\n * This set of units provide unit-based access to manipulate a date, time or date-time.\n * The standard set of units can be extended by implementing {@link TemporalUnit}.\n *\n * These units are intended to be applicable in multiple calendar systems.\n * For example, most non-ISO calendar systems define units of years, months and days,\n * just with slightly different rules.\n * The documentation of each unit explains how it operates.\n *\n * ### Static properties:\n * \n * - `ChronoUnit.CENTURIES`: Unit that represents the concept of a century. For the ISO calendar\n * system, it is equal to 100 years.\n * \n * - `ChronoUnit.DAYS`: Unit that represents the concept of a day. For the ISO calendar system, it\n * is the standard day from midnight to midnight. The estimated duration of a day is 24 Hours.\n * \n * - `ChronoUnit.DECADES`: Unit that represents the concept of a decade. For the ISO calendar system,\n * it is equal to 10 years.\n * \n * - `ChronoUnit.ERAS`: Unit that represents the concept of an era. The ISO calendar system doesn't\n * have eras thus it is impossible to add an era to a date or date-time. The estimated duration of the\n * era is artificially defined as 1,000,000,000 Years.\n * \n * - `ChronoUnit.FOREVER`: Artificial unit that represents the concept of forever. This is primarily\n * used with {@link TemporalField} to represent unbounded fields such as the year or era. The\n * estimated duration of the era is artificially defined as the largest duration supported by\n * {@link Duration}.\n * \n * - `ChronoUnit.HALF_DAYS`: Unit that represents the concept of half a day, as used in AM/PM. For\n * the ISO calendar system, it is equal to 12 hours.\n *\n * - `ChronoUnit.HOURS`: Unit that represents the concept of an hour. For the ISO calendar system,\n * it is equal to 60 minutes.\n * \n * - `ChronoUnit.MICROS`: Unit that represents the concept of a microsecond. For the ISO calendar\n * system, it is equal to the 1,000,000th part of the second unit.\n * \n * - `ChronoUnit.MILLENNIA`: Unit that represents the concept of a millennium. For the ISO calendar\n * system, it is equal to 1,000 years.\n * \n * - `ChronoUnit.MILLIS`: Unit that represents the concept of a millisecond. For the ISO calendar\n * system, it is equal to the 1000th part of the second unit.\n * \n * - `ChronoUnit.MINUTES`: Unit that represents the concept of a minute. For the ISO calendar system,\n * it is equal to 60 seconds.\n * \n * - `ChronoUnit.MONTHS`: Unit that represents the concept of a month. For the ISO calendar system,\n * the length of the month varies by month-of-year. The estimated duration of a month is one twelfth\n * of 365.2425 Days.\n * \n * - `ChronoUnit.NANOS`: Unit that represents the concept of a nanosecond, the smallest supported unit\n * of time. For the ISO calendar system, it is equal to the 1,000,000,000th part of the second unit.\n * \n * - `ChronoUnit.SECONDS`: Unit that represents the concept of a second. For the ISO calendar system,\n * it is equal to the second in the SI system of units, except around a leap-second.\n * \n * - `ChronoUnit.WEEKS`: Unit that represents the concept of a week. For the ISO calendar system,\n * it is equal to 7 Days.\n * \n * - `ChronoUnit.YEARS`: Unit that represents the concept of a year. For the ISO calendar system, it\n * is equal to 12 months. The estimated duration of a year is 365.2425 Days.\n */\nexport class ChronoUnit extends TemporalUnit {\n\n    /**\n     *\n     * @param {String} name\n     * @param {Duration} estimatedDuration\n     * @private\n     */\n    constructor (name, estimatedDuration) {\n        super();\n        this._name = name;\n        this._duration = estimatedDuration;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * @return {Duration} the duration of this unit, which may be an estimate.\n     */\n    duration() {\n        return this._duration;\n    }\n\n    /**\n     * @return {boolean} `true` if the duration is estimated, `false` if accurate.\n     */\n    isDurationEstimated() {\n        return this.isDateBased() || this === ChronoUnit.FOREVER;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * @return {boolean} `true` if date unit, `false` if a time unit.\n     */\n    isDateBased() {\n        return this.compareTo(ChronoUnit.DAYS) >= 0 && this !== ChronoUnit.FOREVER;\n    }\n\n    /**\n     * Checks if this unit is a time unit.\n     *\n     * @return {boolean} `true` if time unit, `false` if a date unit.\n     */\n    isTimeBased() {\n        return this.compareTo(ChronoUnit.DAYS) < 0;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * @param {!Temporal} temporal the temporal object to check.\n     * @return {boolean} `true` if the unit is supported.\n     */\n    isSupportedBy(temporal) {\n        if (this === ChronoUnit.FOREVER) {\n            return false;\n        }\n        /* TODO: classes not implemented yet */\n        /*\n        if (temporal instanceof ChronoLocalDate) {\n            return isDateBased();\n        }\n        if (temporal instanceof ChronoLocalDateTime || temporal instanceof ChronoZonedDateTime) {\n            return true;\n        }\n*/\n        try {\n            temporal.plus(1, this);\n            return true;\n        } catch (e) {\n            try {\n                temporal.plus(-1, this);\n                return true;\n            } catch (e2) {\n                return false;\n            }\n        }\n    }\n\n    /**\n     * @param {!Temporal} temporal the temporal object to adjust.\n     * @param {number} amount the period of this unit to add, positive or negative.\n     * @return {Temporal} the adjusted temporal object.\n     * @throws DateTimeException if the period cannot be added.\n     */\n    addTo(temporal, amount) {\n        return temporal.plus(amount, this);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * @param {!Temporal} temporal1 the base temporal object.\n     * @param {!Temporal} temporal2 the other temporal object.\n     * @return {number} the period between temporal1 and temporal2 in terms of this unit;\n     *  positive if temporal2 is later than temporal1, negative if earlier.\n     * @throws DateTimeException if the period cannot be calculated.\n     * @throws ArithmeticException if numeric overflow occurs.\n     */\n    between(temporal1, temporal2) {\n        return temporal1.until(temporal2, this);\n    }\n\n    //-----------------------------------------------------------------------\n    toString() {\n        return this._name;\n    }\n\n    /**\n     * Compares this ChronoUnit to the specified {@link TemporalUnit}.\n     *\n     * The comparison is based on the total length of the durations.\n     *\n     * @param {!TemporalUnit} other the other unit to compare to.\n     * @return the comparator value, negative if less, positive if greater.\n     */\n    compareTo(other) {\n        return this.duration().compareTo(other.duration());\n    }\n\n}\n\nexport function _init() {\n    /**\n     * Unit that represents the concept of a nanosecond, the smallest supported unit of time.\n     * For the ISO calendar system, it is equal to the 1,000,000,000th part of the second unit.\n     */\n    ChronoUnit.NANOS = new ChronoUnit('Nanos', Duration.ofNanos(1));\n    /**\n     * Unit that represents the concept of a microsecond.\n     * For the ISO calendar system, it is equal to the 1,000,000th part of the second unit.\n     */\n    ChronoUnit.MICROS = new ChronoUnit('Micros', Duration.ofNanos(1000));\n    /**\n     * Unit that represents the concept of a millisecond.\n     * For the ISO calendar system, it is equal to the 1000th part of the second unit.\n     */\n    ChronoUnit.MILLIS = new ChronoUnit('Millis', Duration.ofNanos(1000000));\n    /**\n     * Unit that represents the concept of a second.\n     * For the ISO calendar system, it is equal to the second in the SI system\n     * of units, except around a leap-second.\n     */\n    ChronoUnit.SECONDS = new ChronoUnit('Seconds', Duration.ofSeconds(1));\n    /**\n     * Unit that represents the concept of a minute.\n     * For the ISO calendar system, it is equal to 60 seconds.\n     */\n    ChronoUnit.MINUTES = new ChronoUnit('Minutes', Duration.ofSeconds(60));\n    /**\n     * Unit that represents the concept of an hour.\n     * For the ISO calendar system, it is equal to 60 minutes.\n     */\n    ChronoUnit.HOURS = new ChronoUnit('Hours', Duration.ofSeconds(3600));\n    /**\n     * Unit that represents the concept of half a day, as used in AM/PM.\n     * For the ISO calendar system, it is equal to 12 hours.\n     */\n    ChronoUnit.HALF_DAYS = new ChronoUnit('HalfDays', Duration.ofSeconds(43200));\n    /**\n     * Unit that represents the concept of a day.\n     * For the ISO calendar system, it is the standard day from midnight to midnight.\n     * The estimated duration of a day is 24 hours.\n     *\n     * When used with other calendar systems it must correspond to the day defined by\n     * the rising and setting of the Sun on Earth. It is not required that days begin\n     * at midnight - when converting between calendar systems, the date should be\n     * equivalent at midday.\n     */\n    ChronoUnit.DAYS = new ChronoUnit('Days', Duration.ofSeconds(86400));\n    /**\n     * Unit that represents the concept of a week.\n     * For the ISO calendar system, it is equal to 7 days.\n     *\n     * When used with other calendar systems it must correspond to an integral number of days.\n     */\n    ChronoUnit.WEEKS = new ChronoUnit('Weeks', Duration.ofSeconds(7 * 86400));\n    /**\n     * Unit that represents the concept of a month.\n     * For the ISO calendar system, the length of the month varies by month-of-year.\n     * The estimated duration of a month is one twelfth of 365.2425 days.\n     *\n     * When used with other calendar systems it must correspond to an integral number of days.\n     */\n    ChronoUnit.MONTHS = new ChronoUnit('Months', Duration.ofSeconds(31556952 / 12));\n    /**\n     * Unit that represents the concept of a year.\n     * For the ISO calendar system, it is equal to 12 months.\n     * The estimated duration of a year is 365.2425 days.\n     *\n     * When used with other calendar systems it must correspond to an integral number of days\n     * or months roughly equal to a year defined by the passage of the Earth around the Sun.\n     */\n    ChronoUnit.YEARS = new ChronoUnit('Years', Duration.ofSeconds(31556952));\n    /**\n     * Unit that represents the concept of a decade.\n     * For the ISO calendar system, it is equal to 10 years.\n     *\n     * When used with other calendar systems it must correspond to an integral number of days\n     * and is normally an integral number of years.\n     */\n    ChronoUnit.DECADES = new ChronoUnit('Decades', Duration.ofSeconds(31556952 * 10));\n    /**\n     * Unit that represents the concept of a century.\n     * For the ISO calendar system, it is equal to 100 years.\n     *\n     * When used with other calendar systems it must correspond to an integral number of days\n     * and is normally an integral number of years.\n     */\n    ChronoUnit.CENTURIES = new ChronoUnit('Centuries', Duration.ofSeconds(31556952 * 100));\n    /**\n     * Unit that represents the concept of a millennium.\n     * For the ISO calendar system, it is equal to 1000 years.\n     *\n     * When used with other calendar systems it must correspond to an integral number of days\n     * and is normally an integral number of years.\n     */\n    ChronoUnit.MILLENNIA = new ChronoUnit('Millennia', Duration.ofSeconds(31556952 * 1000));\n    /**\n     * Unit that represents the concept of an era.\n     * The ISO calendar system doesn't have eras thus it is impossible to add\n     * an era to a date or date-time.\n     * The estimated duration of the era is artificially defined as {Year.MAX_VALUE} + 1.\n     *\n     * When used with other calendar systems there are no restrictions on the unit.\n     */\n    ChronoUnit.ERAS = new ChronoUnit('Eras', Duration.ofSeconds(31556952 * (YearConstants.MAX_VALUE + 1)));\n    /**\n     * Artificial unit that represents the concept of forever.\n     * This is primarily used with {@link TemporalField} to represent unbounded fields\n     * such as the year or era.\n     * The estimated duration of the era is artificially defined as the largest duration\n     * supported by {@link Duration}.\n     */\n    ChronoUnit.FOREVER = new ChronoUnit('Forever', Duration.ofSeconds(MathUtil.MAX_SAFE_INTEGER, 999999999));\n}\n","import { abstractMethodFail } from '../assert';\n\n/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n/**\n * A field of date-time, such as month-of-year or hour-of-minute.\n *\n * Date and time is expressed using fields which partition the time-line into something\n * meaningful for humans. Implementations of this interface represent those fields.\n *\n * The most commonly used units are defined in {@link ChronoField}.\n * Further fields are supplied in {@link IsoFields}, {@link WeekFields} and {@link JulianFields}.\n * Fields can also be written by application code by implementing this interface.\n *\n * The field works using double dispatch. Client code calls methods on a date-time like\n * {@link LocalDateTime} which check if the field is a {@link ChronoField}.\n * If it is, then the date-time must handle it.\n * Otherwise, the method call is re-dispatched to the matching method in this interface.\n *\n * @interface\n */\nexport class TemporalField {\n    /**\n     * Checks if this field represents a component of a date.\n     *\n     * @return {boolean} `true` if it is a component of a date, `false` otherwise.\n     */\n    isDateBased() {\n        abstractMethodFail('isDateBased');\n    }\n\n    /**\n     * Checks if this field represents a component of a time.\n     *\n     * @return {boolean} `true` if it is a component of a time, `false` otherwise.\n     */\n    isTimeBased() {\n        abstractMethodFail('isTimeBased');\n    }\n\n    /**\n     * Gets the unit that the field is measured in.\n     *\n     * The unit of the field is the period that varies within the range.\n     * For example, in the field 'MonthOfYear', the unit is 'Months'.\n     * See also {@link rangeUnit}.\n     *\n     * @return {TemporalUnit} the period unit defining the base unit of the field.\n     */\n    baseUnit() {\n        abstractMethodFail('baseUnit');\n    }\n\n    /**\n     * Gets the range that the field is bound by.\n     * \n     * The range of the field is the period that the field varies within.\n     * For example, in the field 'MonthOfYear', the range is 'Years'.\n     * See also {@link baseUnit}.\n     * \n     * The range is never null. For example, the 'Year' field is shorthand for\n     * 'YearOfForever'. It therefore has a unit of 'Years' and a range of 'Forever'.\n     *\n     * @return {TemporalUnit} the period unit defining the range of the field.\n     */\n    rangeUnit() {\n        abstractMethodFail('rangeUnit');\n    }\n\n    /**\n     * Gets the range of valid values for the field.\n     *\n     * All fields can be expressed as an integer.\n     * This method returns an object that describes the valid range for that value.\n     * This method is generally only applicable to the ISO-8601 calendar system.\n     *\n     * Note that the result only describes the minimum and maximum valid values\n     * and it is important not to read too much into them. For example, there\n     * could be values within the range that are invalid for the field.\n     *\n     * @return {ValueRange} the range of valid values for the field.\n     */\n    range() {\n        abstractMethodFail('range');\n    }\n\n    /**\n     * Get the range of valid values for this field using the temporal object to\n     * refine the result.\n     *\n     * This uses the temporal object to find the range of valid values for the field.\n     * This is similar to {@link range}, however this method refines the result\n     * using the temporal. For example, if the field is {@link DAY_OF_MONTH} the\n     * {@link range} method is not accurate as there are four possible month lengths,\n     * 28, 29, 30 and 31 days. Using this method with a date allows the range to be\n     * accurate, returning just one of those four options.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link TemporalAccessor#range}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisField.rangeRefinedBy(temporal);\n     *   temporal = temporal.range(thisField);\n     * </pre>\n     * It is recommended to use the second approach, {@link range},\n     * as it is a lot clearer to read in code.\n     *\n     * Implementations should perform any queries or calculations using the fields\n     * available in {@link ChronoField}.\n     * If the field is not supported a {@link DateTimeException} must be thrown.\n     *\n     * @param {!TemporalAccessor} temporal the temporal object used to refine the result.\n     * @return {ValueRange} the range of valid values for this field.\n     * @throws {DateTimeException} if the range for the field cannot be obtained.\n     * \n     */\n    // eslint-disable-next-line no-unused-vars\n    rangeRefinedBy(temporal) {\n        abstractMethodFail('rangeRefinedBy');\n    }\n\n    /**\n     * Gets the value of this field from the specified temporal object.\n     *\n     * This queries the temporal object for the value of this field.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link TemporalAccessor#get}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisField.getFrom(temporal);\n     *   temporal = temporal.get(thisField);\n     * </pre>\n     * It is recommended to use the second approach, as it is a lot clearer to read in code.\n     *\n     * Implementations should perform any queries or calculations using the fields\n     * available in {@link ChronoField}.\n     * If the field is not supported a {@link DateTimeException} must be thrown.\n     *\n     * @param {!TemporalAccesor} temporal the temporal object to query.\n     * @return {number} the value of this field.\n     * @throws {DateTimeException} if a value for the field cannot be obtained.\n     */\n    // eslint-disable-next-line no-unused-vars\n    getFrom(temporal) {\n        abstractMethodFail('getFrom');\n    }\n\n    /**\n     * Returns a copy of the specified temporal object with the value of this field set.\n     *\n     * This returns a new temporal object based on the specified one with the value for\n     * this field changed. For example, on a {@link LocalDate}, this could be used to\n     * set the year, month or day-of-month.\n     * The returned object has the same observable type as the specified object.\n     *\n     * In some cases, changing a field is not fully defined. For example, if the target object is\n     * a date representing the 31st January, then changing the month to February would be unclear.\n     * In cases like this, the implementation is responsible for resolving the result.\n     * Typically it will choose the previous valid date, which would be the last valid\n     * day of February in this example.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisField.adjustInto(temporal);\n     *   temporal = temporal.with(thisField);\n     * </pre>\n     * It is recommended to use the second approach, `with(temporal)`,\n     * as it is a lot clearer to read in code.\n     *\n     * Implementations should perform any queries or calculations using the fields\n     * available in {@link ChronoField}.\n     * If the field is not supported a {@link DateTimeException} must be thrown.\n     *\n     * Implementations must not alter the specified temporal object.\n     * Instead, an adjusted copy of the original must be returned.\n     * This provides equivalent, safe behavior for immutable and mutable implementations.\n     *\n     * @param {!Temporal} temporal the temporal object to adjust.\n     * @param {!number} newValue the new value of the field.\n     * @return {Temporal} the adjusted temporal object.\n     * @throws {DateTimeException} if the field cannot be set.\n     */\n    // eslint-disable-next-line no-unused-vars\n    adjustInto(temporal, newValue) {\n        abstractMethodFail('adjustInto');\n    }\n\n    /**\n     * Checks if this field is supported by the temporal object.\n     *\n     * This determines whether the temporal accessor supports this field.\n     * If this returns false, the the temporal cannot be queried for this field.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link TemporalAccessor#isSupported}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisField.isSupportedBy(temporal);\n     *   temporal = temporal.isSupported(thisField);\n     * </pre>\n     * It is recommended to use the second approach, `isSupported(temporal)`,\n     * as it is a lot clearer to read in code.\n     *\n     * Implementations should determine whether they are supported using the fields\n     * available in {@link ChronoField}.\n     *\n     * @param {!TemporalAccesor} temporal the temporal object to query.\n     * @return {boolean} `true` if the date-time can be queried for this field, `false` if not.\n     */\n    // eslint-disable-next-line no-unused-vars\n    isSupportedBy(temporal) {\n        abstractMethodFail('isSupportedBy');\n    }\n\n    /**\n     * @return {string}\n     */\n    displayName(/* TODO: locale */) {\n        abstractMethodFail('displayName');\n    }\n\n    /**\n    * @param {*} other\n    * @returns {boolean}\n    */\n    // eslint-disable-next-line no-unused-vars\n    equals(other) {\n        abstractMethodFail('equals');\n    }\n\n    /**\n     * @returns {string}\n     */\n    name() {\n        abstractMethodFail('name');\n    }\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert } from '../assert';\nimport { DateTimeException, IllegalArgumentException } from '../errors';\nimport { MathUtil } from '../MathUtil';\n\n/**\n * The range of valid values for a date-time field.\n *\n * All TemporalField instances have a valid range of values.\n * For example, the ISO day-of-month runs from 1 to somewhere between 28 and 31.\n * This class captures that valid range.\n *\n * It is important to be aware of the limitations of this class.\n * Only the minimum and maximum values are provided.\n * It is possible for there to be invalid values within the outer range.\n * For example, a weird field may have valid values of 1, 2, 4, 6, 7, thus\n * have a range of '1 - 7', despite that fact that values 3 and 5 are invalid.\n *\n * Instances of this class are not tied to a specific field.\n */\nexport class ValueRange {\n\n    /**\n     *\n     * @param {!number} minSmallest\n     * @param {!number} minLargest\n     * @param {!number} maxSmallest\n     * @param {!number} maxLargest\n     * @private\n     */\n    constructor(minSmallest, minLargest, maxSmallest, maxLargest) {\n        assert(!(minSmallest > minLargest), `Smallest minimum value '${minSmallest \n        }' must be less than largest minimum value '${minLargest}'`, IllegalArgumentException);\n        assert(!(maxSmallest > maxLargest), `Smallest maximum value '${maxSmallest \n        }' must be less than largest maximum value '${maxLargest}'`, IllegalArgumentException);\n        assert(!(minLargest > maxLargest), `Minimum value '${minLargest \n        }' must be less than maximum value '${maxLargest}'`, IllegalArgumentException);\n\n        this._minSmallest = minSmallest;\n        this._minLargest = minLargest;\n        this._maxLargest = maxLargest;\n        this._maxSmallest = maxSmallest;\n    }\n\n    /**\n     * Is the value range fixed and fully known.\n     *\n     * For example, the ISO day-of-month runs from 1 to between 28 and 31.\n     * Since there is uncertainty about the maximum value, the range is not fixed.\n     * However, for the month of January, the range is always 1 to 31, thus it is fixed.\n     *\n     * @return {boolean} true if the set of values is fixed\n     */\n    isFixed() {\n        return this._minSmallest === this._minLargest && this._maxSmallest === this._maxLargest;\n    }\n\n    /**\n     *\n     * @returns {number}\n     */\n    minimum(){\n        return this._minSmallest;\n    }\n\n    /**\n     *\n     * @returns {number}\n     */\n    largestMinimum(){\n        return this._minLargest;\n    }\n\n    /**\n     *\n     * @returns {number}\n     */\n    maximum(){\n        return this._maxLargest;\n    }\n\n    /**\n     *\n     * @returns {number}\n     */\n    smallestMaximum(){\n        return this._maxSmallest;\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    isValidValue(value) {\n        return (this.minimum() <= value && value <= this.maximum());\n    }\n\n    /**\n     *\n     * @param {number} value\n     * @param {TemporalField} field\n     */\n    checkValidValue(value, field) {\n        let msg;\n        if (!this.isValidValue(value)) {\n            if (field != null) {\n                msg = `Invalid value for ${field} (valid values ${this.toString()}): ${value}`;\n            } else {\n                msg = `Invalid value (valid values ${this.toString()}): ${value}`;\n            }\n            return assert(false, msg, DateTimeException);\n        }\n        return value;\n    }\n\n    /**\n     * Checks that the specified value is valid and fits in an `int`.\n     *\n     * This validates that the value is within the valid range of values and that\n     * all valid values are within the bounds of an `int`.\n     * The field is only used to improve the error message.\n     *\n     * @param {number} value - the value to check\n     * @param {TemporalField} field - the field being checked, may be null\n     * @return {number} the value that was passed in\n     * @see #isValidIntValue(long)\n     */\n    checkValidIntValue(value, field) {\n        if (this.isValidIntValue(value) === false) {\n            throw new DateTimeException(`Invalid int value for ${field}: ${value}`);\n        }\n        return value;\n    }\n\n    /**\n     * Checks if the value is within the valid range and that all values\n     * in the range fit in an `int`.\n     *\n     * This method combines {@link isIntValue} and {@link isValidValue}.\n     *\n     * @param {number} value - the value to check\n     * @return true if the value is valid and fits in an `int`\n     */\n    isValidIntValue(value) {\n        return this.isIntValue() && this.isValidValue(value);\n    }\n\n    /**\n     * Checks if all values in the range fit in an `int`.\n     *\n     * This checks that all valid values are within the bounds of an `int`.\n     *\n     * For example, the ISO month-of-year has values from 1 to 12, which fits in an `int`.\n     * By comparison, ISO nano-of-day runs from 1 to 86,400,000,000,000 which does not fit in an `int`.\n     *\n     * This implementation uses {@link getMinimum} and {@link getMaximum}.\n     *\n     * @return boolean if a valid value always fits in an `int`\n     */\n    isIntValue() { // should be isSafeIntegerValue\n        return this.minimum() >= MathUtil.MIN_SAFE_INTEGER && this.maximum() <= MathUtil.MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if this range is equal to another range.\n     *\n     * The comparison is based on the four values, minimum, largest minimum,\n     * smallest maximum and maximum.\n     * Only objects of type {@link ValueRange} are compared, other types return false.\n     *\n     * @param {*} other - the object to check, null returns false\n     * @return {boolean} true if this is equal to the other range\n     */\n    equals(other) {\n        if (other === this) {\n            return true;\n        }\n        if (other instanceof ValueRange) {\n            return this._minSmallest === other._minSmallest && this._minLargest === other._minLargest &&\n                this._maxSmallest === other._maxSmallest && this._maxLargest === other._maxLargest;\n        }\n        return false;\n    }\n\n    /**\n     * A hash code for this range.\n     *\n     * @return {number} a suitable hash code\n     */\n    hashCode() {\n        return MathUtil.hashCode(this._minSmallest, this._minLargest, this._maxSmallest, this._maxLargest);\n    }\n\n    /*\n     * Outputs this range as a String.\n     *\n     * The format will be '{min}/{largestMin} - {smallestMax}/{max}',\n     * where the largestMin or smallestMax sections may be omitted, together\n     * with associated slash, if they are the same as the min or max.\n     *\n     * @return {string} a string representation of this range, not null\n     */\n    toString() {\n        let str = this.minimum() + (this.minimum() !== this.largestMinimum() ? `/${this.largestMinimum()}` : '');\n        str += ' - ';\n        str += this.smallestMaximum() + (this.smallestMaximum() !== this.maximum() ? `/${this.maximum()}` : '');\n        return str;\n    }\n\n    /*\n     * called with 2 params: Obtains a fixed value range.\n     *\n     * This factory obtains a range where the minimum and maximum values are fixed.\n     * For example, the ISO month-of-year always runs from 1 to 12.\n     *\n     * @param min  the minimum value\n     * @param max  the maximum value\n     * @return the ValueRange for min, max, not null\n\n     * called with 3 params: Obtains a variable value range.\n     *\n     * This factory obtains a range where the minimum value is fixed and the maximum value may vary.\n     * For example, the ISO day-of-month always starts at 1, but ends between 28 and 31.\n     *\n     * @param min  the minimum value\n     * @param maxSmallest  the smallest maximum value\n     * @param maxLargest  the largest maximum value\n     * @return the ValueRange for min, smallest max, largest max, not null\n\n     * called with 4 params: Obtains a fully variable value range.\n     *\n     * This factory obtains a range where both the minimum and maximum value may vary.\n     *\n     * @param minSmallest  the smallest minimum value\n     * @param minLargest  the largest minimum value\n     * @param maxSmallest  the smallest maximum value\n     * @param maxLargest  the largest maximum value\n     *\n     * @return {ValueRange} the ValueRange for smallest min, largest min, smallest max, largest max, not null\n     */\n    static of() {\n        if (arguments.length === 2) {\n            return new ValueRange(arguments[0], arguments[0], arguments[1], arguments[1]);\n        } else if (arguments.length === 3) {\n            return new ValueRange(arguments[0], arguments[0], arguments[1], arguments[2]);\n        } else if (arguments.length === 4) {\n            return new ValueRange(arguments[0], arguments[1], arguments[2], arguments[3]);\n        } else {\n            return assert(false, `Invalid number of arguments ${arguments.length}`, IllegalArgumentException);\n        }\n    }\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from '../MathUtil';\n\nimport { ChronoUnit } from './ChronoUnit';\nimport { TemporalField } from './TemporalField';\nimport { ValueRange } from './ValueRange';\nimport { YearConstants } from '../YearConstants';\n\n/**\n * A standard set of fields.\n *\n * This set of fields provide field-based access to manipulate a date, time or date-time.\n * The standard set of fields can be extended by implementing {@link TemporalField}.\n *\n * These fields are intended to be applicable in multiple calendar systems.\n * For example, most non-ISO calendar systems define dates as a year, month and day,\n * just with slightly different rules.\n * The documentation of each field explains how it operates.\n *\n * ### Static properties:\n *\n * - `ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH`: This represents concept of the count of\n * days within the period of a week where the weeks are aligned to the start of the month.\n * This field is typically used with `ALIGNED_WEEK_OF_MONTH`.\n * \n * - `ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR`: This represents concept of the count of days\n * within the period of a week where the weeks are aligned to the start of the year.\n * This field is typically used with `ALIGNED_WEEK_OF_YEAR`.\n * \n * - `ChronoField.ALIGNED_WEEK_OF_MONTH`: This represents concept of the count of weeks within\n * the period of a month where the weeks are aligned to the start of the month. This field\n * is typically used with `ALIGNED_DAY_OF_WEEK_IN_MONTH`.\n * \n * - `ChronoField.ALIGNED_WEEK_OF_YEAR`: This represents concept of the count of weeks within\n * the period of a year where the weeks are aligned to the start of the year. This field\n * is typically used with `ALIGNED_DAY_OF_WEEK_IN_YEAR`.\n * \n * - `ChronoField.AMPM_OF_DAY`: This counts the AM/PM within the day, from 0 (AM) to 1 (PM).\n * \n * - `ChronoField.CLOCK_HOUR_OF_AMPM`: This counts the hour within the AM/PM, from 1 to 12.\n * This is the hour that would be observed on a standard 12-hour analog wall clock.\n * \n * - `ChronoField.CLOCK_HOUR_OF_DAY`: This counts the hour within the AM/PM, from 1 to 24.\n * This is the hour that would be observed on a 24-hour analog wall clock.\n * \n * - `ChronoField.DAY_OF_MONTH`: This represents the concept of the day within the month.\n * In the default ISO calendar system, this has values from 1 to 31 in most months.\n * April, June, September, November have days from 1 to 30, while February has days from\n * 1 to 28, or 29 in a leap year.\n * \n * - `ChronoField.DAY_OF_WEEK`: This represents the standard concept of the day of the week.\n * In the default ISO calendar system, this has values from Monday (1) to Sunday (7).\n * The {@link DayOfWeek} class can be used to interpret the result.\n * \n * - `ChronoField.DAY_OF_YEAR`: This represents the concept of the day within the year.\n * In the default ISO calendar system, this has values from 1 to 365 in standard years and\n * 1 to 366 in leap years.\n * \n * - `ChronoField.EPOCH_DAY`: This field is the sequential count of days where\n * 1970-01-01 (ISO) is zero. Note that this uses the local time-line, ignoring offset and\n * time-zone.\n * \n * - `ChronoField.ERA`: This represents the concept of the era, which is the largest\n * division of the time-line. This field is typically used with `YEAR_OF_ERA`.\n * \n *     In the default ISO calendar system, there are two eras defined, 'BCE' and 'CE'. The era\n * 'CE' is the one currently in use and year-of-era runs from 1 to the maximum value.\n * The era 'BCE' is the previous era, and the year-of-era runs backwards.\n * \n * - `ChronoField.HOUR_OF_AMPM`: This counts the hour within the AM/PM, from 0 to 11.\n * This is the hour that would be observed on a standard 12-hour digital clock.\n * \n * - `ChronoField.HOUR_OF_DAY`: This counts the hour within the day, from 0 to 23. This is\n * the hour that would be observed on a standard 24-hour digital clock.\n * \n * - `ChronoField.INSTANT_SECONDS`: This represents the concept of the sequential count of\n * seconds where 1970-01-01T00:00Z (ISO) is zero. This field may be used with `NANO_OF_DAY`\n * to represent the fraction of the day.\n * \n *     An Instant represents an instantaneous point on the time-line. On their own they have\n * no elements which allow a local date-time to be obtained. Only when paired with an offset\n * or time-zone can the local date or time be found. This field allows the seconds part of\n * the instant to be queried.\n * \n * - `ChronoField.MICRO_OF_DAY`: This counts the microsecond within the day, from 0 to\n * (24 * 60 * 60 * 1,000,000) - 1.\n * \n *     This field is used to represent the micro-of-day handling any fraction of the second.\n * Implementations of {@link TemporalAccessor} should provide a value for this field if they\n * can return a value for `SECOND_OF_DAY` filling unknown precision with zero.\n * \n *     When this field is used for setting a value, it should behave in the same way as\n * setting `NANO_OF_DAY` with the value multiplied by 1,000.\n * \n * - `ChronoField.MICRO_OF_SECOND`: This counts the microsecond within the second, from 0\n * to 999,999.\n * \n *     This field is used to represent the micro-of-second handling any fraction of the second.\n * Implementations of {@link TemporalAccessor} should provide a value for this field if they\n * can return a value for `SECOND_OF_MINUTE`, `SECOND_OF_DAY` or `INSTANT_SECONDS` filling\n * unknown precision with zero.\n * \n * - `ChronoField.MILLI_OF_DAY`: This counts the millisecond within the day, from 0 to\n * (24 * 60 * 60 * 1,000) - 1.\n * \n *     This field is used to represent the milli-of-day handling any fraction of the second.\n * Implementations of {@link TemporalAccessor} should provide a value for this field if they\n * can return a value for `SECOND_OF_DAY` filling unknown precision with zero.\n * \n *     When this field is used for setting a value, it should behave in the same way as\n * setting `NANO_OF_DAY` with the value multiplied by 1,000,000.\n * \n * - `ChronoField.MILLI_OF_SECOND`: This counts the millisecond within the second, from 0 to\n * 999.\n * \n *     This field is used to represent the milli-of-second handling any fraction of the second.\n * Implementations of {@link TemporalAccessor} should provide a value for this field if they can\n * return a value for `SECOND_OF_MINUTE`, `SECOND_OF_DAY` or `INSTANT_SECONDS` filling unknown\n * precision with zero.\n * \n *     When this field is used for setting a value, it should behave in the same way as\n * setting `NANO_OF_SECOND` with the value multiplied by 1,000,000.\n * \n * - `ChronoField.MINUTE_OF_DAY`: This counts the minute within the day, from 0 to (24 * 60) - 1.\n * \n * - `ChronoField.MINUTE_OF_HOUR`: This counts the minute within the hour, from 0 to 59.\n * \n * - `ChronoField.MONTH_OF_YEAR`: The month-of-year, such as March. This represents the concept\n * of the month within the year. In the default ISO calendar system, this has values from\n * January (1) to December (12).\n * \n * - `ChronoField.NANO_OF_DAY`: This counts the nanosecond within the day, from 0 to\n * (24 * 60 * 60 * 1,000,000,000) - 1.\n * \n *     This field is used to represent the nano-of-day handling any fraction of the second.\n * Implementations of {@link TemporalAccessor} should provide a value for this field if they\n * can return a value for `SECOND_OF_DAY` filling unknown precision with zero.\n * \n * - `ChronoField.NANO_OF_SECOND`: This counts the nanosecond within the second, from 0\n * to 999,999,999.\n * \n *     This field is used to represent the nano-of-second handling any fraction of the second.\n * Implementations of {@link TemporalAccessor} should provide a value for this field if they\n * can return a value for `SECOND_OF_MINUTE`, `SECOND_OF_DAY` or `INSTANT_SECONDS` filling\n * unknown precision with zero.\n * \n *     When this field is used for setting a value, it should set as much precision as the\n * object stores, using integer division to remove excess precision. For example, if the\n * {@link TemporalAccessor} stores time to millisecond precision, then the nano-of-second must\n * be divided by 1,000,000 before replacing the milli-of-second.\n * \n * - `ChronoField.OFFSET_SECONDS`: This represents the concept of the offset in seconds of\n * local time from UTC/Greenwich.\n * \n *     A {@link ZoneOffset} represents the period of time that local time differs from\n * UTC/Greenwich. This is usually a fixed number of hours and minutes. It is equivalent to\n * the total amount of the offset in seconds. For example, during the winter Paris has an\n * offset of +01:00, which is 3600 seconds.\n * \n * - `ChronoField.PROLEPTIC_MONTH`: The proleptic-month, which counts months sequentially\n * from year 0.\n * \n *     The first month in year zero has the value zero. The value increase for later months\n * and decrease for earlier ones. Note that this uses the local time-line, ignoring offset\n * and time-zone.\n * \n * - `ChronoField.SECOND_OF_DAY`: This counts the second within the day, from 0 to\n * (24 * 60 * 60) - 1.\n * \n * - `ChronoField.SECOND_OF_MINUTE`: This counts the second within the minute, from 0 to 59.\n * \n * - `ChronoField.YEAR`: The proleptic year, such as 2012. This represents the concept of\n * the year, counting sequentially and using negative numbers. The proleptic year is not\n * interpreted in terms of the era.\n * \n *     The standard mental model for a date is based on three concepts - year, month and day.\n * These map onto the `YEAR`, `MONTH_OF_YEAR` and `DAY_OF_MONTH` fields. Note that there is no\n * reference to eras. The full model for a date requires four concepts - era, year, month and\n * day. These map onto the `ERA`, `YEAR_OF_ERA`, `MONTH_OF_YEAR` and `DAY_OF_MONTH` fields.\n * Whether this field or `YEAR_OF_ERA` is used depends on which mental model is being used.\n * \n * - `ChronoField.YEAR_OF_ERA`: This represents the concept of the year within the era. This\n * field is typically used with `ERA`. The standard mental model for a date is based on three\n * concepts - year, month and day. These map onto the `YEAR`, `MONTH_OF_YEAR` and\n * `DAY_OF_MONTH` fields. Note that there is no reference to eras. The full model for a date\n * requires four concepts - era, year, month and day. These map onto the `ERA`, `YEAR_OF_ERA`,\n * `MONTH_OF_YEAR` and `DAY_OF_MONTH` fields. Whether this field or `YEAR` is used depends on\n * which mental model is being used.\n * \n *     In the default ISO calendar system, there are two eras defined, 'BCE' and 'CE'.\n * The era 'CE' is the one currently in use and year-of-era runs from 1 to the maximum value.\n * The era 'BCE' is the previous era, and the year-of-era runs backwards.\n * \n *     For example, subtracting a year each time yield the following:\n *    - year-proleptic 2 = 'CE' year-of-era 2\n *    - year-proleptic 1 = 'CE' year-of-era 1\n *    - year-proleptic 0 = 'BCE' year-of-era 1\n *    - year-proleptic -1 = 'BCE' year-of-era 2\n * \n *     Note that the ISO-8601 standard does not actually define eras. Note also that the\n * ISO eras do not align with the well-known AD/BC eras due to the change between the Julian\n * and Gregorian calendar systems.\n */\nexport class ChronoField extends TemporalField {\n\n    /**\n     * helper function to get one of the static ChronoField defines by name, needed to resolve ChronoField from EnumMap\n     *\n     * @param {String} fieldName\n     * @return {ChronoField | null}\n     * @private\n     */\n    static byName(fieldName) {\n        for (const prop in ChronoField) {\n            if (ChronoField[prop]) {\n                if ((ChronoField[prop] instanceof ChronoField) && ChronoField[prop].name() === fieldName) {\n                    return ChronoField[prop];\n                }\n            }\n        }\n    }\n\n    /**\n     *\n     * @param {!string} name\n     * @param {!TemporalUnit} baseUnit\n     * @param {!TemporalUnit} rangeUnit\n     * @param {!ValueRange} range\n     * @private\n     */\n    constructor(name, baseUnit, rangeUnit, range) {\n        super();\n        this._name = name;\n        this._baseUnit = baseUnit;\n        this._rangeUnit = rangeUnit;\n        this._range = range;\n    }\n\n    /**\n     * @return {string}\n     */\n    name(){\n        return this._name;\n    }\n\n    /**\n     * @return {TemporalUnit} the period unit defining the base unit of the field.\n     */\n    baseUnit(){\n        return this._baseUnit;\n    }\n\n    /**\n     * @return {TemporalUnit} the period unit defining the range of the field.\n     */\n    rangeUnit(){\n        return this._rangeUnit;\n    }\n\n    /**\n     * @return {ValueRange} the range of valid values for the field.\n     */\n    range(){\n        return this._range;\n    }\n\n    /**\n     * @returns {string}\n     */\n    displayName(){\n        return this.toString();\n    }\n\n    /**\n     * Checks that the specified value is valid for this field.\n     *\n     * This validates that the value is within the outer range of valid values\n     * returned by {@link range}.\n     *\n     * This method checks against the range of the field in the ISO-8601 calendar system.\n     *\n     * @param {!number} value the value to check.\n     * @returns {number} the value that was passed in.\n     */\n    checkValidValue(value) {\n        return this.range().checkValidValue(value, this);\n    }\n\n    /**\n     * Checks that the specified value is valid and fits in an `int`.\n     *\n     * This validates that the value is within the outer range of valid values\n     * returned by {@link range}.\n     * It also checks that all valid values are within the bounds of an `int`.\n     *\n     * This method checks against the range of the field in the ISO-8601 calendar system.\n     *\n     * @param {number} value the value to check.\n     * @return {number} the value that was passed in.\n     */\n    checkValidIntValue(value) {\n        return this.range().checkValidIntValue(value, this);\n    }\n\n    /**\n     * @return {boolean} `true` if it is a component of a date, `false` otherwise.\n     */\n    isDateBased() {\n        const dateBased =\n            this === ChronoField.DAY_OF_WEEK ||\n            this === ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH ||\n            this === ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR ||\n            this === ChronoField.DAY_OF_MONTH ||\n            this === ChronoField.DAY_OF_YEAR ||\n            this === ChronoField.EPOCH_DAY ||\n            this === ChronoField.ALIGNED_WEEK_OF_MONTH ||\n            this === ChronoField.ALIGNED_WEEK_OF_YEAR ||\n            this === ChronoField.MONTH_OF_YEAR ||\n            this === ChronoField.PROLEPTIC_MONTH ||\n            this === ChronoField.YEAR_OF_ERA ||\n            this === ChronoField.YEAR ||\n            this === ChronoField.ERA;\n        return dateBased;\n    }\n\n    /**\n     * @return {boolean} `true` if it is a component of a time, `false` otherwise.\n     */\n    isTimeBased() {\n        const timeBased =\n            this === ChronoField.NANO_OF_SECOND     ||\n            this === ChronoField.NANO_OF_DAY        ||\n            this === ChronoField.MICRO_OF_SECOND    ||\n            this === ChronoField.MICRO_OF_DAY       ||\n            this === ChronoField.MILLI_OF_SECOND    ||\n            this === ChronoField.MILLI_OF_DAY       ||\n            this === ChronoField.SECOND_OF_MINUTE   ||\n            this === ChronoField.SECOND_OF_DAY      ||\n            this === ChronoField.MINUTE_OF_HOUR     ||\n            this === ChronoField.MINUTE_OF_DAY      ||\n            this === ChronoField.HOUR_OF_AMPM       ||\n            this === ChronoField.CLOCK_HOUR_OF_AMPM ||\n            this === ChronoField.HOUR_OF_DAY        ||\n            this === ChronoField.CLOCK_HOUR_OF_DAY  ||\n            this === ChronoField.AMPM_OF_DAY;\n        return timeBased;\n    }\n\n    /**\n     * @param {!TemporalAccessor} temporal the temporal object used to refine the result.\n     * @return {ValueRange} the range of valid values for this field.\n     * @throws {DateTimeException} if the range for the field cannot be obtained.\n     */\n    rangeRefinedBy(temporal) {\n        return temporal.range(this);\n    }\n\n    \n\n    /**\n     * @param {!TemporalAccesor} temporal the temporal object to query.\n     * @return {number} the value of this field.\n     * @throws {DateTimeException} if a value for the field cannot be obtained.\n     */\n    getFrom(temporal) {\n        return temporal.getLong(this);\n    }\n\n    /**\n     * @returns {string}\n     */\n    toString(){\n        return this.name();\n    }\n\n    /**\n     * @param {*} other\n     * @returns {boolean}\n     */\n    equals(other){\n        return this === other;\n    }\n\n    /**\n     * @param {!Temporal} temporal the temporal object to adjust.\n     * @param {!number} newValue the new value of the field.\n     * @return {Temporal} the adjusted temporal object.\n     * @throws {DateTimeException} if the field cannot be set.\n     */\n    adjustInto(temporal, newValue) {\n        return temporal.with(this, newValue);\n    }\n\n    /**\n     * @param {!TemporalAccesor} temporal the temporal object to query.\n     * @return {boolean} `true` if the date-time can be queried for this field, `false` if not.\n     */\n    isSupportedBy(temporal) {\n        return temporal.isSupported(this);\n    }\n}\n\nexport function _init() {\n\n    ChronoField.NANO_OF_SECOND = new ChronoField('NanoOfSecond', ChronoUnit.NANOS, ChronoUnit.SECONDS, ValueRange.of(0, 999999999));\n\n    ChronoField.NANO_OF_DAY = new ChronoField('NanoOfDay', ChronoUnit.NANOS, ChronoUnit.DAYS, ValueRange.of(0, 86400 * 1000000000 - 1));\n\n    ChronoField.MICRO_OF_SECOND = new ChronoField('MicroOfSecond', ChronoUnit.MICROS, ChronoUnit.SECONDS, ValueRange.of(0, 999999));\n\n    ChronoField.MICRO_OF_DAY = new ChronoField('MicroOfDay', ChronoUnit.MICROS, ChronoUnit.DAYS, ValueRange.of(0, 86400 * 1000000 - 1));\n\n    ChronoField.MILLI_OF_SECOND = new ChronoField('MilliOfSecond', ChronoUnit.MILLIS, ChronoUnit.SECONDS, ValueRange.of(0, 999));\n\n    ChronoField.MILLI_OF_DAY = new ChronoField('MilliOfDay', ChronoUnit.MILLIS, ChronoUnit.DAYS, ValueRange.of(0, 86400 * 1000 - 1));\n\n    ChronoField.SECOND_OF_MINUTE = new ChronoField('SecondOfMinute', ChronoUnit.SECONDS, ChronoUnit.MINUTES, ValueRange.of(0, 59));\n\n    ChronoField.SECOND_OF_DAY = new ChronoField('SecondOfDay', ChronoUnit.SECONDS, ChronoUnit.DAYS, ValueRange.of(0, 86400 - 1));\n\n    ChronoField.MINUTE_OF_HOUR = new ChronoField('MinuteOfHour', ChronoUnit.MINUTES, ChronoUnit.HOURS, ValueRange.of(0, 59));\n\n    ChronoField.MINUTE_OF_DAY = new ChronoField('MinuteOfDay', ChronoUnit.MINUTES, ChronoUnit.DAYS, ValueRange.of(0, (24 * 60) - 1));\n\n    ChronoField.HOUR_OF_AMPM = new ChronoField('HourOfAmPm', ChronoUnit.HOURS, ChronoUnit.HALF_DAYS, ValueRange.of(0, 11));\n\n    ChronoField.CLOCK_HOUR_OF_AMPM = new ChronoField('ClockHourOfAmPm', ChronoUnit.HOURS, ChronoUnit.HALF_DAYS, ValueRange.of(1, 12));\n\n    ChronoField.HOUR_OF_DAY = new ChronoField('HourOfDay', ChronoUnit.HOURS, ChronoUnit.DAYS, ValueRange.of(0, 23));\n\n    ChronoField.CLOCK_HOUR_OF_DAY = new ChronoField('ClockHourOfDay', ChronoUnit.HOURS, ChronoUnit.DAYS, ValueRange.of(1, 24));\n\n    ChronoField.AMPM_OF_DAY = new ChronoField('AmPmOfDay', ChronoUnit.HALF_DAYS, ChronoUnit.DAYS, ValueRange.of(0, 1));\n\n    ChronoField.DAY_OF_WEEK = new ChronoField('DayOfWeek', ChronoUnit.DAYS, ChronoUnit.WEEKS, ValueRange.of(1, 7));\n\n    ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH = new ChronoField('AlignedDayOfWeekInMonth', ChronoUnit.DAYS, ChronoUnit.WEEKS, ValueRange.of(1, 7));\n\n    ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR = new ChronoField('AlignedDayOfWeekInYear', ChronoUnit.DAYS, ChronoUnit.WEEKS, ValueRange.of(1, 7));\n\n    ChronoField.DAY_OF_MONTH = new ChronoField('DayOfMonth', ChronoUnit.DAYS, ChronoUnit.MONTHS, ValueRange.of(1, 28, 31), 'day');\n\n    ChronoField.DAY_OF_YEAR = new ChronoField('DayOfYear', ChronoUnit.DAYS, ChronoUnit.YEARS, ValueRange.of(1, 365, 366));\n\n    ChronoField.EPOCH_DAY = new ChronoField('EpochDay', ChronoUnit.DAYS, ChronoUnit.FOREVER, ValueRange.of(-365961662, 364522971)); // [LocalDate.MIN.toEpochDay() .. LocalDate.MAX.toEpochDay()]\n\n    ChronoField.ALIGNED_WEEK_OF_MONTH = new ChronoField('AlignedWeekOfMonth', ChronoUnit.WEEKS, ChronoUnit.MONTHS, ValueRange.of(1, 4, 5));\n\n    ChronoField.ALIGNED_WEEK_OF_YEAR = new ChronoField('AlignedWeekOfYear', ChronoUnit.WEEKS, ChronoUnit.YEARS, ValueRange.of(1, 53));\n\n    ChronoField.MONTH_OF_YEAR = new ChronoField('MonthOfYear', ChronoUnit.MONTHS, ChronoUnit.YEARS, ValueRange.of(1, 12), 'month');\n\n    ChronoField.PROLEPTIC_MONTH = new ChronoField('ProlepticMonth', ChronoUnit.MONTHS, ChronoUnit.FOREVER, ValueRange.of(YearConstants.MIN_VALUE * 12, YearConstants.MAX_VALUE * 12 + 11));\n\n    ChronoField.YEAR_OF_ERA = new ChronoField('YearOfEra', ChronoUnit.YEARS, ChronoUnit.FOREVER, ValueRange.of(1, YearConstants.MAX_VALUE, YearConstants.MAX_VALUE + 1));\n\n    ChronoField.YEAR = new ChronoField('Year', ChronoUnit.YEARS, ChronoUnit.FOREVER, ValueRange.of(YearConstants.MIN_VALUE, YearConstants.MAX_VALUE), 'year');\n\n    ChronoField.ERA = new ChronoField('Era', ChronoUnit.ERAS, ChronoUnit.FOREVER, ValueRange.of(0, 1));\n\n    ChronoField.INSTANT_SECONDS = new ChronoField('InstantSeconds', ChronoUnit.SECONDS, ChronoUnit.FOREVER, ValueRange.of(MIN_SAFE_INTEGER, MAX_SAFE_INTEGER));\n\n    ChronoField.OFFSET_SECONDS = new ChronoField('OffsetSeconds', ChronoUnit.SECONDS, ChronoUnit.FOREVER, ValueRange.of(-18 * 3600, 18 * 3600));\n\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n/**\n * Common implementations of {@link TemporalQuery}.\n *\n * This class provides common implementations of {@link TemporalQuery}.\n * These queries are primarily used as optimizations, allowing the internals\n * of other objects to be extracted effectively. Note that application code\n * can also use the {@link from} method on most temporal\n * objects as a method reference matching the query interface, such as\n * {@link LocalDate::from} and {@link ZoneId::from}.\n *\n * There are two equivalent ways of using a {@link TemporalQuery}.\n * The first is to invoke the method on the interface directly.\n * The second is to use {@link TemporalAccessor#query}:\n * <pre>\n *   // these two lines are equivalent, but the second approach is recommended\n *   dateTime = query.queryFrom(dateTime);\n *   dateTime = dateTime.query(query);\n * </pre>\n * It is recommended to use the second approach, {@link query},\n * as it is a lot clearer to read in code.\n *\n */\nexport class TemporalQueries {\n\n    /**\n     * A strict query for the {@link ZoneId}.\n     *\n     * This queries a {@link TemporalAccessor} for the zone.\n     * The zone is only returned if the date-time conceptually contains a {@link ZoneId}.\n     * It will not be returned if the date-time only conceptually has an {@link ZoneOffset}.\n     * Thus a {@link ZonedDateTime} will return the result of\n     * {@link getZone}, but an {@link OffsetDateTime} will\n     * return null.\n     *\n     * In most cases, applications should use {@link ZONE} as this query is too strict.\n     *\n     * The result from JDK classes implementing {@link TemporalAccessor} is as follows:\n     * * * {@link LocalDate} returns null\n     * * {@link LocalTime} returns null\n     * * {@link LocalDateTime} returns null\n     * * {@link ZonedDateTime} returns the associated zone\n     * * {@link OffsetTime} returns null\n     * * {@link OffsetDateTime} returns null\n     * * {@link ChronoLocalDate} returns null\n     * * {@link ChronoLocalDateTime} returns null\n     * * {@link ChronoZonedDateTime} returns the associated zone\n     * * {@link Era} returns null\n     * * {@link DayOfWeek} returns null\n     * * {@link Month} returns null\n     * * {@link Year} returns null\n     * * {@link YearMonth} returns null\n     * * {@link MonthDay} returns null\n     * * {@link ZoneOffset} returns null\n     * * {@link Instant} returns null\n     *\n     * @return a query that can obtain the zone ID of a temporal, not null\n     */\n    static zoneId() {\n        return TemporalQueries.ZONE_ID;\n    }\n\n    /**\n     * A query for the {@link Chronology}.\n     *\n     * This queries a {@link TemporalAccessor} for the chronology.\n     * If the target {@link TemporalAccessor} represents a date, or part of a date,\n     * then it should return the chronology that the date is expressed in.\n     * As a result of this definition, objects only representing time, such as\n     * {@link LocalTime}, will return null.\n     *\n     * The result from js-joda classes implementing {@link TemporalAccessor} is as follows:\n     *\n     * * {@link LocalDate} returns * {@link IsoChronology.INSTANCE}\n     * * {@link LocalTime} returns null (does not represent a date)\n     * * {@link LocalDateTime} returns * {@link IsoChronology.INSTANCE}\n     * * {@link ZonedDateTime} returns * {@link IsoChronology.INSTANCE}\n     * * {@link OffsetTime} returns null (does not represent a date)\n     * * {@link OffsetDateTime} returns * {@link IsoChronology.INSTANCE}\n     * * {@link ChronoLocalDate} returns the associated chronology\n     * * {@link ChronoLocalDateTime} returns the associated chronology\n     * * {@link ChronoZonedDateTime} returns the associated chronology\n     * * {@link Era} returns the associated chronology\n     * * {@link DayOfWeek} returns null (shared across chronologies)\n     * * {@link Month} returns * {@link IsoChronology.INSTANCE}\n     * * {@link Year} returns * {@link IsoChronology.INSTANCE}\n     * * {@link YearMonth} returns * {@link IsoChronology.INSTANCE}\n     * * {@link MonthDay} returns null * {@link IsoChronology.INSTANCE}\n     * * {@link ZoneOffset} returns null (does not represent a date)\n     * * {@link Instant} returns null (does not represent a date)\n     *\n     * The method {@link Chronology#from} can be used as a\n     * {@link TemporalQuery}\n     * That method is equivalent to this query, except that it throws an\n     * exception if a chronology cannot be obtained.\n     *\n     * @return {TemporalQuery} a query that can obtain the chronology of a temporal, not null\n     */\n    static chronology() {\n        return TemporalQueries.CHRONO;\n    }\n\n    /**\n     * A query for the smallest supported unit.\n     *\n     * This queries a {@link TemporalAccessor} for the time precision.\n     * If the target {@link TemporalAccessor} represents a consistent or complete date-time,\n     * date or time then this must return the smallest precision actually supported.\n     * Note that fields such as {@link NANO_OF_DAY} and {@link NANO_OF_SECOND}\n     * are defined to always return ignoring the precision, thus this is the only\n     * way to find the actual smallest supported unit.\n     * For example, were {@link GregorianCalendar} to implement {@link TemporalAccessor}\n     * it would return a precision of {@link MILLIS}.\n     *\n     * The result from js-joda classes implementing {@link TemporalAccessor} is as follows:\n     *\n     * {@link LocalDate} returns {@link DAYS}\n     * {@link LocalTime} returns {@link NANOS}\n     * {@link LocalDateTime} returns {@link NANOS}\n     * {@link ZonedDateTime} returns {@link NANOS}\n     * {@link OffsetTime} returns {@link NANOS}\n     * {@link OffsetDateTime} returns {@link NANOS}\n     * {@link ChronoLocalDate} returns {@link DAYS}\n     * {@link ChronoLocalDateTime} returns {@link NANOS}\n     * {@link ChronoZonedDateTime} returns {@link NANOS}\n     * {@link Era} returns {@link ERAS}\n     * {@link DayOfWeek} returns {@link DAYS}\n     * {@link Month} returns {@link MONTHS}\n     * {@link Year} returns {@link YEARS}\n     * {@link YearMonth} returns {@link MONTHS}\n     * {@link MonthDay} returns null (does not represent a complete date or time)\n     * {@link ZoneOffset} returns null (does not represent a date or time)\n     * {@link Instant} returns {@link NANOS}\n     *\n     * @return a query that can obtain the precision of a temporal, not null\n     */\n    static precision() {\n        return TemporalQueries.PRECISION;\n    }\n\n    /**\n     * A lenient query for the {@link ZoneId}, falling back to the {@link ZoneOffset}.\n     *\n     * This queries a {@link TemporalAccessor} for the zone.\n     * It first tries to obtain the zone, using {@link zoneId}.\n     * If that is not found it tries to obtain the {@link offset}.\n     *\n     * In most cases, applications should use this query rather than {@link zoneId}.\n     *\n     * This query examines the {@link ChronoField#OFFSET_SECONDS}\n     * field and uses it to create a {@link ZoneOffset}.\n     *\n     * The method {@link ZoneId#from} can be used as a\n     * {@link TemporalQuery} via a method reference, {@link ZoneId::from}.\n     * That method is equivalent to this query, except that it throws an\n     * exception if a zone cannot be obtained.\n     *\n     * @return a query that can obtain the zone ID or offset of a temporal, not null\n     */\n    static zone() {\n        return TemporalQueries.ZONE;\n    }\n\n    /**\n     * A query for {@link ZoneOffset} returning null if not found.\n     *\n     * This returns a {@link TemporalQuery} that can be used to query a temporal\n     * object for the offset. The query will return null if the temporal\n     * object cannot supply an offset.\n     *\n     * The query implementation examines the {@link ChronoField#OFFSET_SECONDS}\n     * field and uses it to create a {@link ZoneOffset}.\n     *\n     * The method {@link java.time.ZoneOffset#from} can be used as a\n     * {@link TemporalQuery} via a method reference, {@link ZoneOffset::from}.\n     * This query and {@link ZoneOffset::from} will return the same result if the\n     * temporal object contains an offset. If the temporal object does not contain\n     * an offset, then the method reference will throw an exception, whereas this\n     * query will return null.\n     *\n     * @return a query that can obtain the offset of a temporal, not null\n     */\n    static offset() {\n        return TemporalQueries.OFFSET;\n    }\n\n    /**\n     * A query for {@link LocalDate} returning null if not found.\n     *\n     * This returns a {@link TemporalQuery} that can be used to query a temporal\n     * object for the local date. The query will return null if the temporal\n     * object cannot supply a local date.\n     *\n     * The query implementation examines the {@link ChronoField#EPOCH_DAY}\n     * field and uses it to create a {@link LocalDate}.\n     *\n     * @return a query that can obtain the date of a temporal, not null\n     */\n    static localDate() {\n        return TemporalQueries.LOCAL_DATE;\n    }\n\n    /**\n     * A query for {@link LocalTime} returning null if not found.\n     *\n     * This returns a {@link TemporalQuery} that can be used to query a temporal\n     * object for the local time. The query will return null if the temporal\n     * object cannot supply a local time.\n     *\n     * The query implementation examines the {@link ChronoField#NANO_OF_DAY}\n     * field and uses it to create a {@link LocalTime}.\n     *\n     * @return a query that can obtain the time of a temporal, not null\n     */\n    static localTime() {\n        return TemporalQueries.LOCAL_TIME;\n    }\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { UnsupportedTemporalTypeException } from '../errors';\nimport { abstractMethodFail } from '../assert';\n\nimport { ChronoField } from './ChronoField';\nimport { TemporalQueries } from './TemporalQueries';\n\nexport class TemporalAccessor {\n    /**\n     * Queries this date-time.\n     *\n     * This queries this date-time using the specified query strategy object.\n     *\n     * Queries are a key tool for extracting information from date-times.\n     * They exists to externalize the process of querying, permitting different\n     * approaches, as per the strategy design pattern.\n     * Examples might be a query that checks if the date is the day before February 29th\n     * in a leap year, or calculates the number of days to your next birthday.\n     *\n     * The most common query implementations are method references, such as\n     * {@link LocalDate::from} and {@link ZoneId::from}.\n     * Further implementations are on {@link TemporalQueries}.\n     * Queries may also be defined by applications.\n     *\n     * @implSpec\n     * Implementations of this method must behave as follows:\n     * <pre>\n        if (query == TemporalQueries.zoneId()\n            || query == TemporalQueries.chronology()\n            || query == TemporalQueries.precision()) {\n                return null;\n        }\n        return query.queryFrom(this);\n     * </pre>\n     *\n     * @param {TemporalQuery} query  the query to invoke, not null\n     * @return the query result, null may be returned (defined by the query)\n     * @throws DateTimeException if unable to query\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    query(query) {\n        if (query === TemporalQueries.zoneId()\n                || query === TemporalQueries.chronology()\n                || query === TemporalQueries.precision()) {\n            return null;\n        }\n        return query.queryFrom(this);\n    }\n\n    /**\n     * Gets the value of the specified field as an `int`.\n     *\n     * This queries the date-time for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If the date-time cannot return the value, because the field is unsupported or for\n     * some other reason, an exception will be thrown.\n     *\n     * ### Specification for implementors\n     *\n     * Implementations must check and handle all fields defined in {@link ChronoField}.\n     * If the field is supported and has an `int` range, then the value of\n     * the field must be returned.\n     * If unsupported, then a {@link DateTimeException} must be thrown.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument.\n     *\n     * Implementations must not alter either this object.\n     *\n     * @param {TemporalField} field - the field to get, not null\n     * @return {number} the value for the field, within the valid range of values\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws DateTimeException if the range of valid values for the field exceeds an `int`\n     * @throws DateTimeException if the value is outside the range of valid values for the field\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    get(field) {\n        return this.range(field).checkValidIntValue(this.getLong(field), field);\n    }\n\n    // eslint-disable-next-line no-unused-vars\n    getLong(field) {\n        abstractMethodFail('getLong');\n    }\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * All fields can be expressed as a `long` integer.\n     * This method returns an object that describes the valid range for that value.\n     * The value of this temporal object is used to enhance the accuracy of the returned range.\n     * If the date-time cannot return the range, because the field is unsupported or for\n     * some other reason, an exception will be thrown.\n     *\n     * Note that the result only describes the minimum and maximum valid values\n     * and it is important not to read too much into them. For example, there\n     * could be values within the range that are invalid for the field.\n     *\n     * ### Specification for implementors\n     *\n     * Implementations must check and handle all fields defined in {@link ChronoField}.\n     * If the field is supported, then the range of the field must be returned.\n     * If unsupported, then a {@link DateTimeException} must be thrown.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n     * passing `this` as the argument.\n     *\n     * Implementations must not alter either this object.\n     *\n     * @param {TemporalField} field  the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws DateTimeException if the range for the field cannot be obtained\n     */\n    range(field) {\n        if (field instanceof ChronoField) {\n            if (this.isSupported(field)) {\n                return field.range();\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.rangeRefinedBy(this);\n    }\n\n    // eslint-disable-next-line no-unused-vars\n    isSupported(field) {\n        abstractMethodFail('isSupported');\n    }\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { abstractMethodFail } from '../assert';\nimport { Enum } from '../Enum';\n\n\n/**\n * Strategy for querying a temporal object.\n *\n * Queries are a key tool for extracting information from temporal objects.\n * They exist to externalize the process of querying, permitting different\n * approaches, as per the strategy design pattern.\n * Examples might be a query that checks if the date is the day before February 29th\n * in a leap year, or calculates the number of days to your next birthday.\n *\n * The {@link TemporalField} interface provides another mechanism for querying\n * temporal objects. That interface is limited to returning a `long`.\n * By contrast, queries can return any type.\n *\n * There are two equivalent ways of using a {@link TemporalQuery}.\n * The first is to invoke the method on this interface directly.\n * The second is to use {@link TemporalAccessor#query}:\n * <pre>\n *   // these two lines are equivalent, but the second approach is recommended\n *   temporal = thisQuery.queryFrom(temporal);\n *   temporal = temporal.query(thisQuery);\n * </pre>\n * It is recommended to use the second approach, {@link query},\n * as it is a lot clearer to read in code.\n *\n * The most common implementations are method references, such as\n * {@link LocalDate::from} and {@link ZoneId::from}.\n * Further implementations are on {@link TemporalQueries}.\n * Queries may also be defined by applications.\n *\n * ### Specification for implementors\n *\n * This interface places no restrictions on the mutability of implementations,\n * however immutability is strongly recommended.\n *\n * @interface\n */\nexport class TemporalQuery  extends Enum {\n    /**\n     * Queries the specified temporal object.\n     *\n     * This queries the specified temporal object to return an object using the logic\n     * encapsulated in the implementing class.\n     * Examples might be a query that checks if the date is the day before February 29th\n     * in a leap year, or calculates the number of days to your next birthday.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link TemporalAccessor#query}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisQuery.queryFrom(temporal);\n     *   temporal = temporal.query(thisQuery);\n     * </pre>\n     * It is recommended to use the second approach, {@link query},\n     * as it is a lot clearer to read in code.\n     *\n     * ### Specification for implementors\n     *\n     * The implementation must take the input object and query it.\n     * The implementation defines the logic of the query and is responsible for\n     * documenting that logic.\n     * It may use any method on {@link TemporalAccessor} to determine the result.\n     * The input object must not be altered.\n     *\n     * The input temporal object may be in a calendar system other than ISO.\n     * Implementations may choose to document compatibility with other calendar systems,\n     * or reject non-ISO temporal objects by querying the chronology (see {@link TemporalQueries#chronology}).\n     *\n     * This method may be called from multiple threads in parallel.\n     * It must be thread-safe when invoked.\n     *\n     * @param {TemporalAccessor} temporal  the temporal object to query, not null\n     * @return the queried value, may return null to indicate not found\n     * @throws DateTimeException if unable to query\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    // eslint-disable-next-line no-unused-vars\n    queryFrom(temporal){\n        abstractMethodFail('queryFrom');\n    }\n\n}\n\n/**\n * @private\n *\n * Factory to create something similar to the JSR-310 {TemporalQuery} interface, takes a function and returns a new TemporalQuery object that presents that function\n * as the queryFrom() function.\n * @param name for the underlying Enum\n * @param queryFromFunction\n */\nexport function createTemporalQuery(name, queryFromFunction) {\n    class ExtendedTemporalQuery extends TemporalQuery {\n\n    }\n\n    ExtendedTemporalQuery.prototype.queryFrom = queryFromFunction;\n    return new ExtendedTemporalQuery(name);\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { DateTimeException, UnsupportedTemporalTypeException, NullPointerException } from './errors';\nimport { MathUtil } from './MathUtil';\nimport { assert, requireNonNull, requireInstance } from './assert';\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { IllegalArgumentException } from './errors';\nimport { TemporalAccessor } from './temporal/TemporalAccessor';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { createTemporalQuery } from './temporal/TemporalQuery';\n\n/**\n * ### Static properties of Class {@link DayOfWeek}\n *\n * DayOfWeek.MONDAY,\n * DayOfWeek.TUESDAY,\n * DayOfWeek.WEDNESDAY,\n * DayOfWeek.THURSDAY,\n * DayOfWeek.FRIDAY,\n * DayOfWeek.SATURDAY,\n * DayOfWeek.SUNDAY\n *\n */\nexport class DayOfWeek extends TemporalAccessor {\n\n    /**\n     *\n     * @param {number} ordinal\n     * @param {string} name\n     * @private\n     */\n    constructor(ordinal, name){\n        super();\n        this._ordinal = ordinal;\n        this._name = name;\n    }\n\n    /**\n     *\n     * @returns {number}\n     */\n    ordinal(){\n        return this._ordinal;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    name(){\n        return this._name;\n    }\n\n    /**\n     *\n     * @returns {DayOfWeek[]}\n     */\n    static values() {\n        return ENUMS.slice();\n    }\n\n    /**\n     *\n     * @param {string} name\n     * @returns {DayOfWeek}\n     */\n    static valueOf(name) {\n        let ordinal = 0;\n        for(ordinal; ordinal < ENUMS.length; ordinal++){\n            if(ENUMS[ordinal].name() === name){\n                break;\n            }\n        }\n        return DayOfWeek.of(ordinal+1);\n    }\n\n    /**\n     * Obtains an instance of {@link DayOfWeek} from an `int` value.\n     *\n     * {@link DayOfWeek} is an enum representing the 7 days of the week.\n     * This factory allows the enum to be obtained from the `int` value.\n     * The `int` value follows the ISO-8601 standard, from 1 (Monday) to 7 (Sunday).\n     *\n     * @param {!number} dayOfWeek  the day-of-week to represent, from 1 (Monday) to 7 (Sunday)\n     * @return {DayOfWeek} the day-of-week singleton, not null\n     * @throws DateTimeException if the day-of-week is invalid\n     */\n    static of(dayOfWeek) {\n        if (dayOfWeek < 1 || dayOfWeek > 7) {\n            throw new DateTimeException(`Invalid value for DayOfWeek: ${dayOfWeek}`);\n        }\n        return ENUMS[dayOfWeek - 1];\n    }\n\n    /**\n     * Obtains an instance of {@link DayOfWeek} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link DayOfWeek}.\n     *\n     * The conversion extracts the {@link ChronoField#DAY_OF_WEEK} field.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used as a query via method reference, {@link DayOfWeek::from}.\n     *\n     * @param {TemporalAccessor} temporal - the temporal object to convert, not null\n     * @return {DayOfWeek} the day-of-week, not null\n     * @throws DateTimeException if unable to convert to a {@link DayOfWeek}\n     */\n    static from(temporal) {\n        assert(temporal != null, 'temporal', NullPointerException);\n        if (temporal instanceof DayOfWeek) {\n            return temporal;\n        }\n        try {\n            return DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));\n        } catch (ex) {\n            if(ex instanceof DateTimeException) {\n                throw new DateTimeException(`Unable to obtain DayOfWeek from TemporalAccessor: ${ \n                    temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`, ex);\n            } else {\n                throw ex;\n            }\n        }\n    }\n\n    /**\n     * Gets the day-of-week `int` value.\n     *\n     * The values are numbered following the ISO-8601 standard, from 1 (Monday) to 7 (Sunday).\n     * See {@link WeekFields#dayOfWeek} for localized week-numbering.\n     *\n     * @return {number} the day-of-week, from 1 (Monday) to 7 (Sunday)\n     */\n    value() {\n        return this._ordinal + 1;\n    }\n\n    /**\n     * Gets the textual representation, such as 'Mon' or 'Friday'.\n     *\n     * This returns the textual name used to identify the day-of-week.\n     * The parameters control the length of the returned text and the locale.\n     *\n     * If no textual mapping is found then the numeric value (see {@link getValue}) is returned.\n     *\n     * @param {TextStyle} style - the length of the text required, not null\n     * @param {Locale} locale - the locale to use, not null\n     * @return {string} the text value of the day-of-week, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    displayName(style, locale) {\n        throw new IllegalArgumentException('Pattern using (localized) text not implemented yet!');\n        // return new DateTimeFormatterBuilder().appendText(ChronoField.DAY_OF_WEEK, style).toFormatter(locale).format(this);\n    }\n\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this day-of-week can be queried for the specified field.\n     * If false, then calling the {@link range} and\n     * {@link get} methods will throw an exception.\n     *\n     * If the field is {@link ChronoField#DAY_OF_WEEK} then\n     * this method returns true.\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking `TemporalField.isSupportedBy(TemporalAccessor)`\n     * passing `this` as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {TemporalField} field - the field to check, null returns false\n     * @return {boolean} true if the field is supported on this day-of-week, false if not\n     */\n    isSupported(field) {\n        if (field instanceof ChronoField) {\n            return field === ChronoField.DAY_OF_WEEK;\n        }\n        return field != null && field.isSupportedBy(this);\n    }\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * The range object expresses the minimum and maximum valid values for a field.\n     * This day-of-week is used to enhance the accuracy of the returned range.\n     * If it is not possible to return the range, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is {@link ChronoField#DAY_OF_WEEK} then the\n     * range of the day-of-week, from 1 to 7, will be returned.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking `TemporalField.rangeRefinedBy(TemporalAccessor)`\n     * passing `this` as the argument.\n     * Whether the range can be obtained is determined by the field.\n     *\n     * @param {TemporalField} field - the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws DateTimeException if the range for the field cannot be obtained\n     */\n    range(field) {\n        if (field === ChronoField.DAY_OF_WEEK) {\n            return field.range();\n        } else if (field instanceof ChronoField) {\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.rangeRefinedBy(this);\n    }\n\n    /**\n     * Gets the value of the specified field from this day-of-week as an `int`.\n     *\n     * This queries this day-of-week for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is {@link ChronoField#DAY_OF_WEEK} then the\n     * value of the day-of-week, from 1 to 7, will be returned.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field - the field to get, not null\n     * @return {number} the value for the field, within the valid range of values\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws DateTimeException if the range of valid values for the field exceeds an `int`\n     * @throws DateTimeException if the value is outside the range of valid values for the field\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    get(field) {\n        if (field === ChronoField.DAY_OF_WEEK) {\n            return this.value();\n        }\n        return this.range(field).checkValidIntValue(this.getLong(field), field);\n    }\n\n    /**\n     * Gets the value of the specified field from this day-of-week as a `long`.\n     *\n     * This queries this day-of-week for the value for the specified field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is {@link ChronoField#DAY_OF_WEEK} then the\n     * value of the day-of-week, from 1 to 7, will be returned.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    getLong(field) {\n        if (field === ChronoField.DAY_OF_WEEK) {\n            return this.value();\n        } else if (field instanceof ChronoField) {\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.getFrom(this);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns the day-of-week that is the specified number of days after this one.\n     *\n     * The calculation rolls around the end of the week from Sunday to Monday.\n     * The specified period may be negative.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} days - the days to add, positive or negative\n     * @return {DayOfWeek} the resulting day-of-week, not null\n     */\n    plus(days) {\n        const amount = MathUtil.floorMod(days, 7);\n        return ENUMS[MathUtil.floorMod(this._ordinal + (amount + 7), 7)];\n    }\n\n    /**\n     * Returns the day-of-week that is the specified number of days before this one.\n     *\n     * The calculation rolls around the start of the year from Monday to Sunday.\n     * The specified period may be negative.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} days - the days to subtract, positive or negative\n     * @return {DayOfWeek} the resulting day-of-week, not null\n     */\n    minus(days) {\n        return this.plus(-1 * MathUtil.floorMod(days, 7));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Queries this day-of-week using the specified query.\n     *\n     * This queries this day-of-week using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing `this` as the argument.\n     *\n     * @param {TemporalQuery} query  the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws DateTimeException if unable to query (defined by the query)\n     * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        if (query === TemporalQueries.precision()) {\n            return ChronoUnit.DAYS;\n        } else if (query === TemporalQueries.localDate() || query === TemporalQueries.localTime() || query === TemporalQueries.chronology() ||\n                query === TemporalQueries.zone() || query === TemporalQueries.zoneId() || query === TemporalQueries.offset()) {\n            return null;\n        }\n        assert(query != null, 'query', NullPointerException);\n        return query.queryFrom(this);\n    }\n\n    /**\n     * Adjusts the specified temporal object to have this day-of-week.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with the day-of-week changed to be the same as this.\n     *\n     * The adjustment is equivalent to using {@link Temporal#with}\n     * passing {@link ChronoField#DAY_OF_WEEK} as the field.\n     * Note that this adjusts forwards or backwards within a Monday to Sunday week.\n     * See {@link WeekFields#dayOfWeek} for localized week start days.\n     * See {@link TemporalAdjusters} for other adjusters\n     * with more control, such as `next(MONDAY)`.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisDayOfWeek.adjustInto(temporal);\n     *   temporal = temporal.with(thisDayOfWeek);\n     * </pre>\n     *\n     * For example, given a date that is a Wednesday, the following are output:\n     * <pre>\n     *   dateOnWed.with(MONDAY);     // two days earlier\n     *   dateOnWed.with(TUESDAY);    // one day earlier\n     *   dateOnWed.with(WEDNESDAY);  // same date\n     *   dateOnWed.with(THURSDAY);   // one day later\n     *   dateOnWed.with(FRIDAY);     // two days later\n     *   dateOnWed.with(SATURDAY);   // three days later\n     *   dateOnWed.with(SUNDAY);     // four days later\n     * </pre>\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalAdjusters} temporal  the target object to be adjusted, not null\n     * @return {Temporal} the adjusted object, not null\n     * @throws DateTimeException if unable to make the adjustment\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        requireNonNull(temporal, 'temporal');\n        return temporal.with(ChronoField.DAY_OF_WEEK, this.value());\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    equals(other){ \n        return this === other;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString(){\n        return this._name;\n    }\n\n    /**\n     * Compares this DayOfWeek to another DayOfWeek.\n     *\n     * The comparison is based on the value of the DayOfWeek.\n     * It is \"consistent with equals\", as defined by {@link Comparable}.\n     *\n     * @param {DayOfWeek} other  the other year to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     */    \n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, DayOfWeek, 'other');\n        return this._ordinal - other._ordinal;\n    }\n\n    /**\n     * toJSON() use by JSON.stringify\n     * delegates to toString()\n     *\n     * @return {string}\n     */\n    toJSON() {\n        return this.toString();\n    }\n}\n\nlet ENUMS;\n\nexport function _init() {\n    DayOfWeek.MONDAY = new DayOfWeek(0, 'MONDAY');\n    DayOfWeek.TUESDAY = new DayOfWeek(1, 'TUESDAY');\n    DayOfWeek.WEDNESDAY = new DayOfWeek(2, 'WEDNESDAY');\n    DayOfWeek.THURSDAY = new DayOfWeek(3, 'THURSDAY');\n    DayOfWeek.FRIDAY = new DayOfWeek(4, 'FRIDAY');\n    DayOfWeek.SATURDAY = new DayOfWeek(5, 'SATURDAY');\n    DayOfWeek.SUNDAY = new DayOfWeek(6, 'SUNDAY');\n\n    DayOfWeek.FROM = createTemporalQuery('DayOfWeek.FROM', (temporal) => {\n        return DayOfWeek.from(temporal);\n    });\n\n    ENUMS = [\n        DayOfWeek.MONDAY,\n        DayOfWeek.TUESDAY,\n        DayOfWeek.WEDNESDAY,\n        DayOfWeek.THURSDAY,\n        DayOfWeek.FRIDAY,\n        DayOfWeek.SATURDAY,\n        DayOfWeek.SUNDAY\n    ];\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert, requireNonNull, requireInstance } from './assert';\nimport { MathUtil } from './MathUtil';\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { DateTimeException, IllegalArgumentException, UnsupportedTemporalTypeException } from './errors';\nimport { IsoChronology } from './chrono/IsoChronology';\nimport { TemporalAccessor } from './temporal/TemporalAccessor';\nimport { TemporalQueries } from './temporal/TemporalQueries';\n\n/**\n * A month-of-year, such as 'July'.\n *\n * {@link Month} is representing the 12 months of the year -\n * January, February, March, April, May, June, July, August, September, October,\n * November and December.\n *\n * In addition to the textual name, each month-of-year has an `int` value.\n * The `int` value follows normal usage and the ISO-8601 standard,\n * from 1 (January) to 12 (December). It is recommended that applications use the static values defined by this class\n * rather than the `int` value to ensure code clarity.\n *\n * This class represents a common concept that is found in many calendar systems.\n * As such, this class may be used by any calendar system that has the month-of-year\n * concept defined exactly equivalent to the ISO-8601 calendar system.\n *\n * ### Static properties of Class {@link Month}\n *\n * Month.JANUARY, Month.FEBRUARY, Month.MARCH, Month.APRIL, Month.MAY, Month.JUNE,\n * Month.JULY, Month.AUGUST, Month.SEPTEMBER, Month.OCTOBER, Month.NOVEMBER, Month.DECEMBER\n *\n */\nexport class Month extends TemporalAccessor {\n\n    /**\n     *\n     * @param {number} ordinal\n     * @param {string} name\n     * @private\n     */\n    constructor(value, name){\n        super();\n        this._value = MathUtil.safeToInt(value);\n        this._name = name;\n    }    \n\n    /**\n     *\n     * @return {number} gets the value\n     */\n    value() {\n        return this._value;\n    }\n    \n    /**\n     *\n     * @returns {number}\n     */\n    ordinal(){\n        return this._value - 1;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    name(){\n        return this._name;\n    }  \n\n    /**\n     * Gets the textual representation, such as 'Jan' or 'December'.\n     *\n     * This returns the textual name used to identify the month-of-year.\n     * The parameters control the length of the returned text and the locale.\n     *\n     * If no textual mapping is found then the numeric value (see {@link getValue}) is returned.\n     *\n     * @param {TextStyle} style - the length of the text required, not null\n     * @param {Locale} locale - the locale to use, not null\n     * @return {string} the text value of the day-of-week, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    displayName(style, locale) {\n        // TODO:\n        throw new IllegalArgumentException('Pattern using (localized) text not implemented yet!');\n    }\n\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this month-of-year can be queried for the specified field.\n     * If false, then calling the range (see {@link range}) and\n     * get (see {@link get}) methods will throw an exception.\n     *\n     * If the field is MONTH_OF_YEAR (see {@link ChronoField#MONTH_OF_YEAR}) then\n     * this method returns true.\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.isSupportedBy}\n     * passing `this` as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {TemporalField} field - the field to check, null returns false\n     * @return {boolean} true if the field is supported on this month-of-year, false if not\n     */\n    isSupported(field) {\n        if (null === field) {\n            return false;\n        }\n        if (field instanceof ChronoField) {\n            return field === ChronoField.MONTH_OF_YEAR;\n        }\n        return field != null && field.isSupportedBy(this);\n    }\n\n    /**\n     * Gets the value of the specified field from this month-of-year as an `int`.\n     *\n     * This queries this month for the value of the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is MONTH_OF_YEAR (see {@link ChronoField#MONTH_OF_YEAR}) then the\n     * value of the month-of-year, from 1 to 12, will be returned.\n     * All other {@link ChronoField} instances will throw an {@link UnsupportedTemporalTypeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field - the field to get, not null\n     * @return {Number} the value for the field, within the valid range of values\n     * @throws DateTimeException if a value for the field cannot be obtained or\n     *         the value is outside the range of valid values for the field\n     * @throws UnsupportedTemporalTypeException if the field is not supported or\n     *         the range of values exceeds an `int`\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    get(field) {\n        if (field === ChronoField.MONTH_OF_YEAR) {\n            return this.value();\n        }\n        return this.range(field).checkValidIntValue(this.getLong(field), field);\n    }\n\n    /**\n     * Gets the value of the specified field from this month-of-year as a `long`.\n     *\n     * This queries this month for the value of the specified field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is MONTH_OF_YEAR (see {@link ChronoField#MONTH_OF_YEAR}) then the\n     * value of the month-of-year, from 1 to 12, will be returned.\n     * All other {@link ChronoField} instances will throw an {@link UnsupportedTemporalTypeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field - the field to get, not null\n     * @return {Number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws UnsupportedTemporalTypeException if the field is not supported\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    getLong(field) {\n        if (field === ChronoField.MONTH_OF_YEAR) {\n            return this.value();\n        } else if (field instanceof ChronoField) {\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.getFrom(this);\n    }\n\n    /**\n     * Returns the month-of-year that is the specified number of months after this one.\n     *\n     * The calculation rolls around the end of the year from December to January.\n     * The specified period may be negative.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} months - the months to add, positive or negative\n     * @return {Month} the resulting month, not null\n     */\n    plus(months) {\n        const amount = MathUtil.intMod(months, 12) + 12; // + 12 to make sure negative arguments are positive, the total is \"corrected\" by the next % 12\n        let newMonthVal = MathUtil.intMod((this.value() + amount), 12);\n        /* December is 12, not 0, but 12 % 12 = 0 */\n        newMonthVal = newMonthVal === 0 ? 12 : newMonthVal;\n        return Month.of(newMonthVal);\n    }\n\n    /**\n     * Returns the month-of-year that is the specified number of months before this one.\n     *\n     * The calculation rolls around the start of the year from January to December.\n     * The specified period may be negative.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} months - the months to subtract, positive or negative\n     * @return {Month} the resulting month, not null\n     */\n    minus(months) {\n        return this.plus(-1 * MathUtil.intMod(months, 12));\n    }\n\n    /**\n     * Gets the length of this month in days.\n     *\n     * This takes a flag to determine whether to return the length for a leap year or not.\n     *\n     * February has 28 days in a standard year and 29 days in a leap year.\n     * April, June, September and November have 30 days.\n     * All other months have 31 days.\n     *\n     * @param {boolean} leapYear - true if the length is required for a leap year\n     * @return {number} the length of this month in days, from 28 to 31\n     */\n    length(leapYear) {\n        switch (this) {\n            case Month.FEBRUARY:\n                return (leapYear ? 29 : 28);\n            case Month.APRIL:\n            case Month.JUNE:\n            case Month.SEPTEMBER:\n            case Month.NOVEMBER:\n                return 30;\n            default:\n                return 31;\n        }\n    }\n\n    /**\n     * Gets the minimum length of this month in days.\n     *\n     * February has a minimum length of 28 days.\n     * April, June, September and November have 30 days.\n     * All other months have 31 days.\n     *\n     * @return {number} the minimum length of this month in days, from 28 to 31\n     */\n    minLength() {\n        switch (this) {\n            case Month.FEBRUARY:\n                return 28;\n            case Month.APRIL:\n            case Month.JUNE:\n            case Month.SEPTEMBER:\n            case Month.NOVEMBER:\n                return 30;\n            default:\n                return 31;\n        }\n    }\n\n    /**\n     * Gets the maximum length of this month in days.\n     *\n     * February has a maximum length of 29 days.\n     * April, June, September and November have 30 days.\n     * All other months have 31 days.\n     *\n     * @return {number} the maximum length of this month in days, from 29 to 31\n     */\n    maxLength() {\n        switch (this) {\n            case Month.FEBRUARY:\n                return 29;\n            case Month.APRIL:\n            case Month.JUNE:\n            case Month.SEPTEMBER:\n            case Month.NOVEMBER:\n                return 30;\n            default:\n                return 31;\n        }\n    }\n\n    /**\n     * Gets the day-of-year corresponding to the first day of this month.\n     *\n     * This returns the day-of-year that this month begins on, using the leap\n     * year flag to determine the length of February.\n     *\n     * @param {boolean} leapYear - true if the length is required for a leap year\n     * @return {number} the day of year corresponding to the first day of this month, from 1 to 336\n     */\n    firstDayOfYear(leapYear) {\n        const leap = leapYear ? 1 : 0;\n        switch (this) {\n            case Month.JANUARY:\n                return 1;\n            case Month.FEBRUARY:\n                return 32;\n            case Month.MARCH:\n                return 60 + leap;\n            case Month.APRIL:\n                return 91 + leap;\n            case Month.MAY:\n                return 121 + leap;\n            case Month.JUNE:\n                return 152 + leap;\n            case Month.JULY:\n                return 182 + leap;\n            case Month.AUGUST:\n                return 213 + leap;\n            case Month.SEPTEMBER:\n                return 244 + leap;\n            case Month.OCTOBER:\n                return 274 + leap;\n            case Month.NOVEMBER:\n                return 305 + leap;\n            case Month.DECEMBER:\n            default:\n                return 335 + leap;\n        }\n    }\n\n    /**\n     * Gets the month corresponding to the first month of this quarter.\n     *\n     * The year can be divided into four quarters.\n     * This method returns the first month of the quarter for the base month.\n     * January, February and March return January.\n     * April, May and June return April.\n     * July, August and September return July.\n     * October, November and December return October.\n     *\n     * @return {Month} the first month of the quarter corresponding to this month, not null\n     */\n    firstMonthOfQuarter() {\n        switch (this) {\n            case Month.JANUARY:\n            case Month.FEBRUARY:\n            case Month.MARCH:\n                return Month.JANUARY;\n            case Month.APRIL:\n            case Month.MAY:\n            case Month.JUNE:\n                return Month.APRIL;\n            case Month.JULY:\n            case Month.AUGUST:\n            case Month.SEPTEMBER:\n                return Month.JULY;\n            case Month.OCTOBER:\n            case Month.NOVEMBER:\n            case Month.DECEMBER:\n            default:\n                return Month.OCTOBER;\n        }\n    }\n\n    /**\n     * Queries this month-of-year using the specified query.\n     *\n     * This queries this month-of-year using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing `this` as the argument.\n     *\n     * @param {TemporalQuery} query - the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws DateTimeException if unable to query (defined by the query)\n     * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        assert(query != null, 'query() parameter must not be null', DateTimeException);\n        if (query === TemporalQueries.chronology()) {\n            return IsoChronology.INSTANCE;\n        } else if (query === TemporalQueries.precision()) {\n            return ChronoUnit.MONTHS;\n        }\n        return super.query(query);\n    }\n\n\n\n    /**\n     * toString implementation... in JDK this is inherited from the Enum class\n     *\n     * @return {String}\n     */\n    toString() {\n        switch (this) {\n            case Month.JANUARY:\n                return 'JANUARY';\n            case Month.FEBRUARY:\n                return 'FEBRUARY';\n            case Month.MARCH:\n                return 'MARCH';\n            case Month.APRIL:\n                return 'APRIL';\n            case Month.MAY:\n                return 'MAY';\n            case Month.JUNE:\n                return 'JUNE';\n            case Month.JULY:\n                return 'JULY';\n            case Month.AUGUST:\n                return 'AUGUST';\n            case Month.SEPTEMBER:\n                return 'SEPTEMBER';\n            case Month.OCTOBER:\n                return 'OCTOBER';\n            case Month.NOVEMBER:\n                return 'NOVEMBER';\n            case Month.DECEMBER:\n                return 'DECEMBER';\n            default:\n                return `unknown Month, value: ${this.value()}`;\n        }\n    }\n\n    /**\n     * toJSON() use by JSON.stringify\n     * delegates to toString()\n     *\n     * @return {string}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n    /**\n     * Adjusts the specified temporal object to have this month-of-year.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with the month-of-year changed to be the same as this.\n     *\n     * The adjustment is equivalent to using {@link Temporal#with}\n     * passing {@link ChronoField#MONTH_OF_YEAR} as the field.\n     * If the specified temporal object does not use the ISO calendar system then\n     * a {@link DateTimeException} is thrown.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisMonth.adjustInto(temporal);\n     *   temporal = temporal.with(thisMonth);\n     * </pre>\n     *\n     * For example, given a date in May, the following are output:\n     * <pre>\n     *   dateInMay.with(JANUARY);    // four months earlier\n     *   dateInMay.with(APRIL);      // one months earlier\n     *   dateInMay.with(MAY);        // same date\n     *   dateInMay.with(JUNE);       // one month later\n     *   dateInMay.with(DECEMBER);   // seven months later\n     * </pre>\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} temporal - the target object to be adjusted, not null\n     * @return {Temporal} the adjusted object, not null\n     * @throws DateTimeException if unable to make the adjustment\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        /* we support only ISO for now\n            if (Chronology.from(temporal).equals(IsoChronology.INSTANCE) === false) {\n                throw new DateTimeException('Adjustment only supported on ISO date-time');\n            }\n        */\n        return temporal.with(ChronoField.MONTH_OF_YEAR, this.value());\n    }\n    \n    /**\n     * Compares this Month to another Month.\n     *\n     * The comparison is based on the value of the Month.\n     * It is \"consistent with equals\", as defined by {@link Comparable}.\n     *\n     * @param {Month} other  the other year to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     */    \n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, Month, 'other');\n        return this._value - other._value;\n    }    \n    \n    /**\n     *\n     * @returns {boolean}\n     */\n    equals(other){    \n        return this === other;\n    }\n\n    /**\n     *\n     * @param {string} name\n     * @returns {Month}\n     */\n    static valueOf(name) {\n        let ordinal = 0;\n        for(ordinal; ordinal < MONTHS.length; ordinal++){\n            if(MONTHS[ordinal].name() === name){\n                break;\n            }\n        }\n        return Month.of(ordinal+1);\n    }\n    \n\n    /**\n     * replacement for enum values\n     * @return {Month[]}\n     */\n    static values(){\n        return MONTHS.slice();\n    }\n\n    /**\n     *\n     * @param {number} month\n     * @return {Month} not null\n     **/\n    static of(month) {\n        if (month < 1 || month > 12) {\n            assert(false, `Invalid value for MonthOfYear: ${month}`, DateTimeException);\n        }\n        return MONTHS[month-1];\n    }\n\n    /**\n     * Obtains an instance of {@link Month} from a temporal object.\n     *\n     * This obtains a month based on the specified temporal.\n     * A {@link TemporalAccessor} represents an arbitrary set of date and time information,\n     * which this factory converts to an instance of {@link Month}.\n     *\n     * The conversion extracts the MONTH_OF_YEAR (see {@link ChronoField#MONTH_OF_YEAR}) field.\n     * The extraction is only permitted if the temporal object has an ISO\n     * chronology, or can be converted to a {@link LocalDate}.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used in queries via method reference, {@link Month::from}.\n     *\n     * @param {TemporalAccessor} temporal  the temporal object to convert, not null\n     * @return {Month} the month-of-year, not null\n     * @throws DateTimeException if unable to convert to a {@link Month}\n     */\n    static from(temporal) {\n        if (temporal instanceof Month) {\n            return temporal;\n        }\n        try {\n            /* only ISO for now\n            if (IsoChronology.INSTANCE.equals(Chronology.from(temporal)) == false) {\n                temporal = LocalDate.from(temporal);\n            }*/\n            return Month.of(temporal.get(ChronoField.MONTH_OF_YEAR));\n        } catch (ex) {\n            throw new DateTimeException(`Unable to obtain Month from TemporalAccessor: ${ \n                temporal} of type ${temporal && temporal.constructor != null ? temporal.constructor.name : ''}`, ex);\n        }\n    }\n}\n\nlet MONTHS;\n\nexport function _init() {\n    Month.JANUARY = new Month(1, 'JANUARY');\n    Month.FEBRUARY = new Month(2, 'FEBRUARY');\n    Month.MARCH = new Month(3, 'MARCH');\n    Month.APRIL = new Month(4, 'APRIL');\n    Month.MAY = new Month(5, 'MAY');\n    Month.JUNE = new Month(6, 'JUNE');\n    Month.JULY = new Month(7, 'JULY');\n    Month.AUGUST = new Month(8, 'AUGUST');\n    Month.SEPTEMBER = new Month(9, 'SEPTEMBER');\n    Month.OCTOBER = new Month(10, 'OCTOBER');\n    Month.NOVEMBER = new Month(11, 'NOVEMBER');\n    Month.DECEMBER = new Month(12, 'DECEMBER');\n\n    MONTHS = [\n        Month.JANUARY, Month.FEBRUARY, Month.MARCH, Month.APRIL, Month.MAY, Month.JUNE,\n        Month.JULY, Month.AUGUST, Month.SEPTEMBER, Month.OCTOBER, Month.NOVEMBER, Month.DECEMBER\n    ];\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { MathUtil } from './MathUtil';\nimport { requireNonNull, requireInstance } from './assert';\nimport { DateTimeException, UnsupportedTemporalTypeException, ArithmeticException, DateTimeParseException } from './errors';\n\nimport { IsoChronology } from './chrono/IsoChronology';\n\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { TemporalAmount } from './temporal/TemporalAmount';\n\nimport { LocalDate } from './LocalDate';\n\n/**\n * The pattern for parsing.\n */\nconst PATTERN = /([-+]?)P(?:([-+]?[0-9]+)Y)?(?:([-+]?[0-9]+)M)?(?:([-+]?[0-9]+)W)?(?:([-+]?[0-9]+)D)?/;\n\n/**\n * A date-based amount of time, such as '2 years, 3 months and 4 days'.\n *\n * This class models a quantity or amount of time in terms of years, months and days.\n * See {@link Duration} for the time-based equivalent to this class.\n *\n * Durations and period differ in their treatment of daylight savings time\n * when added to {@link ZonedDateTime}. A {@link Duration} will add an exact\n * number of seconds, thus a duration of one day is always exactly 24 hours.\n * By contrast, a {@link Period} will add a conceptual day, trying to maintain\n * the local time.\n *\n * For example, consider adding a period of one day and a duration of one day to\n * 18:00 on the evening before a daylight savings gap. The {@link Period} will add\n * the conceptual day and result in a {@link ZonedDateTime} at 18:00 the following day.\n * By contrast, the {@link Duration} will add exactly 24 hours, resulting in a\n * {@link ZonedDateTime} at 19:00 the following day (assuming a one hour DST gap).\n *\n * The supported units of a period are {@link ChronoUnit#YEARS},\n * {@link ChronoUnit#MONTHS} and {@link ChronoUnit#DAYS}.\n * All three fields are always present, but may be set to zero.\n *\n * The period may be used with any calendar system.\n * The meaning of a 'year' or 'month' is only applied when the object is added to a date.\n *\n * The period is modeled as a directed amount of time, meaning that individual parts of the\n * period may be negative.\n *\n * The months and years fields may be normalized (see {@link normalized}).\n * The normalization assumes a 12 month year, so is not appropriate for all calendar systems.\n *\n * ### Static properties of Class {@link Period}\n *\n * Period.ZERO\n *\n * A constant for a period of zero.\n *\n */\nexport class Period extends TemporalAmount /* extends ChronoPeriod */ {\n\n    /**\n     * do not call the constructor directly\n     * use a factory method instead\n     *\n     * @param {number} years\n     * @param {number} months\n     * @param {number} days\n     * @private\n     */\n    constructor(years, months, days){\n        super();\n        \n        const _years = MathUtil.safeToInt(years);\n        const _months =  MathUtil.safeToInt(months);\n        const _days = MathUtil.safeToInt(days);\n\n        if( _years === 0 && _months === 0 && _days === 0 ){\n            if (!Period.ZERO) {\n                this._years = _years;\n                this._months =  _months;\n                this._days = _days;\n                Period.ZERO = this;\n            }\n            return Period.ZERO;\n        }\n        \n        /**\n         * The number of years.\n         */\n        this._years = _years;\n        /**\n         * The number of months.\n         */\n        this._months =  _months;\n        /**\n         * The number of days.\n         */\n        this._days = _days;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains a {@link Period} representing a number of years.\n     *\n     * The resulting period will have the specified years.\n     * The months and days units will be zero.\n     *\n     * @param {number} years - the number of years, positive or negative\n     * @return {Period} the period of years, not null\n     */\n    static ofYears(years) {\n        return Period.create(years, 0, 0);\n    }\n\n    /**\n     * Obtains a {@link Period} representing a number of months.\n     *\n     * The resulting period will have the specified months.\n     * The years and days units will be zero.\n     *\n     * @param {number} months - the number of months, positive or negative\n     * @return {Period} the period of months, not null\n     */\n    static ofMonths(months) {\n        return Period.create(0, months, 0);\n    }\n\n    /**\n     * Obtains a {@link Period} representing a number of weeks.\n     *\n     * The resulting period will have days equal to the weeks multiplied by seven.\n     * The years and months units will be zero.\n     *\n     * @param {number} weeks - the number of weeks, positive or negative\n     * @return {Period} the period of days, not null\n     */\n    static ofWeeks(weeks) {\n        return Period.create(0, 0, MathUtil.safeMultiply(weeks, 7));\n    }\n\n    /**\n     * Obtains a {@link Period} representing a number of days.\n     *\n     * The resulting period will have the specified days.\n     * The years and months units will be zero.\n     *\n     * @param {number} days - the number of days, positive or negative\n     * @return {Period} the period of days, not null\n     */\n    static ofDays(days) {\n        return Period.create(0, 0, days);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains a {@link Period} representing a number of years, months and days.\n     *\n     * This creates an instance based on years, months and days.\n     *\n     * @param {!number} years - the amount of years, may be negative\n     * @param {!number} months - the amount of months, may be negative\n     * @param {!number} days - the amount of days, may be negative\n     * @return {Period} the period of years, months and days, not null\n     */\n    static of(years, months, days) {\n        return Period.create(years, months, days);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link Period} from a temporal amount.\n     *\n     * This obtains a period based on the specified amount.\n     * A {@link TemporalAmount} represents an - amount of time, which may be\n     * date-based or time-based, which this factory extracts to a {@link Period}.\n     *\n     * The conversion loops around the set of units from the amount and uses\n     * the {@link ChronoUnit#YEARS}, {@link ChronoUnit#MONTHS}\n     * and {@link ChronoUnit#DAYS} units to create a period.\n     * If any other units are found then an exception is thrown.\n     *\n     * If the amount is a {@link ChronoPeriod} then it must use the ISO chronology.\n     *\n     * @param {TemporalAmount} amount - the temporal amount to convert, not null\n     * @return {Period} the equivalent period, not null\n     * @throws DateTimeException if unable to convert to a {@link Period}\n     * @throws ArithmeticException if the amount of years, months or days exceeds an int\n     */\n    static from(amount) {\n        if (amount instanceof Period) {\n            return amount;\n        }\n        /*\n        if (amount instanceof ChronoPeriod) {\n            if (IsoChronology.INSTANCE !== amount.chronology()) {\n                throw new DateTimeException('Period requires ISO chronology: ' + amount);\n            }\n        }\n*/\n        requireNonNull(amount, 'amount');\n        let years = 0;\n        let months = 0;\n        let days = 0;\n        const units = amount.units();\n        for (let i=0; i<units.length; i++) {\n            const unit = units[i];\n            const unitAmount = amount.get(unit);\n            if (unit === ChronoUnit.YEARS) {\n                years = MathUtil.safeToInt(unitAmount);\n            } else if (unit === ChronoUnit.MONTHS) {\n                months = MathUtil.safeToInt(unitAmount);\n            } else if (unit === ChronoUnit.DAYS) {\n                days = MathUtil.safeToInt(unitAmount);\n            } else {\n                throw new DateTimeException(`Unit must be Years, Months or Days, but was ${unit}`);\n            }\n        }\n        return Period.create(years, months, days);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains a {@link Period} consisting of the number of years, months,\n     * and days between two dates.\n     *\n     * The start date is included, but the end date is not.\n     * The period is calculated by removing complete months, then calculating\n     * the remaining number of days, adjusting to ensure that both have the same sign.\n     * The number of months is then split into years and months based on a 12 month year.\n     * A month is considered if the end day-of-month is greater than or equal to the start day-of-month.\n     * For example, from `2010-01-15` to `2011-03-18` is one year, two months and three days.\n     *\n     * The result of this method can be a negative period if the end is before the start.\n     * The negative sign will be the same in each of year, month and day.\n\n     * see {@link ChronoLocalDate.until}\n     *\n     * @param {LocalDate} startDate - the start date, inclusive, not null\n     * @param {LocalDate} endDate - the end date, exclusive, not null\n     * @return {Period} the period between this date and the end date, not null\n     */\n    static between(startDate, endDate) {\n        requireNonNull(startDate, 'startDate');\n        requireNonNull(endDate, 'endDate');\n        requireInstance(startDate, LocalDate, 'startDate');\n        requireInstance(endDate, LocalDate, 'endDate');\n        return startDate.until(endDate);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains a {@link Period} from a text string such as {@link PnYnMnD}.\n     *\n     * This will parse the string produced by {@link toString} which is\n     * based on the ISO-8601 period formats {@link PnYnMnD} and {@link PnW}.\n     *\n     * The string starts with an optional sign, denoted by the ASCII negative\n     * or positive symbol. If negative, the whole period is negated.\n     * The ASCII letter 'P' is next in upper or lower case.\n     * There are then four sections, each consisting of a number and a suffix.\n     * At least one of the four sections must be present.\n     * The sections have suffixes in ASCII of 'Y', 'M', 'W' and 'D' for\n     * years, months, weeks and days, accepted in upper or lower case.\n     * The suffixes must occur in order.\n     * The number part of each section must consist of ASCII digits.\n     * The number may be prefixed by the ASCII negative or positive symbol.\n     * The number must parse to an `int`.\n     *\n     * The leading plus/minus sign, and negative values for other units are\n     * not part of the ISO-8601 standard. In addition, ISO-8601 does not\n     * permit mixing between the {@link PnYnMnD} and {@link PnW} formats.\n     * Any week-based input is multiplied by 7 and treated as a number of days.\n     *\n     * For example, the following are valid inputs:\n     * <pre>\n     *   'P2Y'             -- Period.ofYears(2)\n     *   'P3M'             -- Period.ofMonths(3)\n     *   'P4W'             -- Period.ofWeeks(4)\n     *   'P5D'             -- Period.ofDays(5)\n     *   'P1Y2M3D'         -- Period.of(1, 2, 3)\n     *   'P1Y2M3W4D'       -- Period.of(1, 2, 25)\n     *   'P-1Y2M'          -- Period.of(-1, 2, 0)\n     *   '-P1Y2M'          -- Period.of(-1, -2, 0)\n     * </pre>\n     *\n     * @param {string} text - the text to parse, not null\n     * @return {Period} the parsed period, not null\n     * @throws DateTimeParseException if the text cannot be parsed to a period\n     */\n    static parse(text) {\n        requireNonNull(text, 'text');\n        try {\n            return Period._parse(text);\n        } catch (ex){\n            if(ex instanceof ArithmeticException){\n                throw new DateTimeParseException('Text cannot be parsed to a Period', text, 0, ex);\n            } else {\n                throw ex;\n            }\n        }\n    }\n\n    /**\n     * because functions that containing a try/ catch block cant be optimized,\n     * we put the code in a sub function.\n     */\n    static _parse(text){\n        const matches = PATTERN.exec(text);\n        if (matches != null) {\n            const negate = '-' === matches[1] ? -1 : 1;\n            const yearMatch = matches[2];\n            const monthMatch = matches[3];\n            const weekMatch = matches[4];\n            const dayMatch = matches[5];\n            if (yearMatch != null || monthMatch != null || weekMatch != null || dayMatch != null) {\n                const years = Period._parseNumber(text, yearMatch, negate);\n                const months = Period._parseNumber(text, monthMatch, negate);\n                const weeks = Period._parseNumber(text, weekMatch, negate);\n                let days = Period._parseNumber(text, dayMatch, negate);\n                days = MathUtil.safeAdd(days, MathUtil.safeMultiply(weeks, 7));\n                return Period.create(years, months, days);\n            }\n        }\n        throw new DateTimeParseException('Text cannot be parsed to a Period', text, 0);\n    }\n\n    static _parseNumber(text, str, negate) {\n        if (str == null) {\n            return 0;\n        }\n        const val = MathUtil.parseInt(str);\n        return MathUtil.safeMultiply(val, negate);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Creates an instance.\n     *\n     * @param {number} years - the amount\n     * @param {number} months - the amount\n     * @param {number} days - the amount\n     * @return {Duration}\n     */\n    static create(years, months, days) {\n        return new Period(years, months, days);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the list of units, from largest to smallest, that fully define this amount.\n     *\n     * @returns {ChronoUnit[]} list of units\n     */\n    units() {\n        return [ChronoUnit.YEARS, ChronoUnit.MONTHS, ChronoUnit.DAYS];\n    }\n\n    /**\n     * Gets the chronology that defines the meaning of the supported units.\n     *\n     * The period is defined by the chronology.\n     * It controls the supported units and restricts addition/subtraction\n     * to {@link ChronoLocalDate} instances of the same chronology.\n     *\n     * @return {IsoChronology} the chronology defining the period, not null\n     */\n    chronology() {\n        return IsoChronology.INSTANCE;\n    }\n\n    /**\n     * Gets the value of the requested unit.\n     *\n     * The supported units are chronology specific.\n     * They will typically be {@link ChronoUnit#YEARS},\n     * {@link ChronoUnit#MONTHS} and {@link ChronoUnit#DAYS}.\n     * Requesting an unsupported unit will throw an exception.\n     *\n     * @param {TemporalUnit} unit the {@link TemporalUnit} for which to return the value\n     * @return {number} the long value of the unit\n     * @throws DateTimeException if the unit is not supported\n     * @throws UnsupportedTemporalTypeException if the unit is not supported\n     */\n    get(unit) {\n        if (unit === ChronoUnit.YEARS) {\n            return this._years;\n        }\n        if (unit === ChronoUnit.MONTHS) {\n            return this._months;\n        }\n        if (unit === ChronoUnit.DAYS) {\n            return this._days;\n        }\n        throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if all three units of this period are zero.\n     *\n     * A zero period has the value zero for the years, months and days units.\n     *\n     * @return {boolean} true if this period is zero-length\n     */\n    isZero() {\n        return (this === Period.ZERO);\n    }\n\n    /**\n     * Checks if any of the three units of this period are negative.\n     *\n     * This checks whether the years, months or days units are less than zero.\n     *\n     * @return {boolean} true if any unit of this period is negative\n     */\n    isNegative() {\n        return this._years < 0 || this._months < 0 || this._days < 0;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the amount of years of this period.\n     *\n     * This returns the years unit.\n     *\n     * The months unit is not normalized with the years unit.\n     * This means that a period of '15 months' is different to a period\n     * of '1 year and 3 months'.\n     *\n     * @return {number} the amount of years of this period, may be negative\n     */\n    years() {\n        return this._years;\n    }\n\n    /**\n     * Gets the amount of months of this period.\n     *\n     * This returns the months unit.\n     *\n     * The months unit is not normalized with the years unit.\n     * This means that a period of '15 months' is different to a period\n     * of '1 year and 3 months'.\n     *\n     * @return {number} the amount of months of this period, may be negative\n     */\n    months() {\n        return this._months;\n    }\n\n    /**\n     * Gets the amount of days of this period.\n     *\n     * This returns the days unit.\n     *\n     * @return {number} the amount of days of this period, may be negative\n     */\n    days() {\n        return this._days;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this period with the specified amount of years.\n     *\n     * This sets the amount of the years unit in a copy of this period.\n     * The months and days units are unaffected.\n     *\n     * The months unit is not normalized with the years unit.\n     * This means that a period of '15 months' is different to a period\n     * of '1 year and 3 months'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} years - the years to represent, may be negative\n     * @return {Period} a {@link Period} based on this period with the requested years, not null\n     */\n    withYears(years) {\n        if (years === this._years) {\n            return this;\n        }\n        return Period.create(years, this._months, this._days);\n    }\n\n    /**\n     * Returns a copy of this period with the specified amount of months.\n     *\n     * This sets the amount of the months unit in a copy of this period.\n     * The years and days units are unaffected.\n     *\n     * The months unit is not normalized with the years unit.\n     * This means that a period of '15 months' is different to a period\n     * of '1 year and 3 months'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} months - the months to represent, may be negative\n     * @return {Period} a {@link Period} based on this period with the requested months, not null\n     */\n    withMonths(months) {\n        if (months === this._months) {\n            return this;\n        }\n        return Period.create(this._years, months, this._days);\n    }\n\n    /**\n     * Returns a copy of this period with the specified amount of days.\n     *\n     * This sets the amount of the days unit in a copy of this period.\n     * The years and months units are unaffected.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} days - the days to represent, may be negative\n     * @return {Period} a {@link Period} based on this period with the requested days, not null\n     */\n    withDays(days) {\n        if (days === this._days) {\n            return this;\n        }\n        return Period.create(this._years, this._months, days);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this period with the specified amount added.\n     *\n     * This input amount is converted to a {@link Period} using {@link from}.\n     * This operates separately on the years, months and days.\n     *\n     * For example, '1 year, 6 months and 3 days' plus '2 years, 2 months and 2 days'\n     * returns '3 years, 8 months and 5 days'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalAmount} amountToAdd - the period to add, not null\n     * @return {Period} a {@link Period} based on this period with the requested period added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plus(amountToAdd) {\n        const amount = Period.from(amountToAdd);\n        return Period.create(\n            MathUtil.safeAdd(this._years, amount._years),\n            MathUtil.safeAdd(this._months, amount._months),\n            MathUtil.safeAdd(this._days, amount._days));\n    }\n\n    /**\n     * Returns a copy of this period with the specified years added.\n     *\n     * This adds the amount to the years unit in a copy of this period.\n     * The months and days units are unaffected.\n     * For example, '1 year, 6 months and 3 days' plus 2 years returns '3 years, 6 months and 3 days'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} yearsToAdd - the years to add, positive or negative\n     * @return {Period} a {@link Period} based on this period with the specified years added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusYears(yearsToAdd) {\n        if (yearsToAdd === 0) {\n            return this;\n        }\n        return Period.create(MathUtil.safeToInt(MathUtil.safeAdd(this._years, yearsToAdd)), this._months, this._days);\n    }\n\n    /**\n     * Returns a copy of this period with the specified months added.\n     *\n     * This adds the amount to the months unit in a copy of this period.\n     * The years and days units are unaffected.\n     * For example, '1 year, 6 months and 3 days' plus 2 months returns '1 year, 8 months and 3 days'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} monthsToAdd - the months to add, positive or negative\n     * @return {Period} a {@link Period} based on this period with the specified months added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusMonths(monthsToAdd) {\n        if (monthsToAdd === 0) {\n            return this;\n        }\n        return Period.create(this._years, MathUtil.safeToInt(MathUtil.safeAdd(this._months, monthsToAdd)), this._days);\n    }\n\n    /**\n     * Returns a copy of this period with the specified days added.\n     *\n     * This adds the amount to the days unit in a copy of this period.\n     * The years and months units are unaffected.\n     * For example, '1 year, 6 months and 3 days' plus 2 days returns '1 year, 6 months and 5 days'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} daysToAdd - the days to add, positive or negative\n     * @return {Period} a {@link Period} based on this period with the specified days added, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusDays(daysToAdd) {\n        if (daysToAdd === 0) {\n            return this;\n        }\n        return Period.create(this._years, this._months, MathUtil.safeToInt(MathUtil.safeAdd(this._days, daysToAdd)));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this period with the specified amount subtracted.\n     *\n     * This input amount is converted to a {@link Period} using {@link from}.\n     * This operates separately on the years, months and days.\n     *\n     * For example, '1 year, 6 months and 3 days' minus '2 years, 2 months and 2 days'\n     * returns '-1 years, 4 months and 1 day'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalAmount} amountToSubtract - the period to subtract, not null\n     * @return {Period} a {@link Period} based on this period with the requested period subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minus(amountToSubtract) {\n        const amount = Period.from(amountToSubtract);\n        return Period.create(\n            MathUtil.safeSubtract(this._years, amount._years),\n            MathUtil.safeSubtract(this._months, amount._months),\n            MathUtil.safeSubtract(this._days, amount._days));\n    }\n\n    /**\n     * Returns a copy of this period with the specified years subtracted.\n     *\n     * This subtracts the amount from the years unit in a copy of this period.\n     * The months and days units are unaffected.\n     * For example, '1 year, 6 months and 3 days' minus 2 years returns '-1 years, 6 months and 3 days'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} yearsToSubtract - the years to subtract, positive or negative\n     * @return {Period} a {@link Period} based on this period with the specified years subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusYears(yearsToSubtract) {\n        return this.plusYears(-1 * yearsToSubtract);\n    }\n\n    /**\n     * Returns a copy of this period with the specified months subtracted.\n     *\n     * This subtracts the amount from the months unit in a copy of this period.\n     * The years and days units are unaffected.\n     * For example, '1 year, 6 months and 3 days' minus 2 months returns '1 year, 4 months and 3 days'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} monthsToSubtract - the years to subtract, positive or negative\n     * @return {Period} a {@link Period} based on this period with the specified months subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusMonths(monthsToSubtract) {\n        return this.plusMonths(-1 * monthsToSubtract);\n    }\n\n    /**\n     * Returns a copy of this period with the specified days subtracted.\n     *\n     * This subtracts the amount from the days unit in a copy of this period.\n     * The years and months units are unaffected.\n     * For example, '1 year, 6 months and 3 days' minus 2 days returns '1 year, 6 months and 1 day'.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} daysToSubtract - the months to subtract, positive or negative\n     * @return {Period} a {@link Period} based on this period with the specified days subtracted, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusDays(daysToSubtract) {\n        return this.plusDays(-1 * daysToSubtract);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a new instance with each element in this period multiplied\n     * by the specified scalar.\n     *\n     * This simply multiplies each field, years, months, days and normalized time,\n     * by the scalar. No normalization is performed.\n     *\n     * @param {number} scalar - the scalar to multiply by, not null\n     * @return {Period} a {@link Period} based on this period with the amounts multiplied by the scalar, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    multipliedBy(scalar) {\n        if (this === Period.ZERO || scalar === 1) {\n            return this;\n        }\n        return Period.create(\n            MathUtil.safeMultiply(this._years, scalar),\n            MathUtil.safeMultiply(this._months, scalar),\n            MathUtil.safeMultiply(this._days, scalar));\n    }\n\n    /**\n     * Returns a new instance with each amount in this period negated.\n     *\n     * @return {Period} a {@link Period} based on this period with the amounts negated, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    negated() {\n        return this.multipliedBy(-1);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this period with the years and months normalized\n     * using a 12 month year.\n     *\n     * This normalizes the years and months units, leaving the days unit unchanged.\n     * The months unit is adjusted to have an absolute value less than 11,\n     * with the years unit being adjusted to compensate. For example, a period of\n     * '1 Year and 15 months' will be normalized to '2 years and 3 months'.\n     *\n     * The sign of the years and months units will be the same after normalization.\n     * For example, a period of '1 year and -25 months' will be normalized to\n     * '-1 year and -1 month'.\n     *\n     * This normalization uses a 12 month year which is not valid for all calendar systems.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @return {Period} a {@link Period} based on this period with excess months normalized to years, not null\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    normalized() {\n        const totalMonths = this.toTotalMonths();\n        const splitYears = MathUtil.intDiv(totalMonths, 12);\n        const splitMonths = MathUtil.intMod(totalMonths, 12);  // no overflow\n        if (splitYears === this._years && splitMonths === this._months) {\n            return this;\n        }\n        return Period.create(MathUtil.safeToInt(splitYears), splitMonths, this._days);\n    }\n\n    /**\n     * Gets the total number of months in this period using a 12 month year.\n     *\n     * This returns the total number of months in the period by multiplying the\n     * number of years by 12 and adding the number of months.\n     *\n     * This uses a 12 month year which is not valid for all calendar systems.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @return {number} the total number of months in the period, may be negative\n     */\n    toTotalMonths() {\n        return this._years * 12 + this._months;  // no overflow\n    }\n\n    //-------------------------------------------------------------------------\n    /**\n     * Adds this period to the specified temporal object.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with this period added.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#plus}.\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   dateTime = thisPeriod.addTo(dateTime);\n     *   dateTime = dateTime.plus(thisPeriod);\n     * </pre>\n     *\n     * The calculation will add the years, then months, then days.\n     * Only non-zero amounts will be added.\n     * If the date-time has a calendar system with a fixed number of months in a\n     * year, then the years and months will be combined before being added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} temporal - the temporal object to adjust, not null\n     * @return {Temporal} an object of the same type with the adjustment made, not null\n     * @throws DateTimeException if unable to add\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    addTo(temporal) {\n        requireNonNull(temporal, 'temporal');\n        if (this._years !== 0) {\n            if (this._months !== 0) {\n                temporal = temporal.plus(this.toTotalMonths(), ChronoUnit.MONTHS);\n            } else {\n                temporal = temporal.plus(this._years, ChronoUnit.YEARS);\n            }\n        } else if (this._months !== 0) {\n            temporal = temporal.plus(this._months, ChronoUnit.MONTHS);\n        }\n        if (this._days !== 0) {\n            temporal = temporal.plus(this._days, ChronoUnit.DAYS);\n        }\n        return temporal;\n    }\n\n    /**\n     * Subtracts this period from the specified temporal object.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with this period subtracted.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#minus}.\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   dateTime = thisPeriod.subtractFrom(dateTime);\n     *   dateTime = dateTime.minus(thisPeriod);\n     * </pre>\n     *\n     * The calculation operates as follows.\n     * First, the chronology of the temporal is checked to ensure it is ISO chronology or null.\n     * Second, if the months are zero, the years are added if non-zero, otherwise\n     * the combination of years and months is added if non-zero.\n     * Finally, any days are added.\n     *\n     * The calculation will subtract the years, then months, then days.\n     * Only non-zero amounts will be subtracted.\n     * If the date-time has a calendar system with a fixed number of months in a\n     * year, then the years and months will be combined before being subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} temporal - the temporal object to adjust, not null\n     * @return {Temporal} an object of the same type with the adjustment made, not null\n     * @throws DateTimeException if unable to subtract\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    subtractFrom(temporal) {\n        requireNonNull(temporal, 'temporal');\n        if (this._years !== 0) {\n            if (this._months !== 0) {\n                temporal = temporal.minus(this.toTotalMonths(), ChronoUnit.MONTHS);\n            } else {\n                temporal = temporal.minus(this._years, ChronoUnit.YEARS);\n            }\n        } else if (this._months !== 0) {\n            temporal = temporal.minus(this._months, ChronoUnit.MONTHS);\n        }\n        if (this._days !== 0) {\n            temporal = temporal.minus(this._days, ChronoUnit.DAYS);\n        }\n        return temporal;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this period is equal to another period.\n     *\n     * The comparison is based on the amounts held in the period.\n     * To be equal, the years, months and days units must be individually equal.\n     * Note that this means that a period of '15 Months' is not equal to a period\n     * of '1 Year and 3 Months'.\n     *\n     * @param {*} obj - the object to check, null returns false\n     * @return {boolean} true if this is equal to the other period\n     */\n    equals(obj) {\n        if (this === obj) {\n            return true;\n        }\n        if (obj instanceof Period) {\n            const other = obj;\n            return this._years === other._years &&\n                this._months === other._months &&\n                this._days === other._days;\n        }\n        return false;\n    }\n\n    /**\n     * A hash code for this period.\n     *\n     * @return {number} a suitable hash code\n     */\n    hashCode() {\n        return MathUtil.hashCode(this._years, this._months, this._days);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Outputs this period as a string, such as {@link P6Y3M1D}.\n     *\n     * The output will be in the ISO-8601 period format.\n     * A zero period will be represented as zero days, 'P0D'.\n     *\n     * @return {string} a string representation of this period, not null\n     */\n    toString() {\n        if (this === Period.ZERO) {\n            return 'P0D';\n        } else {\n            let buf = 'P';\n            if (this._years !== 0) {\n                buf += `${this._years}Y`;\n            }\n            if (this._months !== 0) {\n                buf += `${this._months}M`;\n            }\n            if (this._days !== 0) {\n                buf += `${this._days}D`;\n            }\n            return buf;\n        }\n    }\n\n    /**\n     *\n     * @return {string} same as {@link Period.toString}\n     */\n    toJSON() {\n        return this.toString();\n    }\n}\n\nexport function _init() {\n    /**\n     * A constant for a period of zero.\n     */\n    Period.ofDays(0);\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n/**\n * @private\n */\nexport class ParsePosition {\n    constructor(index) {\n        this._index = index;\n        this._errorIndex = -1;\n    }\n\n    getIndex(){\n        return this._index;\n    }\n\n    setIndex(index){\n        this._index = index;\n    }\n\n    getErrorIndex(){\n        return this._errorIndex;\n    }\n\n    setErrorIndex(errorIndex){\n        this._errorIndex = errorIndex;\n    }\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n/**\n * @private\n */\nexport class EnumMap {\n    constructor(){\n        this._map = {};\n    }\n\n    putAll(otherMap){\n        for(const key in otherMap._map){\n            this._map[key] = otherMap._map[key];\n        }\n        return this;\n    }\n\n    containsKey(key){\n        // eslint-disable-next-line no-prototype-builtins\n        return (this._map.hasOwnProperty(key.name())) && (this.get(key) !== undefined);\n    }\n\n    get(key) {\n        return this._map[key.name()];\n    }\n\n    put(key, val) {\n        return this.set(key, val);\n    }\n\n    set(key, val) {\n        this._map[key.name()] = val;\n        return this;\n    }\n\n    retainAll(keyList){\n        const map = {};\n        for(let i=0; i<keyList.length; i++){\n            const key = keyList[i].name();\n            map[key] = this._map[key];\n        }\n        this._map = map;\n        return this;\n    }\n\n    /**\n     * due to the bad performance of delete we just set the key entry to undefined.\n     *\n     * this might lead to issues with \"null\" entries. Calling clear in the end might solve the issue\n     * @param key\n     * @returns {*}\n     */\n    remove(key){\n        const keyName = key.name();\n        const val = this._map[keyName];\n        this._map[keyName] = undefined;\n        return val;\n    }\n\n    keySet(){\n        return this._map;\n    }\n\n    clear(){\n        this._map = {};\n    }\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { Enum } from '../Enum';\n\n/**\n * Enumeration of different ways to resolve dates and times.\n * \n * Parsing a text string occurs in two phases.\n * Phase 1 is a basic text parse according to the fields added to the builder.\n * Phase 2 resolves the parsed field-value pairs into date and/or time objects.\n * This style is used to control how phase 2, resolving, happens.\n *\n * ### Static properties of Class {@link DateTimeFormatter}\n *\n * ResolverStyle.STRICT = new ResolverStyle('STRICT');\n *\n * Style to resolve dates and times strictly.\n *\n * Using strict resolution will ensure that all parsed values are within\n * the outer range of valid values for the field. Individual fields may\n * be further processed for strictness.\n *\n * For example, resolving year-month and day-of-month in the ISO calendar\n * system using strict mode will ensure that the day-of-month is valid\n * for the year-month, rejecting invalid values.\n *\n * ResolverStyle.SMART = new ResolverStyle('SMART');\n *\n * Style to resolve dates and times in a smart, or intelligent, manner.\n *\n * Using smart resolution will perform the sensible default for each\n * field, which may be the same as strict, the same as lenient, or a third\n * behavior. Individual fields will interpret this differently.\n *\n * For example, resolving year-month and day-of-month in the ISO calendar\n * system using smart mode will ensure that the day-of-month is from\n * 1 to 31, converting any value beyond the last valid day-of-month to be\n * the last valid day-of-month.\n *\n * ResolverStyle.LENIENT = new ResolverStyle('LENIENT');\n *\n * Style to resolve dates and times leniently.\n *\n * Using lenient resolution will resolve the values in an appropriate\n * lenient manner. Individual fields will interpret this differently.\n *\n * For example, lenient mode allows the month in the ISO calendar system\n * to be outside the range 1 to 12.\n * For example, month 15 is treated as being 3 months after month 12.\n *\n */\nexport class ResolverStyle extends Enum {}\n\n/**\n * Style to resolve dates and times strictly.\n * \n * Using strict resolution will ensure that all parsed values are within\n * the outer range of valid values for the field. Individual fields may\n * be further processed for strictness.\n * \n * For example, resolving year-month and day-of-month in the ISO calendar\n * system using strict mode will ensure that the day-of-month is valid\n * for the year-month, rejecting invalid values.\n */\nResolverStyle.STRICT = new ResolverStyle('STRICT');\n/**\n * Style to resolve dates and times in a smart, or intelligent, manner.\n * \n * Using smart resolution will perform the sensible default for each\n * field, which may be the same as strict, the same as lenient, or a third\n * behavior. Individual fields will interpret this differently.\n * \n * For example, resolving year-month and day-of-month in the ISO calendar\n * system using smart mode will ensure that the day-of-month is from\n * 1 to 31, converting any value beyond the last valid day-of-month to be\n * the last valid day-of-month.\n */\nResolverStyle.SMART = new ResolverStyle('SMART');\n/**\n * Style to resolve dates and times leniently.\n * \n * Using lenient resolution will resolve the values in an appropriate\n * lenient manner. Individual fields will interpret this differently.\n * \n * For example, lenient mode allows the month in the ISO calendar system\n * to be outside the range 1 to 12.\n * For example, month 15 is treated as being 3 months after month 12.\n */\nResolverStyle.LENIENT = new ResolverStyle('LENIENT');\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert, abstractMethodFail, requireInstance, requireNonNull } from '../assert';\nimport { IllegalArgumentException } from '../errors';\nimport { TemporalAccessor } from './TemporalAccessor';\nimport { TemporalAmount } from './TemporalAmount';\nimport { TemporalUnit } from './TemporalUnit';\n\n/**\n * Framework-level interface defining read-write access to a temporal object,\n * such as a date, time, offset or some combination of these.\n *\n * This is the base interface type for date, time and offset objects that\n * are complete enough to be manipulated using plus and minus.\n * It is implemented by those classes that can provide and manipulate information\n * as fields (see {@link TemporalField}) or queries (see {@link TemporalQuery}).\n * See {@link TemporalAccessor} for the read-only version of this interface.\n *\n * Most date and time information can be represented as a number.\n * These are modeled using {@link TemporalField} with the number held using\n * a `long` to handle large values. Year, month and day-of-month are\n * simple examples of fields, but they also include instant and offsets.\n * See {@link ChronoField} for the standard set of fields.\n *\n * Two pieces of date/time information cannot be represented by numbers,\n * the {@link Chronology} and the {@link ZoneId}.\n * These can be accessed using the static methods defined on {@link TemporalQueries}.\n *\n * This interface is a framework-level interface that should not be widely\n * used in application code. Instead, applications should create and pass\n * around instances of concrete types, such as {@link LocalDate}.\n * There are many reasons for this, part of which is that implementations\n * of this interface may be in calendar systems other than ISO.\n * See {@link ChronoLocalDate} for a fuller discussion of the issues.\n *\n * ### When to implement\n *\n * A class should implement this interface if it meets three criteria:\n *\n * * it provides access to date/time/offset information, as per {@link TemporalAccessor}\n * * the set of fields are contiguous from the largest to the smallest\n * * the set of fields are complete, such that no other field is needed to define the\n *   valid range of values for the fields that are represented\n *\n * Four examples make this clear:\n *\n * * {@link LocalDate} implements this interface as it represents a set of fields\n *   that are contiguous from days to forever and require no external information to determine\n *   the validity of each date. It is therefore able to implement plus/minus correctly.\n * * {@link LocalTime} implements this interface as it represents a set of fields\n *   that are contiguous from nanos to within days and require no external information to determine\n *   validity. It is able to implement plus/minus correctly, by wrapping around the day.\n * * {@link MonthDay}, the combination of month-of-year and day-of-month, does not implement\n *   this interface.  While the combination is contiguous, from days to months within years,\n *   the combination does not have sufficient information to define the valid range of values\n *   for day-of-month.  As such, it is unable to implement plus/minus correctly.\n * * The combination day-of-week and day-of-month (\"Friday the 13th\") should not implement\n *   this interface. It does not represent a contiguous set of fields, as days to weeks overlaps\n *   days to months.\n *\n * @interface\n */\nexport class Temporal extends TemporalAccessor {\n    /**\n     * Checks if the specified unit is supported.\n     * This checks if the date-time can be queried for the specified unit. If false, then calling the plus and minus methods will throw an exception.\n\n     * ### Specification for implementors\n     * Implementations must check and handle all fields defined in {@link ChronoUnit}. If the field is supported, then true is returned, otherwise false\n     * If the field is not a {@link ChronoUnit}, then the result of this method is obtained by invoking `TemporalUnit.isSupportedBy(Temporal)` passing this as the argument.\n\n     * Implementations must not alter this object.\n\n     * @param {TemporalUnit} fieldOrUnit - the unit to check, null returns false\n     * @return {boolean} true if this date-time can be queried for the unit, false if not\n     */\n    // eslint-disable-next-line no-unused-vars\n    isSupported(fieldOrUnit) {\n        abstractMethodFail('isSupported');\n    }\n\n    /**\n     * function overloading for {@link Temporal.plus}\n     *\n     * Called with 1 (or less) arguments, p1 is expected to be a {@link TemporalAmount} and {@link Temporal.minusAmount} is called.\n     *\n     * Otherwise {@link Temporal.minusAmountUnit} is called.\n     *\n     * @param {!(TemporalAmount|number)} amount\n     * @param {TemporalUnit} unit\n     * @return {Temporal}\n     */\n    minus(amount, unit) {\n        if (arguments.length < 2) {\n            return this._minusAmount(amount);\n        } else {\n            return this._minusUnit(amount, unit);\n        }\n    }\n\n    /**\n     * Returns an object of the same type as this object with an amount subtracted.\n     * This adjusts this temporal, subtracting according to the rules of the specified amount. The\n     * amount is typically a {@link Period} but may be any other type implementing the {@link TemporalAmount} interface, such as Duration.\n     *\n     * Some example code indicating how and why this method is used:\n     *\n     * <pre>\n     *   date = date.minus(period);                  // subtract a Period instance\n     *   date = date.minus(duration);                // subtract a Duration instance\n     *   date = date.minus(workingDays(6));          // example user-written workingDays method\n     * </pre>\n     *\n     * Note that calling plus followed by minus is not guaranteed to return the same date-time.\n     *\n     * ### Specification for implementors\n     * Implementations must not alter either this object. Instead, an adjusted copy of the original\n     * must be returned. This provides equivalent, safe behavior for immutable and mutable\n     * implementations.\n     *\n     * @param {TemporalAmount} amount - the amount to subtract, not null\n     * @return {Temporal} an object of the same type with the specified adjustment made, not null\n     * @throws DateTimeException - if the subtraction cannot be made\n     * @throws ArithmeticException - if numeric overflow occurs\n     */\n    _minusAmount(amount) {\n        requireNonNull(amount, 'amount');\n        requireInstance(amount, TemporalAmount, 'amount');\n        return amount.subtractFrom(this);\n    }\n\n    /**\n     * Returns an object of the same type as this object with the specified period subtracted.\n     * This method returns a new object based on this one with the specified period subtracted. For example, on a {@link LocalDate}, this could be used to subtract a number of years, months or days. The returned object will have the same observable type as this object.\n     *\n     * In some cases, changing a field is not fully defined. For example, if the target object is a date representing the 31st March, then subtracting one month would be unclear. In cases like this, the field is responsible for resolving the result. Typically it will choose the previous valid date, which would be the last valid day of February in this example.\n     *\n     * If the implementation represents a date-time that has boundaries, such {@link as} LocalTime, then the permitted units must include the boundary unit, but no multiples of the boundary unit. For example, {@link LocalTime} must accept `DAYS` but not `WEEKS` or `MONTHS`.\n     *\n     * ### Specification for implementors\n     * Implementations must behave in a manor equivalent to the default method behavior.\n     * Implementations must not alter either this object or the specified temporal object. Instead, an adjusted copy of the original must be returned. This provides equivalent, safe behavior for immutable and mutable implementations.\n     *\n     * @param {number} amountToSubtract - the amount of the specified unit to subtract, may be negative\n     * @param {TemporalUnit} unit - the unit of the period to subtract, not null\n     * @return {Temporal} an object of the same type with the specified period subtracted, not null\n     * @throws DateTimeException - if the unit cannot be subtracted\n     * @throws ArithmeticException - if numeric overflow occurs\n     */\n    _minusUnit(amountToSubtract, unit) {\n        requireNonNull(amountToSubtract, 'amountToSubtract');\n        requireNonNull(unit, 'unit');\n        requireInstance(unit, TemporalUnit, 'unit');\n        return this._plusUnit(-amountToSubtract, unit);\n    }\n\n    /**\n     * function overloading for {@link Temporal.plus}\n     *\n     * Called with 1 (or less) arguments, p1 is expected to be a {@link TemporalAmount} and {@link Temporal.plusAmount} is called.\n     *\n     * Otherwise {@link Temporal.plusAmountUnit} is called.\n     *\n     * @param {!(TemporalAmount|number)} amount\n     * @param {TemporalUnit} unit\n     * @return {Temporal}\n     */\n    plus(amount, unit) {\n        if (arguments.length < 2) {\n            return this._plusAmount(amount);\n        } else {\n            return this._plusUnit(amount, unit);\n        }\n    }\n\n    /**\n     * Returns an object of the same type as this object with an amount added.\n     * This adjusts this temporal, adding according to the rules of the specified amount. The amount is typically a {@link Period} but may be any other type implementing the {@link TemporalAmount} interface, such as {@link Duration}.\n     *\n     * Some example code indicating how and why this method is used:\n     *\n     * <pre>\n     *   date = date.plus(period);                  // add a Period instance\n     *   date = date.plus(duration);                // add a Duration instance\n     *   date = date.plus(workingDays(6));          // example user-written workingDays method\n     * </pre>\n     *\n     * Note that calling plus followed by minus is not guaranteed to return the same date-time.\n     *\n     * ### Specification for implementors\n     * Implementations must not alter either this object. Instead, an adjusted copy of the original must be returned. This provides equivalent, safe behavior for immutable and mutable implementations.\n     *\n     * @param {TemporalAmount} amount - the amount to add, not null\n     * @return {Temporal} an object of the same type with the specified adjustment made, not null\n     * @throws DateTimeException - if the addition cannot be made\n     * @throws ArithmeticException - if numeric overflow occurs\n     */\n    _plusAmount(amount) {\n        requireNonNull(amount, 'amount');\n        requireInstance(amount, TemporalAmount, 'amount');\n        return amount.addTo(this);\n    }\n\n    /**\n     * Returns an object of the same type as this object with the specified period added.\n     * This method returns a new object based on this one with the specified period added. For example, on a {@link LocalDate}, this could be used to add a number of years, months or days. The returned object will have the same observable type as this object.\n     *\n     * In some cases, changing a field is not fully defined. For example, if the target object is a date representing the 31st January, then adding one month would be unclear. In cases like this, the field is responsible for resolving the result. Typically it will choose the previous valid date, which would be the last valid day of February in this example.\n     *\n     * If the implementation represents a date-time that has boundaries, such as {@link LocalTime}, then the permitted units must include the boundary unit, but no multiples of the boundary unit. For example, {@link LocalTime} must accept `DAYS` but not `WEEKS` or `MONTHS`.\n     *\n     * ### Specification for implementors\n     * Implementations must check and handle all units defined in {@link ChronoUnit}. If the unit is supported, then the addition must be performed. If unsupported, then a {@link DateTimeException} must be thrown.\n     * If the unit is not a {@link ChronoUnit}, then the result of this method is obtained by invoking `TemporalUnit.addTo(Temporal, long)` passing this as the first argument.\n     *\n     * Implementations must not alter either this object or the specified temporal object. Instead, an adjusted copy of the original must be returned. This provides equivalent, safe behavior for immutable and mutable implementations.\n     *\n     * @param {number} amountToAdd - the amount of the specified unit to add, may be negative\n     * @param {TemporalUnit} unit - the unit of the period to add, not null\n     * @return {Temporal} an object of the same type with the specified period added, not null\n     * @throws DateTimeException - if the unit cannot be added\n     * @throws ArithmeticException - if numeric overflow occurs\n     */\n    // eslint-disable-next-line no-unused-vars\n    _plusUnit(amountToAdd, unit) {\n        abstractMethodFail('_plusUnit');\n    }\n\n    /**\n     * Calculates the period between this temporal and another temporal in terms of the specified unit.\n     * This calculates the period between two temporals in terms of a single unit. The start and end points are this and the specified temporal. The result will be negative if the end is before the start. For example, the period in hours between two temporal objects can be calculated using `startTime.until(endTime, HOURS)`.\n     *\n     * The calculation returns a whole number, representing the number of complete units between the two temporals. For example, the period in hours between the times 11:30 and 13:29 will only be one hour as it is one minute short of two hours.\n     *\n     * There are two equivalent ways of using this method. The first is to invoke this method directly. The second is to use `TemporalUnit.between(Temporal, Temporal)`:\n     *\n     * <pre>\n     *    // these two lines are equivalent\n     *    between = thisUnit.between(start, end);\n     *    between = start.until(end, thisUnit);\n     * </pre>\n     *\n     * The choice should be made based on which makes the code more readable.\n     * For example, this method allows the number of days between two dates to be calculated:\n     *\n     * <pre>\n     *    long daysBetween = DAYS.between(start, end);\n     *    // or alternatively\n     *    long daysBetween = start.until(end, DAYS);\n     * </pre>\n     *\n     * ### Specification for implementors\n     * Implementations must begin by checking to ensure that the input temporal object is of the same observable type as the implementation. They must then perform the calculation for all instances of {@link ChronoUnit}. A {@link DateTimeException} must be thrown for {@link ChronoUnit} instances that are unsupported.\n     * If the unit is not a {@link ChronoUnit}, then the result of this method is obtained by invoking `TemporalUnit.between(Temporal, Temporal)` passing this as the first argument and the input temporal as the second argument.\n     *\n     * In summary, implementations must behave in a manner equivalent to this code:\n     *\n     * <pre>\n     *   // check input temporal is the same type as this class\n     *   if (unit instanceof ChronoUnit) {\n     *     // if unit is supported, then calculate and return result\n     *     // else throw DateTimeException for unsupported units\n     *   }\n     *   return unit.between(this, endTemporal);\n     * </pre>\n     *\n     * The target object must not be altered by this method.\n     *\n     * @param {Temporal} endTemporal - the end temporal, of the same type as this object, not null\n     * @param {TemporalUnit} unit - the unit to measure the period in, not null\n     * @return {number} the amount of the period between this and the end\n     * @throws DateTimeException - if the period cannot be calculated\n     * @throws ArithmeticException - if numeric overflow occurs\n     */\n    // eslint-disable-next-line no-unused-vars\n    until(endTemporal, unit) {\n        abstractMethodFail('until');\n    }\n\n    /**\n     * function overloading for {@link Temporal.with}\n     *\n     * Called with 1 (or less) arguments, p1 is expected to be a {@link TemporalAdjuster} and {@link Temporal.withAdjuster} is called.\n     *\n     * Otherwise {@link Temporal.withFieldValue} is called.\n     *\n     * @param {!(TemporalAdjuster|TemporalField)} adjusterOrField\n     * @param {number} newValue\n     * @return {Temporal}\n     */\n    with(adjusterOrField, newValue) {\n        if (arguments.length < 2) {\n            return this._withAdjuster(adjusterOrField);\n        } else {\n            return this._withField(adjusterOrField, newValue);\n        }\n    }\n\n    /**\n     * Returns an adjusted object of the same type as this object with the adjustment made.\n     * This adjusts this date-time according to the rules of the specified adjuster. A simple adjuster might simply set the one of the fields, such as the year field. A more complex adjuster might set the date to the last day of the month. A selection of common adjustments is provided in {@link TemporalAdjusters}. These include finding the \"last day of the month\" and \"next Wednesday\". The adjuster is responsible for handling special cases, such as the varying lengths of month and leap years.\n     *\n     * Some example code indicating how and why this method is used:\n     *\n     * <pre>\n     *   date = date.with(Month.JULY);        // most key classes implement TemporalAdjuster\n     *   date = date.with(lastDayOfMonth());  // static import from TemporalAdjusters\n     *   date = date.with(next(WEDNESDAY));   // static import from TemporalAdjusters and DayOfWeek\n     * </pre>\n     *\n     * ### Specification for implementors\n     * Implementations must not alter either this object. Instead, an adjusted copy of the original must be returned. This provides equivalent, safe behavior for immutable and mutable implementations.\n     *\n     * @param {TemporalAdjuster} adjuster - the adjuster to use, not null\n     * @return {Temporal} an object of the same type with the specified adjustment made, not null\n     * @throws DateTimeException - if unable to make the adjustment\n     * @throws ArithmeticException - if numeric overflow occurs\n     */\n    _withAdjuster(adjuster) {\n        requireNonNull(adjuster, 'adjuster');\n        assert(typeof adjuster.adjustInto === 'function',\n            'adjuster must be a TemporalAdjuster',\n            IllegalArgumentException);\n        return adjuster.adjustInto(this);\n    }\n\n    /**\n     * Returns an object of the same type as this object with the specified field altered.\n     * This returns a new object based on this one with the value for the specified field changed. For example, on a {@link LocalDate}, this could be used to set the year, month or day-of-month. The returned object will have the same observable type as this object.\n     *\n     * In some cases, changing a field is not fully defined. For example, if the target object is a date representing the 31st January, then changing the month to February would be unclear. In cases like this, the field is responsible for resolving the result. Typically it will choose the previous valid date, which would be the last valid day of February in this example.\n     *\n     * ### Specification for implementors\n     * Implementations must check and handle all fields defined in {@link ChronoField}. If the field is supported, then the adjustment must be performed. If unsupported, then a {@link DateTimeException} must be thrown.\n     * If the field is not a {@link ChronoField}, then the result of this method is obtained by invoking `TemporalField.adjustInto(Temporal, long)` passing this as the first argument.\n     *\n     * Implementations must not alter either this object or the specified temporal object. Instead, an adjusted copy of the original must be returned. This provides equivalent, safe behavior for immutable and mutable implementations.\n     *\n     * @param {TemporalField} field - the field to set in the result, not null\n     * @param {number} newValue - the new value of the field in the result\n     * @return {Temporal} an object of the same type with the specified field set, not null\n     * @throws DateTimeException - if the field cannot be set\n     * @throws ArithmeticException - if numeric overflow occurs\n     */\n    // eslint-disable-next-line no-unused-vars\n    _withField(field, newValue) {\n        abstractMethodFail('_withField');\n    }\n}\n\nif (typeof Symbol !== 'undefined' && Symbol.toPrimitive) {\n    Temporal.prototype[Symbol.toPrimitive] = function (hint) {\n        // hint could be 'number', 'string' or 'default'. Only 'number'\n        // should throw and 'default' is treated as 'string'.\n        if (hint !== 'number') {\n            return this.toString();\n        }\n\n        throw new TypeError(\n            'A conversion from Temporal to a number is not allowed. ' +\n            'To compare use the methods .equals(), .compareTo(), .isBefore() ' +\n            'or one that is more suitable to your use case.'\n        );\n    };\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull, requireInstance } from '../assert';\n\nimport { ChronoField } from '../temporal/ChronoField';\nimport { ChronoUnit } from '../temporal/ChronoUnit';\nimport { DateTimeFormatter } from '../format/DateTimeFormatter';\nimport { TemporalQueries } from '../temporal/TemporalQueries';\nimport { Temporal } from '../temporal/Temporal';\n\nimport { LocalDate } from '../LocalDate';\n\n/**\n * A date without time-of-day or time-zone in an arbitrary chronology, intended\n * for advanced globalization use cases.\n *\n * **Most applications should declare method signatures, fields and variables\n * as {@link LocalDate}, not this interface.**\n *\n * A {@link ChronoLocalDate} is the abstract representation of a date where the\n * {@link Chronology}, or calendar system, is pluggable.\n * The date is defined in terms of fields expressed by {@link TemporalField},\n * where most common implementations are defined in {@link ChronoField}.\n * The chronology defines how the calendar system operates and the meaning of\n * the standard fields.\n *\n * #### When to use this interface\n *\n * The design of the API encourages the use of {@link LocalDate} rather than this\n * interface, even in the case where the application needs to deal with multiple\n * calendar systems. The rationale for this is explored in the following documentation.\n *\n * The primary use case where this interface should be used is where the generic\n * type parameter `C` is fully defined as a specific chronology.\n * In that case, the assumptions of that chronology are known at development\n * time and specified in the code.\n *\n * When the chronology is defined in the generic type parameter as ? or otherwise\n * unknown at development time, the rest of the discussion below applies.\n *\n * To emphasize the point, declaring a method signature, field or variable as this\n * interface type can initially seem like the sensible way to globalize an application,\n * however it is usually the wrong approach.\n * As such, it should be considered an application-wide architectural decision to choose\n * to use this interface as opposed to {@link LocalDate}.\n *\n * #### Architectural issues to consider\n *\n * These are some of the points that must be considered before using this interface\n * throughout an application.\n *\n * 1) Applications using this interface, as opposed to using just {@link LocalDate},\n * face a significantly higher probability of bugs. This is because the calendar system\n * in use is not known at development time. A key cause of bugs is where the developer\n * applies assumptions from their day-to-day knowledge of the ISO calendar system\n * to code that is intended to deal with any arbitrary calendar system.\n * The section below outlines how those assumptions can cause problems\n * The primary mechanism for reducing this increased risk of bugs is a strong code review process.\n * This should also be considered a extra cost in maintenance for the lifetime of the code.\n *\n * 2) This interface does not enforce immutability of implementations.\n * While the implementation notes indicate that all implementations must be immutable\n * there is nothing in the code or type system to enforce this. Any method declared\n * to accept a {@link ChronoLocalDate} could therefore be passed a poorly or\n * maliciously written mutable implementation.\n *\n * 3) Applications using this interface  must consider the impact of eras.\n * {@link LocalDate} shields users from the concept of eras, by ensuring that `getYear()`\n * returns the proleptic year. That decision ensures that developers can think of\n * {@link LocalDate} instances as consisting of three fields - year, month-of-year and day-of-month.\n * By contrast, users of this interface must think of dates as consisting of four fields -\n * era, year-of-era, month-of-year and day-of-month. The extra era field is frequently\n * forgotten, yet it is of vital importance to dates in an arbitrary calendar system.\n * For example, in the Japanese calendar system, the era represents the reign of an Emperor.\n * Whenever one reign ends and another starts, the year-of-era is reset to one.\n *\n * 4) The only agreed international standard for passing a date between two systems\n * is the ISO-8601 standard which requires the ISO calendar system. Using this interface\n * throughout the application will inevitably lead to the requirement to pass the date\n * across a network or component boundary, requiring an application specific protocol or format.\n *\n * 5) Long term persistence, such as a database, will almost always only accept dates in the\n * ISO-8601 calendar system (or the related Julian-Gregorian). Passing around dates in other\n * calendar systems increases the complications of interacting with persistence.\n *\n * 6) Most of the time, passing a {@link ChronoLocalDate} throughout an application\n * is unnecessary, as discussed in the last section below.\n *\n * #### False assumptions causing bugs in multi-calendar system code\n *\n * As indicated above, there are many issues to consider when try to use and manipulate a\n * date in an arbitrary calendar system. These are some of the key issues.\n *\n * Code that queries the day-of-month and assumes that the value will never be more than\n * 31 is invalid. Some calendar systems have more than 31 days in some months.\n *\n * Code that adds 12 months to a date and assumes that a year has been added is invalid.\n * Some calendar systems have a different number of months, such as 13 in the Coptic or Ethiopic.\n *\n * Code that adds one month to a date and assumes that the month-of-year value will increase\n * by one or wrap to the next year is invalid. Some calendar systems have a variable number\n * of months in a year, such as the Hebrew.\n *\n * Code that adds one month, then adds a second one month and assumes that the day-of-month\n * will remain close to its original value is invalid. Some calendar systems have a large difference\n * between the length of the longest month and the length of the shortest month.\n * For example, the Coptic or Ethiopic have 12 months of 30 days and 1 month of 5 days.\n *\n * Code that adds seven days and assumes that a week has been added is invalid.\n * Some calendar systems have weeks of other than seven days, such as the French Revolutionary.\n *\n * Code that assumes that because the year of `date1` is greater than the year of `date2`\n * then `date1` is after `date2` is invalid. This is invalid for all calendar systems\n * when referring to the year-of-era, and especially untrue of the Japanese calendar system\n * where the year-of-era restarts with the reign of every new Emperor.\n *\n * Code that treats month-of-year one and day-of-month one as the start of the year is invalid.\n * Not all calendar systems start the year when the month value is one.\n *\n * In general, manipulating a date, and even querying a date, is wide open to bugs when the\n * calendar system is unknown at development time. This is why it is essential that code using\n * this interface is subjected to additional code reviews. It is also why an architectural\n * decision to avoid this interface type is usually the correct one.\n *\n * #### Using LocalDate instead\n *\n * The primary alternative to using this interface throughout your application is as follows.\n *\n * * Declare all method signatures referring to dates in terms of {@link LocalDate}.\n * * Either store the chronology (calendar system) in the user profile or lookup the chronology\n *   from the user locale.\n * * Convert the ISO {@link LocalDate} to and from the user's preferred calendar system during\n *   printing and parsing.\n *\n * This approach treats the problem of globalized calendar systems as a localization issue\n * and confines it to the UI layer. This approach is in keeping with other localization\n * issues in the java platform.\n *\n * As discussed above, performing calculations on a date where the rules of the calendar system\n * are pluggable requires skill and is not recommended.\n * Fortunately, the need to perform calculations on a date in an arbitrary calendar system\n * is extremely rare. For example, it is highly unlikely that the business rules of a library\n * book rental scheme will allow rentals to be for one month, where meaning of the month\n * is dependent on the user's preferred calendar system.\n *\n * A key use case for calculations on a date in an arbitrary calendar system is producing\n * a month-by-month calendar for display and user interaction. Again, this is a UI issue,\n * and use of this interface solely within a few methods of the UI layer may be justified.\n *\n * In any other part of the system, where a date must be manipulated in a calendar system\n * other than ISO, the use case will generally specify the calendar system to use.\n * For example, an application may need to calculate the next Islamic or Hebrew holiday\n * which may require manipulating the date.\n * This kind of use case can be handled as follows:\n *\n * * start from the ISO {@link LocalDate} being passed to the method\n * * convert the date to the alternate calendar system, which for this use case is known\n *   rather than arbitrary\n * * perform the calculation\n * * convert back to {@link LocalDate}\n *\n * Developers writing low-level frameworks or libraries should also avoid this interface.\n * Instead, one of the two general purpose access interfaces should be used.\n * Use {@link TemporalAccessor} if read-only access is required, or use {@link Temporal}\n * if read-write access is required.\n *\n * ### Specification for implementors\n *\n * This interface must be implemented with care to ensure other classes operate correctly.\n * All implementations that can be instantiated must be final, immutable and thread-safe.\n * Subclasses should be Serializable wherever possible.\n *\n * Additional calendar systems may be added to the system.\n * See {@link Chronology} for more details.\n *\n * In JDK 8, this is an interface with default methods.\n * Since there are no default methods in JDK 7, an abstract class is used.\n */\nexport class ChronoLocalDate extends Temporal {\n\n    isSupported(fieldOrUnit) {\n        if (fieldOrUnit instanceof ChronoField) {\n            return fieldOrUnit.isDateBased();\n        } else if (fieldOrUnit instanceof ChronoUnit) {\n            return fieldOrUnit.isDateBased();\n        }\n        return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n    }\n\n    query(query) {\n        if (query === TemporalQueries.chronology()) {\n            return this.chronology();\n        } else if (query === TemporalQueries.precision()) {\n            return ChronoUnit.DAYS;\n        } else if (query === TemporalQueries.localDate()) {\n            return LocalDate.ofEpochDay(this.toEpochDay());\n        } else if (query === TemporalQueries.localTime() || query === TemporalQueries.zone() ||\n                query === TemporalQueries.zoneId() || query === TemporalQueries.offset()) {\n            return null;\n        }\n        return super.query(query);\n    }\n\n    adjustInto(temporal) {\n        return temporal.with(ChronoField.EPOCH_DAY, this.toEpochDay());\n    }\n    /**\n     * Formats this date using the specified formatter.\n     *\n     * This date will be passed to the formatter to produce a string.\n     *\n     * The default implementation must behave as follows:\n     * <pre>\n     *  return formatter.format(this);\n     * </pre>\n     *\n     * @param {DateTimeFormatter} formatter  the formatter to use, not null\n     * @return {String} the formatted date string, not null\n     * @throws DateTimeException if an error occurs during printing\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        requireInstance(formatter, DateTimeFormatter, 'formatter');\n        return formatter.format(this);\n    }\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { MathUtil } from './MathUtil';\n\n/**\n * @private\n */\nexport class StringUtil {\n\n    /**\n     *\n     * @param {string} text\n     * @param {string} pattern\n     * @return {boolean}\n     */\n    static startsWith(text, pattern){\n        return text.indexOf(pattern) === 0;\n    }\n\n    /**\n     *\n     * @param {string} text\n     * @returns {number}\n     */\n    static hashCode(text) {\n        const len = text.length;\n        if (len === 0) {\n            return 0;\n        }\n\n        let hash = 0;\n        for (let i = 0; i < len; i++) {\n            const chr = text.charCodeAt(i);\n            hash = ((hash << 5) - hash) + chr;\n            hash |= 0; // Convert to 32bit integer\n        }\n        return MathUtil.smi(hash);\n    }\n}\n\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { abstractMethodFail } from './assert';\nimport { DateTimeException } from './errors';\n\nimport { StringUtil } from './StringUtil';\n\nimport { Instant } from './Instant';\n\nexport class ZoneId {\n    /**\n     * Gets the system default time-zone.\n     *\n     * @return {ZoneId} the zone ID, not null\n     */\n    static systemDefault() {\n        // Find implementation at {@link ZoneIdFactory}\n        throw new DateTimeException('not supported operation');\n    }\n\n    /**\n     * Gets the set of available zone IDs.\n     *\n     * This set includes the string form of all available region-based IDs.\n     * Offset-based zone IDs are not included in the returned set.\n     * The ID can be passed to {@link of} to create a {@link ZoneId}.\n     *\n     * The set of zone IDs can increase over time, although in a typical application\n     * the set of IDs is fixed. Each call to this method is thread-safe.\n     *\n     * @return {string[]} a modifiable copy of the set of zone IDs, not null\n     */\n    static getAvailableZoneIds() {\n        // Find implementation at {@link ZoneIdFactory}\n        throw new DateTimeException('not supported operation');\n    }\n\n    /**\n     * Obtains an instance of {@link ZoneId} from an ID ensuring that the\n     * ID is valid and available for use.\n     *\n     * This method parses the ID producing a {@link ZoneId} or {@link ZoneOffset}.\n     * A {@link ZoneOffset} is returned if the ID is 'Z', or starts with '+' or '-'.\n     * The result will always be a valid ID for which {@link ZoneRules} can be obtained.\n     *\n     * Parsing matches the zone ID step by step as follows.\n     *\n     * * If the zone ID equals 'Z', the result is {@link ZoneOffset.UTC}.\n     * * If the zone ID consists of a single letter, the zone ID is invalid\n     *   and {@link DateTimeException} is thrown.\n     * * If the zone ID starts with '+' or '-', the ID is parsed as a\n     *   {@link ZoneOffset} using {@link ZoneOffset#of}.\n     * * If the zone ID equals 'GMT', 'UTC' or 'UT' then the result is a {@link ZoneId}\n     *   with the same ID and rules equivalent to {@link ZoneOffset.UTC}.\n     * * If the zone ID starts with 'UTC+', 'UTC-', 'GMT+', 'GMT-', 'UT+' or 'UT-'\n     *   then the ID is a prefixed offset-based ID. The ID is split in two, with\n     *   a two or three letter prefix and a suffix starting with the sign.\n     *   The suffix is parsed as a {@link ZoneOffset}.\n     *   The result will be a {@link ZoneId} with the specified UTC/GMT/UT prefix\n     *   and the normalized offset ID as per {@link ZoneOffset#getId}.\n     *   The rules of the returned {@link ZoneId} will be equivalent to the\n     *   parsed {@link ZoneOffset}.\n     * * All other IDs are parsed as region-based zone IDs. Region IDs must\n     *   match the regular expression `[A-Za-z][A-Za-z0-9~/._+-]+`,\n     *   otherwise a {@link DateTimeException} is thrown. If the zone ID is not\n     *   in the configured set of IDs, {@link ZoneRulesException} is thrown.\n     *   The detailed format of the region ID depends on the group supplying the data.\n     *   The default set of data is supplied by the IANA Time Zone Database (TZDB).\n     *   This has region IDs of the form '{area}/{city}', such as 'Europe/Paris' or 'America/New_York'.\n     *   This is compatible with most IDs from {@link java.util.TimeZone}.\n     *\n     * @param {string} zoneId  the time-zone ID, not null\n     * @return {ZoneId} the zone ID, not null\n     * @throws DateTimeException if the zone ID has an invalid format\n     * @throws ZoneRulesException if the zone ID is a region ID that cannot be found\n     */\n    static of(zoneId) {\n        // Find implementation at {@link ZoneIdFactory}\n        throw new DateTimeException(`not supported operation${zoneId}`);\n    }\n\n    /**\n     * Obtains an instance of {@link ZoneId} wrapping an offset.\n     *\n     * If the prefix is 'GMT', 'UTC', or 'UT' a {@link ZoneId}\n     * with the prefix and the non-zero offset is returned.\n     * If the prefix is empty `''` the {@link ZoneOffset} is returned.\n     *\n     * @param {string} prefix  the time-zone ID, not null\n     * @param {ZoneOffset} offset  the offset, not null\n     * @return {ZoneId} the zone ID, not null\n     * @throws IllegalArgumentException if the prefix is not one of\n     *     'GMT', 'UTC', or 'UT', or ''\n     */\n    static ofOffset(prefix, offset) {\n        // Find implementation at {@link ZoneIdFactory}\n        throw new DateTimeException(`not supported operation${prefix}${offset}`);\n    }\n\n\n    /**\n     * Obtains an instance of {@link ZoneId} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link ZoneId}.\n     *\n     * The conversion will try to obtain the zone in a way that favours region-based\n     * zones over offset-based zones using {@link TemporalQueries#zone}.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used in queries via method reference, {@link ZoneId::from}.\n     *\n     * @param {!TemporalAccessor} temporal - the temporal object to convert, not null\n     * @return {ZoneId} the zone ID, not null\n     * @throws DateTimeException if unable to convert to a {@link ZoneId}\n     */\n    static from(temporal) {\n        // Find implementation at {@link ZoneIdFactory}\n        throw new DateTimeException(`not supported operation${temporal}`);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the unique time-zone ID.\n     *\n     * This ID uniquely defines this object.\n     * The format of an offset based ID is defined by {@link ZoneOffset#getId}.\n     *\n     * @return {String} the time-zone unique ID, not null\n     */\n    id(){\n        abstractMethodFail('ZoneId.id');\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the time-zone rules for this ID allowing calculations to be performed.\n     *\n     * The rules provide the functionality associated with a time-zone,\n     * such as finding the offset for a given instant or local date-time.\n     *\n     * A time-zone can be invalid if it is deserialized in a Java Runtime which\n     * does not have the same rules loaded as the Java Runtime that stored it.\n     * In this case, calling this method will throw a {@link ZoneRulesException}.\n     *\n     * The rules are supplied by {@link ZoneRulesProvider}. An advanced provider may\n     * support dynamic updates to the rules without restarting the Java Runtime.\n     * If so, then the result of this method may change over time.\n     * Each individual call will be still remain thread-safe.\n     *\n     * {@link ZoneOffset} will always return a set of rules where the offset never changes.\n     *\n     * @return {!ZoneRules} the rules, not null\n     * @throws ZoneRulesException if no rules are available for this ID\n     */\n    rules(){\n        abstractMethodFail('ZoneId.rules');\n    }\n\n    /**\n      * Normalizes the time-zone ID, returning a {@link ZoneOffset} where possible.\n      *\n      * The returns a normalized {@link ZoneId} that can be used in place of this ID.\n      * The result will have {@link ZoneRules} equivalent to those returned by this object,\n      * however the ID returned by {@link getId} may be different.\n      *\n      * The normalization checks if the rules of this {@link ZoneId} have a fixed offset.\n      * If they do, then the {@link ZoneOffset} equal to that offset is returned.\n      * Otherwise `this` is returned.\n      *\n      * @return {ZoneId} the time-zone unique ID, not null\n      */\n    normalized() {\n        const rules = this.rules();\n        if (rules.isFixedOffset()) {\n            return rules.offset(Instant.EPOCH);\n        }\n        //try {\n        //} catch (ZoneRulesException ex) {\n        //    // ignore invalid objects\n        //}\n        return this;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n      * Checks if this time-zone ID is equal to another time-zone ID.\n      *\n      * The comparison is based on the ID.\n      *\n      * @param {*} other  the object to check, null returns false\n      * @return {boolean} true if this is equal to the other time-zone ID\n      */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof ZoneId) {\n            return this.id() === other.id();\n        }\n        return false;\n    }\n\n    /**\n      * A hash code for this time-zone ID.\n      *\n      * @return {number} a suitable hash code\n      */\n    hashCode() {\n        return StringUtil.hashCode(this.id());\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n      * Outputs this zone as a string, using the ID.\n      *\n      * @return {string} a string representation of this time-zone ID, not null\n      */\n    toString() {\n        return this.id();\n    }\n\n    /**\n     * toJSON() use by JSON.stringify\n     * delegates to toString()\n     *\n     * @return {string}\n     */\n    toJSON() {\n        return this.toString();\n    }\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull, abstractMethodFail } from '../assert';\n\nimport { Duration } from '../Duration';\nimport { Instant } from '../Instant';\n\nexport class ZoneRules {\n\n    /**\n     * Obtains an instance of {@link ZoneRules} that always uses the same offset.\n     *\n     * The returned rules always have the same offset.\n     *\n     * @param {ZoneOffset} offset - the offset, not null\n     * @return {ZoneRules} the zone rules, not null\n     */\n    static of(offset) {\n        requireNonNull(offset, 'offset');\n        return new Fixed(offset);\n    }\n\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks of the zone rules are fixed, such that the offset never varies.\n     *\n     * @return {boolean} true if the time-zone is fixed and the offset never changes\n     */\n    isFixedOffset(){\n        abstractMethodFail('ZoneRules.isFixedOffset');\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     *\n     * @param instantOrLocalDateTime\n     * @returns {ZoneOffset}\n     */\n    offset(instantOrLocalDateTime){\n        if(instantOrLocalDateTime instanceof Instant){\n            return this.offsetOfInstant(instantOrLocalDateTime);\n        } else {\n            return this.offsetOfLocalDateTime(instantOrLocalDateTime);\n        }\n    }\n\n    /**\n     * Gets the offset applicable at the specified instant in these rules.\n     *\n     * The mapping from an instant to an offset is simple, there is only\n     * one valid offset for each instant.\n     * This method returns that offset.\n     *\n     * @param {Instant} instant - the instant to find the offset for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffset} the offset, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    offsetOfInstant(instant){\n        abstractMethodFail('ZoneRules.offsetInstant');\n    }\n\n    /**\n     * Gets the offset applicable at the specified epochMilli in these rules.\n     *\n     * The method is for javascript performance optimisation.\n     *\n     * @param {number} epochMilli - the epoch millisecond to find the offset for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffset} the offset, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    offsetOfEpochMilli(epochMilli){\n        abstractMethodFail('ZoneRules.offsetOfEpochMilli');\n    }\n\n\n    /**\n     * Gets a suitable offset for the specified local date-time in these rules.\n     *\n     * The mapping from a local date-time to an offset is not straightforward.\n     * There are three cases:\n     *\n     * * Normal, with one valid offset. For the vast majority of the year, the normal\n     *   case applies, where there is a single valid offset for the local date-time.\n     * * Gap, with zero valid offsets. This is when clocks jump forward typically\n     *   due to the spring daylight savings change from \"winter\" to \"summer\".\n     *   In a gap there are local date-time values with no valid offset.\n     * * Overlap, with two valid offsets. This is when clocks are set back typically\n     *   due to the autumn daylight savings change from \"summer\" to \"winter\".\n     *   In an overlap there are local date-time values with two valid offsets.\n     *\n     * Thus, for any given local date-time there can be zero, one or two valid offsets.\n     * This method returns the single offset in the Normal case, and in the Gap or Overlap\n     * case it returns the offset before the transition.\n     *\n     * Since, in the case of Gap and Overlap, the offset returned is a \"best\" value, rather\n     * than the \"correct\" value, it should be treated with care. Applications that care\n     * about the correct offset should use a combination of this method,\n     * {@link getValidOffsets} and {@link getTransition}.\n     *\n     * @param {LocalDateTime} localDateTime - the local date-time to query, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffset} the best available offset for the local date-time, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    offsetOfLocalDateTime(localDateTime){\n        abstractMethodFail('ZoneRules.offsetLocalDateTime');\n    }\n\n    /**\n     * Gets the offset applicable at the specified local date-time in these rules.\n     *\n     * The mapping from a local date-time to an offset is not straightforward.\n     * There are three cases:\n     *\n     * * Normal, with one valid offset. For the vast majority of the year, the normal\n     *   case applies, where there is a single valid offset for the local date-time.\n     * * Gap, with zero valid offsets. This is when clocks jump forward typically\n     *   due to the spring daylight savings change from \"winter\" to \"summer\".\n     *   In a gap there are local date-time values with no valid offset.\n     * * Overlap, with two valid offsets. This is when clocks are set back typically\n     *   due to the autumn daylight savings change from \"summer\" to \"winter\".\n     *   In an overlap there are local date-time values with two valid offsets.\n     *\n     * Thus, for any given local date-time there can be zero, one or two valid offsets.\n     * This method returns that list of valid offsets, which is a list of size 0, 1 or 2.\n     * In the case where there are two offsets, the earlier offset is returned at index 0\n     * and the later offset at index 1.\n     *\n     * There are various ways to handle the conversion from a {@link LocalDateTime}.\n     * One technique, using this method, would be:\n     * <pre>\n     *  List<ZoneOffset> validOffsets = rules.getOffset(localDT);\n     *  if (validOffsets.size() == 1) {\n     *    // Normal case: only one valid offset\n     *    zoneOffset = validOffsets.get(0);\n     *  } else {\n     *    // Gap or Overlap: determine what to do from transition (which will be non-null)\n     *    ZoneOffsetTransition trans = rules.getTransition(localDT);\n     *  }\n     * </pre>\n     *\n     * In theory, it is possible for there to be more than two valid offsets.\n     * This would happen if clocks to be put back more than once in quick succession.\n     * This has never happened in the history of time-zones and thus has no special handling.\n     * However, if it were to happen, then the list would return more than 2 entries.\n     *\n     * @param {LocalDateTime} localDateTime - the local date-time to query for valid offsets, not null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffset[]} the list of valid offsets, may be immutable, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    validOffsets(localDateTime){\n        abstractMethodFail('ZoneRules.validOffsets');\n    }\n\n    /**\n     * Gets the offset transition applicable at the specified local date-time in these rules.\n     *\n     * The mapping from a local date-time to an offset is not straightforward.\n     * There are three cases:\n     *\n     * * Normal, with one valid offset. For the vast majority of the year, the normal\n     *   case applies, where there is a single valid offset for the local date-time.\n     * * Gap, with zero valid offsets. This is when clocks jump forward typically\n     *   due to the spring daylight savings change from \"winter\" to \"summer\".\n     *   In a gap there are local date-time values with no valid offset.\n     * * Overlap, with two valid offsets. This is when clocks are set back typically\n     *   due to the autumn daylight savings change from \"summer\" to \"winter\".\n     *   In an overlap there are local date-time values with two valid offsets.\n     *\n     * A transition is used to model the cases of a Gap or Overlap.\n     * The Normal case will return null.\n     *\n     * There are various ways to handle the conversion from a {@link LocalDateTime}.\n     * One technique, using this method, would be:\n     * <pre>\n     *  ZoneOffsetTransition trans = rules.getTransition(localDT);\n     *  if (trans != null) {\n     *    // Gap or Overlap: determine what to do from transition\n     *  } else {\n     *    // Normal case: only one valid offset\n     *    zoneOffset = rule.getOffset(localDT);\n     *  }\n     * </pre>\n     *\n     * @param {LocalDateTime} localDateTime  the local date-time to query for offset transition, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffsetTransition} the offset transition, null if the local date-time is not in transition\n     */\n    // eslint-disable-next-line no-unused-vars\n    transition(localDateTime){\n        abstractMethodFail('ZoneRules.transition');\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the standard offset for the specified instant in this zone.\n     *\n     * This provides access to historic information on how the standard offset\n     * has changed over time.\n     * The standard offset is the offset before any daylight saving time is applied.\n     * This is typically the offset applicable during winter.\n     *\n     * @param {Instant} instant - the instant to find the offset information for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffset} the standard offset, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    standardOffset(instant){\n        abstractMethodFail('ZoneRules.standardOffset');\n    }\n\n    /**\n     * Gets the amount of daylight savings in use for the specified instant in this zone.\n     *\n     * This provides access to historic information on how the amount of daylight\n     * savings has changed over time.\n     * This is the difference between the standard offset and the actual offset.\n     * Typically the amount is zero during winter and one hour during summer.\n     * Time-zones are second-based, so the nanosecond part of the duration will be zero.\n     *\n     * @param {Instant} instant - the instant to find the daylight savings for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {Duration} the difference between the standard and actual offset, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    daylightSavings(instant){\n        abstractMethodFail('ZoneRules.daylightSavings');\n        //    default {\n        //        ZoneOffset standardOffset = getStandardOffset(instant);\n        //        ZoneOffset actualOffset = getOffset(instant);\n        //        return actualOffset.toDuration().minus(standardOffset.toDuration()).normalized();\n        //    }\n    }\n\n    /**\n     * Checks if the specified instant is in daylight savings.\n     *\n     * This checks if the standard and actual offsets are the same at the specified instant.\n     *\n     * @param {Instant} instant - the instant to find the offset information for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {boolean} the standard offset, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    isDaylightSavings(instant) {\n        abstractMethodFail('ZoneRules.isDaylightSavings');\n        //    default {\n        //        return (getStandardOffset(instant).equals(getOffset(instant)) == false);\n        //    }\n    }\n\n    /**\n     * Checks if the offset date-time is valid for these rules.\n     *\n     * To be valid, the local date-time must not be in a gap and the offset\n     * must match the valid offsets.\n     *\n     * @param {LocalDateTime} localDateTime - the date-time to check, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @param {ZoneOffset} offset - the offset to check, null returns false\n     * @return {boolean} true if the offset date-time is valid for these rules\n     */\n    // eslint-disable-next-line no-unused-vars\n    isValidOffset(localDateTime, offset){\n        abstractMethodFail('ZoneRules.isValidOffset');\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the next transition after the specified instant.\n     *\n     * This returns details of the next transition after the specified instant.\n     * For example, if the instant represents a point where \"Summer\" daylight savings time\n     * applies, then the method will return the transition to the next \"Winter\" time.\n     *\n     * @param {Instant} instant - the instant to get the next transition after, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffsetTransition} the next transition after the specified instant, null if this is after the last transition\n     */\n    // eslint-disable-next-line no-unused-vars\n    nextTransition(instant){\n        abstractMethodFail('ZoneRules.nextTransition');\n    }\n\n    /**\n     * Gets the previous transition before the specified instant.\n     *\n     * This returns details of the previous transition after the specified instant.\n     * For example, if the instant represents a point where \"summer\" daylight saving time\n     * applies, then the method will return the transition from the previous \"winter\" time.\n     *\n     * @param {Instant} instant - the instant to get the previous transition after, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffsetTransition} the previous transition after the specified instant, null if this is before the first transition\n     */\n    // eslint-disable-next-line no-unused-vars\n    previousTransition(instant){\n        abstractMethodFail('ZoneRules.previousTransition');\n    }\n\n    /**\n     * Gets the complete list of fully defined transitions.\n     *\n     * The complete set of transitions for this rules instance is defined by this method\n     * and {@link getTransitionRules}. This method returns those transitions that have\n     * been fully defined. These are typically historical, but may be in the future.\n     *\n     * The list will be empty for fixed offset rules and for any time-zone where there has\n     * only ever been a single offset. The list will also be empty if the transition rules are unknown.\n     *\n     * @return {ZoneOffsetTransition[]} an immutable list of fully defined transitions, not null\n     */\n    transitions(){\n        abstractMethodFail('ZoneRules.transitions');\n    }\n\n    /**\n     * Gets the list of transition rules for years beyond those defined in the transition list.\n     *\n     * The complete set of transitions for this rules instance is defined by this method\n     * and {@link getTransitions}. This method returns instances of {@link ZoneOffsetTransitionRule}\n     * that define an algorithm for when transitions will occur.\n     *\n     * For any given {@link ZoneRules}, this list contains the transition rules for years\n     * beyond those years that have been fully defined. These rules typically refer to future\n     * daylight saving time rule changes.\n     *\n     * If the zone defines daylight savings into the future, then the list will normally\n     * be of size two and hold information about entering and exiting daylight savings.\n     * If the zone does not have daylight savings, or information about future changes\n     * is uncertain, then the list will be empty.\n     *\n     * The list will be empty for fixed offset rules and for any time-zone where there is no\n     * daylight saving time. The list will also be empty if the transition rules are unknown.\n     *\n     * @return {ZoneOffsetTransitionRule[]} an immutable list of transition rules, not null\n     */\n    transitionRules(){\n        abstractMethodFail('ZoneRules.transitionRules');\n    }\n\n    toString(){\n        abstractMethodFail('ZoneRules.toString');\n    }\n\n    /**\n     * toJSON() use by JSON.stringify\n     * delegates to toString()\n     *\n     * @return {string}\n     */\n    toJSON() {\n        return this.toString();\n    }\n}\n\n\nclass Fixed extends ZoneRules{\n    /**\n     *\n     * @param {ZoneOffset} offset\n     * @private\n     */\n    constructor(offset){\n        super();\n        this._offset = offset;\n    }\n\n    isFixedOffset(){\n        return true;\n    }\n\n    offsetOfInstant(){\n        return this._offset;\n    }\n\n    offsetOfEpochMilli(){\n        return this._offset;\n    }\n\n    offsetOfLocalDateTime(){\n        return this._offset;\n    }\n\n    validOffsets(){\n        return [this._offset];\n    }\n\n    transition(){\n        return null;\n    }\n\n    standardOffset(){\n        return this._offset;\n    }\n\n    daylightSavings(){\n        return Duration.ZERO;\n    }\n\n    isDaylightSavings(){\n        return false;\n    }\n\n    /**\n     *\n     * @param {LocalDateTime} localDateTime\n     * @param {ZoneOffset} offset\n     * @return {boolean}\n     */\n    isValidOffset(localDateTime, offset) {\n        return this._offset.equals(offset);\n    }\n\n    nextTransition(){\n        return null;\n    }\n\n    previousTransition(){\n        return null;\n    }\n\n    transitions(){\n        return [];\n    }\n\n    transitionRules(){\n        return [];\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     *\n     * @param {*} other\n     * @returns {boolean}\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof Fixed) {\n            return this._offset.equals(other._offset);\n        }\n        return false;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return `FixedRules:${this._offset.toString()}`;\n    }\n\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from './assert';\nimport { DateTimeException } from './errors';\nimport { MathUtil } from './MathUtil';\n\nimport { LocalTime } from './LocalTime';\nimport { ZoneId } from './ZoneId';\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { TemporalQueries } from './temporal/TemporalQueries';\n\nimport { ZoneRules } from './zone/ZoneRules';\n\nconst SECONDS_CACHE = {};\nconst ID_CACHE = {};\n\n/**\n *\n * ### Static properties of Class {@link LocalDate}\n *\n * ZoneOffset.MAX_SECONDS = 18 * LocalTime.SECONDS_PER_HOUR;\n *\n * ZoneOffset.UTC = ZoneOffset.ofTotalSeconds(0);\n *\n * ZoneOffset.MIN = ZoneOffset.ofTotalSeconds(-ZoneOffset.MAX_SECONDS);\n *\n * ZoneOffset.MAX = ZoneOffset.ofTotalSeconds(ZoneOffset.MAX_SECONDS);\n *\n */\nexport class ZoneOffset extends ZoneId {\n    /**\n     *\n     * @param {number} totalSeconds\n     * @private\n     */\n    constructor(totalSeconds){\n        super();\n        ZoneOffset._validateTotalSeconds(totalSeconds);\n        this._totalSeconds = MathUtil.safeToInt(totalSeconds);\n        this._rules = ZoneRules.of(this);\n        this._id = ZoneOffset._buildId(totalSeconds);\n    }\n\n    /**\n     *\n     * @returns {number}\n     */\n    totalSeconds() {\n        return this._totalSeconds;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    id() {\n        return this._id;\n    }\n\n    /**\n     *\n     * @param {number} totalSeconds\n     * @returns {string}\n     */\n    static _buildId(totalSeconds) {\n        if (totalSeconds === 0) {\n            return 'Z';\n        } else {\n            const absTotalSeconds = Math.abs(totalSeconds);\n            const absHours = MathUtil.intDiv(absTotalSeconds, LocalTime.SECONDS_PER_HOUR);\n            const absMinutes = MathUtil.intMod(MathUtil.intDiv(absTotalSeconds, LocalTime.SECONDS_PER_MINUTE), LocalTime.MINUTES_PER_HOUR);\n            let buf = `${totalSeconds < 0 ? '-' : '+'\n            }${absHours < 10 ? '0' : ''}${absHours\n            }${absMinutes < 10 ? ':0' : ':'}${absMinutes}`;\n            const absSeconds = MathUtil.intMod(absTotalSeconds, LocalTime.SECONDS_PER_MINUTE);\n            if (absSeconds !== 0) {\n                buf += (absSeconds < 10 ? ':0' : ':') + (absSeconds);\n            }\n            return buf;\n        }\n    }\n\n\n    /**\n     *\n     * @param {number} totalSeconds\n     * @private\n     */\n    static _validateTotalSeconds(totalSeconds){\n        if (Math.abs(totalSeconds) > ZoneOffset.MAX_SECONDS) {\n            throw new DateTimeException('Zone offset not in valid range: -18:00 to +18:00');\n        }\n    }\n\n    /**\n     *\n     * @param {number} hours\n     * @param {number} minutes\n     * @param {number} seconds\n     * @private\n     */\n    static _validate(hours, minutes, seconds) {\n        if (hours < -18 || hours > 18) {\n            throw new DateTimeException(`Zone offset hours not in valid range: value ${hours \n            } is not in the range -18 to 18`);\n        }\n        if (hours > 0) {\n            if (minutes < 0 || seconds < 0) {\n                throw new DateTimeException('Zone offset minutes and seconds must be positive because hours is positive');\n            }\n        } else if (hours < 0) {\n            if (minutes > 0 || seconds > 0) {\n                throw new DateTimeException('Zone offset minutes and seconds must be negative because hours is negative');\n            }\n        } else if ((minutes > 0 && seconds < 0) || (minutes < 0 && seconds > 0)) {\n            throw new DateTimeException('Zone offset minutes and seconds must have the same sign');\n        }\n        if (Math.abs(minutes) > 59) {\n            throw new DateTimeException(`Zone offset minutes not in valid range: abs(value) ${ \n                Math.abs(minutes)} is not in the range 0 to 59`);\n        }\n        if (Math.abs(seconds) > 59) {\n            throw new DateTimeException(`Zone offset seconds not in valid range: abs(value) ${ \n                Math.abs(seconds)} is not in the range 0 to 59`);\n        }\n        if (Math.abs(hours) === 18 && (Math.abs(minutes) > 0 || Math.abs(seconds) > 0)) {\n            throw new DateTimeException('Zone offset not in valid range: -18:00 to +18:00');\n        }\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link ZoneOffset} using the ID.\n     *\n     * This method parses the string ID of a {@link ZoneOffset} to\n     * return an instance. The parsing accepts all the formats generated by\n     * {@link getId}, plus some additional formats:\n     *\n     * * {@link Z} - for UTC\n     * * `+h`\n     * * `+hh`\n     * * `+hh:mm`\n     * * `-hh:mm`\n     * * `+hhmm`\n     * * `-hhmm`\n     * * `+hh:mm:ss`\n     * * `-hh:mm:ss`\n     * * `+hhmmss`\n     * * `-hhmmss`\n     *\n     * Note that &plusmn; means either the plus or minus symbol.\n     *\n     * The ID of the returned offset will be normalized to one of the formats\n     * described by {@link getId}.\n     *\n     * The maximum supported range is from +18:00 to -18:00 inclusive.\n     *\n     * @param {string} offsetId  the offset ID, not null\n     * @return {ZoneOffset} the zone-offset, not null\n     * @throws DateTimeException if the offset ID is invalid\n     */\n    static of(offsetId) {\n        requireNonNull(offsetId, 'offsetId');\n        // \"Z\" is always in the cache\n        const offset = ID_CACHE[offsetId];\n        if (offset != null) {\n            return offset;\n        }\n\n        // parse - +h, +hh, +hhmm, +hh:mm, +hhmmss, +hh:mm:ss\n        let hours, minutes, seconds;\n        switch (offsetId.length) {\n            case 2:\n                offsetId = `${offsetId[0]}0${offsetId[1]}`;  // fallthru\n            // eslint-disable-next-line no-fallthrough\n            case 3:\n                hours = ZoneOffset._parseNumber(offsetId, 1, false);\n                minutes = 0;\n                seconds = 0;\n                break;\n            case 5:\n                hours = ZoneOffset._parseNumber(offsetId, 1, false);\n                minutes = ZoneOffset._parseNumber(offsetId, 3, false);\n                seconds = 0;\n                break;\n            case 6:\n                hours = ZoneOffset._parseNumber(offsetId, 1, false);\n                minutes = ZoneOffset._parseNumber(offsetId, 4, true);\n                seconds = 0;\n                break;\n            case 7:\n                hours = ZoneOffset._parseNumber(offsetId, 1, false);\n                minutes = ZoneOffset._parseNumber(offsetId, 3, false);\n                seconds = ZoneOffset._parseNumber(offsetId, 5, false);\n                break;\n            case 9:\n                hours = ZoneOffset._parseNumber(offsetId, 1, false);\n                minutes = ZoneOffset._parseNumber(offsetId, 4, true);\n                seconds = ZoneOffset._parseNumber(offsetId, 7, true);\n                break;\n            default:\n                throw new DateTimeException(`Invalid ID for ZoneOffset, invalid format: ${offsetId}`);\n        }\n        const first = offsetId[0];\n        if (first !== '+' && first !== '-') {\n            throw new DateTimeException(`Invalid ID for ZoneOffset, plus/minus not found when expected: ${offsetId}`);\n        }\n        if (first === '-') {\n            return ZoneOffset.ofHoursMinutesSeconds(-hours, -minutes, -seconds);\n        } else {\n            return ZoneOffset.ofHoursMinutesSeconds(hours, minutes, seconds);\n        }\n    }\n\n    /**\n     * Parse a two digit zero-prefixed number.\n     *\n     * @param {string} offsetId - the offset ID, not null\n     * @param {number} pos - the position to parse, valid\n     * @param {boolean} precededByColon - should this number be prefixed by a precededByColon\n     * @return {number} the parsed number, from 0 to 99\n     */\n    static _parseNumber(offsetId, pos, precededByColon) {\n        if (precededByColon && offsetId[pos - 1] !== ':') {\n            throw new DateTimeException(`Invalid ID for ZoneOffset, colon not found when expected: ${offsetId}`);\n        }\n        const ch1 = offsetId[pos];\n        const ch2 = offsetId[pos + 1];\n        if (ch1 < '0' || ch1 > '9' || ch2 < '0' || ch2 > '9') {\n            throw new DateTimeException(`Invalid ID for ZoneOffset, non numeric characters found: ${offsetId}`);\n        }\n        return (ch1.charCodeAt(0) - 48) * 10 + (ch2.charCodeAt(0) - 48);\n    }\n\n    /**\n     *\n     * @param {number} hours\n     * @returns {ZoneOffset}\n     */\n    static ofHours(hours) {\n        return ZoneOffset.ofHoursMinutesSeconds(hours, 0, 0);\n    }\n\n    /**\n     *\n     * @param {number} hours\n     * @param {number} minutes\n     * @returns {ZoneOffset}\n     */\n    static ofHoursMinutes(hours, minutes) {\n        return ZoneOffset.ofHoursMinutesSeconds(hours, minutes, 0);\n    }\n\n    /**\n     *\n     * @param {number} hours\n     * @param {number} minutes\n     * @param {number} seconds\n     * @returns {ZoneOffset}\n     */\n    static ofHoursMinutesSeconds(hours, minutes, seconds) {\n        ZoneOffset._validate(hours, minutes, seconds);\n        const totalSeconds = hours * LocalTime.SECONDS_PER_HOUR + minutes * LocalTime.SECONDS_PER_MINUTE + seconds;\n        return ZoneOffset.ofTotalSeconds(totalSeconds);\n    }\n\n    /**\n     *\n     * @param {number} totalMinutes\n     * @returns {ZoneOffset}\n     */\n    static ofTotalMinutes(totalMinutes) {\n        const totalSeconds = totalMinutes * LocalTime.SECONDS_PER_MINUTE;\n        return ZoneOffset.ofTotalSeconds(totalSeconds);\n    }\n\n    /**\n     *\n     * @param {number} totalSeconds\n     * @returns {ZoneOffset}\n     */\n    static ofTotalSeconds(totalSeconds) {\n        if (totalSeconds % (15 * LocalTime.SECONDS_PER_MINUTE) === 0) {\n            const totalSecs = totalSeconds;\n            let result = SECONDS_CACHE[totalSecs];\n            if (result == null) {\n                result = new ZoneOffset(totalSeconds);\n                SECONDS_CACHE[totalSecs] = result;\n                ID_CACHE[result.id()] = result;\n            }\n            return result;\n        } else {\n            return new ZoneOffset(totalSeconds);\n        }\n    }\n\n    /**\n     * Gets the associated time-zone rules.\n     *\n     * The rules will always return this offset when queried.\n     * The implementation class is immutable, thread-safe and serializable.\n     *\n     * @return {ZoneRules} the rules, not null\n     */\n    rules() {\n        return this._rules;\n    }\n\n    /**\n      * Gets the value of the specified field from this offset as an `int`.\n      *\n      * This queries this offset for the value for the specified field.\n      * The returned value will always be within the valid range of values for the field.\n      * If it is not possible to return the value, because the field is not supported\n      * or for some other reason, an exception is thrown.\n      *\n      * If the field is a {@link ChronoField} then the query is implemented here.\n      * The {@link OFFSET_SECONDS} field returns the value of the offset.\n      * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n      *\n      * If the field is not a {@link ChronoField}, then the result of this method\n      * is obtained by invoking {@link TemporalField.getFrom}\n      * passing `this` as the argument. Whether the value can be obtained,\n      * and what the value represents, is determined by the field.\n      *\n      * @param {TemporalField} field - the field to get, not null\n      * @return {number} the value for the field\n      * @throws DateTimeException if a value for the field cannot be obtained\n      * @throws ArithmeticException if numeric overflow occurs\n      */\n    get(field) {\n        return this.getLong(field);\n    }\n\n    /**\n      * Gets the value of the specified field from this offset as a `long`.\n      *\n      * This queries this offset for the value for the specified field.\n      * If it is not possible to return the value, because the field is not supported\n      * or for some other reason, an exception is thrown.\n      *\n      * If the field is a {@link ChronoField} then the query is implemented here.\n      * The {@link OFFSET_SECONDS} field returns the value of the offset.\n      * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n      *\n      * If the field is not a {@link ChronoField}, then the result of this method\n      * is obtained by invoking {@link TemporalField.getFrom}\n      * passing `this` as the argument. Whether the value can be obtained,\n      * and what the value represents, is determined by the field.\n      *\n      * @param {TemporalField} field - the field to get, not null\n      * @return {number} the value for the field\n      * @throws DateTimeException if a value for the field cannot be obtained\n      * @throws ArithmeticException if numeric overflow occurs\n      */\n    getLong(field) {\n        if (field === ChronoField.OFFSET_SECONDS) {\n            return this._totalSeconds;\n        } else if (field instanceof ChronoField) {\n            throw new DateTimeException(`Unsupported field: ${field}`);\n        }\n        return field.getFrom(this);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n      * Queries this offset using the specified query.\n      *\n      * This queries this offset using the specified query strategy object.\n      * The {@link TemporalQuery} object defines the logic to be used to\n      * obtain the result. Read the documentation of the query to understand\n      * what the result of this method will be.\n      *\n      * The result of this method is obtained by invoking the\n      * {@link TemporalQuery#queryFrom} method on the\n      * specified query passing `this` as the argument.\n      *\n      * @param {TemporalQuery} query - the query to invoke, not null\n      * @return {*} the query result, null may be returned (defined by the query)\n      * @throws DateTimeException if unable to query (defined by the query)\n      * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n      */\n    query(query) {\n        requireNonNull(query, 'query');\n        if (query === TemporalQueries.offset() || query === TemporalQueries.zone()) {\n            return this;\n        } else if (query === TemporalQueries.localDate() || query === TemporalQueries.localTime() ||\n                 query === TemporalQueries.precision() || query === TemporalQueries.chronology() || query === TemporalQueries.zoneId()) {\n            return null;\n        }\n        return query.queryFrom(this);\n    }\n\n    /**\n      * Adjusts the specified temporal object to have the same offset as this object.\n      *\n      * This returns a temporal object of the same observable type as the input\n      * with the offset changed to be the same as this.\n      *\n      * The adjustment is equivalent to using {@link Temporal#with}\n      * passing {@link ChronoField#OFFSET_SECONDS} as the field.\n      *\n      * In most cases, it is clearer to reverse the calling pattern by using\n      * {@link Temporal#with}:\n      * <pre>\n      *   // these two lines are equivalent, but the second approach is recommended\n      *   temporal = thisOffset.adjustInto(temporal);\n      *   temporal = temporal.with(thisOffset);\n      * </pre>\n      *\n      * This instance is immutable and unaffected by this method call.\n      *\n      * @param {Temporal} temporal - the target object to be adjusted, not null\n      * @return {Temporal} the adjusted object, not null\n      * @throws DateTimeException if unable to make the adjustment\n      * @throws ArithmeticException if numeric overflow occurs\n      */\n    adjustInto(temporal) {\n        return temporal.with(ChronoField.OFFSET_SECONDS, this._totalSeconds);\n    }\n\n    /**\n     * Compares this offset to another offset in descending order.\n     *\n     * The offsets are compared in the order that they occur for the same time\n     * of day around the world. Thus, an offset of `+10:00` comes before an\n     * offset of `+09:00` and so on down to `-18:00`.\n     *\n     * The comparison is \"consistent with equals\", as defined by {@link Comparable}.\n     *\n     * @param {!ZoneOffset} other - the other date to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     * @throws NullPointerException if {@link other} is null\n     */\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        return other._totalSeconds - this._totalSeconds;\n    }\n\n\n    /**\n     * Checks if this offset is equal to another offset.\n     *\n     * The comparison is based on the amount of the offset in seconds.\n     * This is equivalent to a comparison by ID.\n     *\n     * @param {*} obj - the object to check, null returns false\n     * @return {boolean} true if this is equal to the other offset\n     */\n    equals(obj) {\n        if (this === obj) {\n            return true;\n        }\n        if (obj instanceof ZoneOffset) {\n            return this._totalSeconds === obj._totalSeconds;\n        }\n        return false;\n    }\n\n    /**\n     * @return {number}\n     */\n    hashCode(){\n        return this._totalSeconds;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString(){\n        return this._id;\n    }\n}\n\nexport function _init() {\n    ZoneOffset.MAX_SECONDS = 18 * LocalTime.SECONDS_PER_HOUR;\n    ZoneOffset.UTC = ZoneOffset.ofTotalSeconds(0);\n    ZoneOffset.MIN = ZoneOffset.ofTotalSeconds(-ZoneOffset.MAX_SECONDS);\n    ZoneOffset.MAX = ZoneOffset.ofTotalSeconds(ZoneOffset.MAX_SECONDS);\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from '../assert';\nimport { DateTimeException } from '../errors';\nimport { MathUtil } from '../MathUtil';\n\nimport { EnumMap } from './EnumMap';\nimport { ResolverStyle } from './ResolverStyle';\n\nimport { IsoChronology } from '../chrono/IsoChronology';\nimport { ChronoLocalDate } from '../chrono/ChronoLocalDate';\nimport { ChronoField } from '../temporal/ChronoField';\nimport { TemporalAccessor } from '../temporal/TemporalAccessor';\nimport { TemporalQueries } from '../temporal/TemporalQueries';\n\nimport { LocalTime } from '../LocalTime';\nimport { LocalDate } from '../LocalDate';\nimport { Period } from '../Period';\n\nimport { ZoneOffset } from '../ZoneOffset';\n\n/**\n * Builder that can holds date and time fields and related date and time objects.\n *\n * The builder is used to hold onto different elements of date and time.\n * It is designed as two separate maps:\n *\n * * from {@link TemporalField} to `long` value, where the value may be\n *   outside the valid range for the field\n * * from {@link Class} to {@link TemporalAccessor}, holding larger scale objects\n *   like {@link LocalDateTime}.\n *\n *   @private\n */\nexport class DateTimeBuilder extends TemporalAccessor {\n\n    /**\n     * Creates a new instance of the builder with a single field-value.\n     *\n     * This is equivalent to using {@link addFieldValue} on an empty builder.\n     *\n     * @param {TemporalField} field - the field to add, not null\n     * @param {number} value - the value to add, not null\n     * @return {DateTimeBuilder}\n     */\n    static create(field, value) {\n        const dtb = new DateTimeBuilder();\n        dtb._addFieldValue(field, value);\n        return dtb;\n    }\n\n\n    constructor(){\n        super();\n\n        /**\n         * The map of other fields.\n         */\n        this.fieldValues = new EnumMap();\n        /**\n         * The chronology.\n         */\n        this.chrono = null;\n        /**\n         * The zone.\n         */\n        this.zone = null;\n        /**\n         * The date.\n         */\n        this.date = null;\n        /**\n         * The time.\n         */\n        this.time = null;\n        /**\n         * The leap second flag.\n         */\n        this.leapSecond = false;\n        /**\n         * The excess days.\n         */\n        this.excessDays = null;\n    }\n\n    /**\n     *\n     * @param {TemporalField} field\n     * @return {Number} field value\n     */\n    getFieldValue0(field) {\n        return this.fieldValues.get(field);\n    }\n\n    /**\n     * Adds a field-value pair to the builder.\n     *\n     * This adds a field to the builder.\n     * If the field is not already present, then the field-value pair is added to the map.\n     * If the field is already present and it has the same value as that specified, no action occurs.\n     * If the field is already present and it has a different value to that specified, then\n     * an exception is thrown.\n     *\n     * @param {TemporalField} field - the field to add, not null\n     * @param {Number} value - the value to add, not null\n     * @return {DateTimeBuilder}, this for method chaining\n     * @throws DateTimeException if the field is already present with a different value\n     */\n    _addFieldValue(field, value) {\n        requireNonNull(field, 'field');\n        const old = this.getFieldValue0(field);  // check first for better error message\n        if (old != null && old !== value) {\n            throw new DateTimeException(`Conflict found: ${field} ${old} differs from ${field} ${value}: ${this}`);\n        }\n        return this._putFieldValue0(field, value);\n    }\n\n    /**\n     * @param {TemporalField} field\n     * @param {Number} value\n     * @return {DateTimeBuilder}, this for method chaining\n     */\n    _putFieldValue0(field, value) {\n        this.fieldValues.put(field, value);\n        return this;\n    }\n\n    /**\n     * Resolves the builder, evaluating the date and time.\n     *\n     * This examines the contents of the build.er and resolves it to produce the best\n     * available date and time, throwing an exception if a problem occurs.\n     * Calling this method changes the state of the builder.\n     *\n     * @param {ResolverStyle} resolverStyle - how to resolve\n     * @param {TemporalField[]} resolverFields\n     * @return {DateTimeBuilder} this, for method chaining\n     */\n    resolve(resolverStyle, resolverFields) {\n        if (resolverFields != null) {\n            this.fieldValues.retainAll(resolverFields);\n        }\n        // handle standard fields\n        // this._mergeInstantFields();\n        this._mergeDate(resolverStyle);\n        this._mergeTime(resolverStyle);\n        //if (resolveFields(resolverStyle)) {\n        //    mergeInstantFields();\n        //    mergeDate(resolverStyle);\n        //    mergeTime(resolverStyle);\n        //}\n        this._resolveTimeInferZeroes(resolverStyle);\n        //this._crossCheck();\n        if (this.excessDays != null && this.excessDays.isZero() === false && this.date != null && this.time != null) {\n            this.date = this.date.plus(this.excessDays);\n            this.excessDays = Period.ZERO;\n        }\n        //resolveFractional();\n        this._resolveInstant();\n        return this;\n    }\n\n    /**\n     *\n     * @param {ResolverStyle} resolverStyle\n     * @private\n     */\n    _mergeDate(resolverStyle) {\n        //if (this.chrono instanceof IsoChronology) {\n        this._checkDate(IsoChronology.INSTANCE.resolveDate(this.fieldValues, resolverStyle));\n        //} else {\n        //    if (this.fieldValues.containsKey(ChronoField.EPOCH_DAY)) {\n        //        this._checkDate(LocalDate.ofEpochDay(this.fieldValues.remove(ChronoField.EPOCH_DAY)));\n        //        return;\n        //    }\n        //}\n    }\n\n    /**\n     *\n     * @param {LocalDate} date\n     * @private\n     */\n    _checkDate(date) {\n        if (date != null) {\n            this._addObject(date);\n            for (const fieldName in this.fieldValues.keySet()) {\n                const field = ChronoField.byName(fieldName);\n                if (field) {\n                    if (this.fieldValues.get(field) !== undefined) { // undefined if \"removed\" in EnumMap\n                        if (field.isDateBased()) {\n                            let val1;\n                            try {\n                                val1 = date.getLong(field);\n                            } catch (ex) {\n                                if (ex instanceof DateTimeException) {\n                                    continue;\n                                } else {\n                                    throw ex;\n                                }\n                            }\n                            const val2 = this.fieldValues.get(field);\n                            if (val1 !== val2) {\n                                throw new DateTimeException(`Conflict found: Field ${field} ${val1} differs from ${field} ${val2} derived from ${date}`);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     *\n     * @param {ResolverStyle} resolverStyle\n     * @private\n     */\n    _mergeTime(resolverStyle) {\n        if (this.fieldValues.containsKey(ChronoField.CLOCK_HOUR_OF_DAY)) {\n            const ch = this.fieldValues.remove(ChronoField.CLOCK_HOUR_OF_DAY);\n            if (resolverStyle !== ResolverStyle.LENIENT) {\n                if (resolverStyle === ResolverStyle.SMART && ch === 0) {\n                    // ok\n                } else {\n                    ChronoField.CLOCK_HOUR_OF_DAY.checkValidValue(ch);\n                }\n            }\n            this._addFieldValue(ChronoField.HOUR_OF_DAY, ch === 24 ? 0 : ch);\n        }\n        if (this.fieldValues.containsKey(ChronoField.CLOCK_HOUR_OF_AMPM)) {\n            const ch = this.fieldValues.remove(ChronoField.CLOCK_HOUR_OF_AMPM);\n            if (resolverStyle !== ResolverStyle.LENIENT) {\n                if (resolverStyle === ResolverStyle.SMART && ch === 0) {\n                    // ok\n                } else {\n                    ChronoField.CLOCK_HOUR_OF_AMPM.checkValidValue(ch);\n                }\n            }\n            this._addFieldValue(ChronoField.HOUR_OF_AMPM, ch === 12 ? 0 : ch);\n        }\n        if (resolverStyle !== ResolverStyle.LENIENT) {\n            if (this.fieldValues.containsKey(ChronoField.AMPM_OF_DAY)) {\n                ChronoField.AMPM_OF_DAY.checkValidValue(this.fieldValues.get(ChronoField.AMPM_OF_DAY));\n            }\n            if (this.fieldValues.containsKey(ChronoField.HOUR_OF_AMPM)) {\n                ChronoField.HOUR_OF_AMPM.checkValidValue(this.fieldValues.get(ChronoField.HOUR_OF_AMPM));\n            }\n        }\n        if (this.fieldValues.containsKey(ChronoField.AMPM_OF_DAY) && this.fieldValues.containsKey(ChronoField.HOUR_OF_AMPM)) {\n            const ap = this.fieldValues.remove(ChronoField.AMPM_OF_DAY);\n            const hap = this.fieldValues.remove(ChronoField.HOUR_OF_AMPM);\n            this._addFieldValue(ChronoField.HOUR_OF_DAY, ap * 12 + hap);\n        }\n        //        if (timeFields.containsKey(HOUR_OF_DAY) && timeFields.containsKey(MINUTE_OF_HOUR)) {\n        //            const hod = timeFields.remove(HOUR_OF_DAY);\n        //            const moh = timeFields.remove(MINUTE_OF_HOUR);\n        //            this._addFieldValue(MINUTE_OF_DAY, hod * 60 + moh);\n        //        }\n        //        if (timeFields.containsKey(MINUTE_OF_DAY) && timeFields.containsKey(SECOND_OF_MINUTE)) {\n        //            const mod = timeFields.remove(MINUTE_OF_DAY);\n        //            const som = timeFields.remove(SECOND_OF_MINUTE);\n        //            this._addFieldValue(SECOND_OF_DAY, mod * 60 + som);\n        //        }\n        if (this.fieldValues.containsKey(ChronoField.NANO_OF_DAY)) {\n            const nod = this.fieldValues.remove(ChronoField.NANO_OF_DAY);\n            if (resolverStyle !== ResolverStyle.LENIENT) {\n                ChronoField.NANO_OF_DAY.checkValidValue(nod);\n            }\n            this._addFieldValue(ChronoField.SECOND_OF_DAY, MathUtil.intDiv(nod, 1000000000));\n            this._addFieldValue(ChronoField.NANO_OF_SECOND, MathUtil.intMod(nod, 1000000000));\n        }\n        if (this.fieldValues.containsKey(ChronoField.MICRO_OF_DAY)) {\n            const cod = this.fieldValues.remove(ChronoField.MICRO_OF_DAY);\n            if (resolverStyle !== ResolverStyle.LENIENT) {\n                ChronoField.MICRO_OF_DAY.checkValidValue(cod);\n            }\n            this._addFieldValue(ChronoField.SECOND_OF_DAY, MathUtil.intDiv(cod, 1000000));\n            this._addFieldValue(ChronoField.MICRO_OF_SECOND, MathUtil.intMod(cod, 1000000));\n        }\n        if (this.fieldValues.containsKey(ChronoField.MILLI_OF_DAY)) {\n            const lod = this.fieldValues.remove(ChronoField.MILLI_OF_DAY);\n            if (resolverStyle !== ResolverStyle.LENIENT) {\n                ChronoField.MILLI_OF_DAY.checkValidValue(lod);\n            }\n            this._addFieldValue(ChronoField.SECOND_OF_DAY, MathUtil.intDiv(lod, 1000));\n            this._addFieldValue(ChronoField.MILLI_OF_SECOND, MathUtil.intMod(lod, 1000));\n        }\n        if (this.fieldValues.containsKey(ChronoField.SECOND_OF_DAY)) {\n            const sod = this.fieldValues.remove(ChronoField.SECOND_OF_DAY);\n            if (resolverStyle !== ResolverStyle.LENIENT) {\n                ChronoField.SECOND_OF_DAY.checkValidValue(sod);\n            }\n            this._addFieldValue(ChronoField.HOUR_OF_DAY, MathUtil.intDiv(sod, 3600));\n            this._addFieldValue(ChronoField.MINUTE_OF_HOUR, MathUtil.intMod(MathUtil.intDiv(sod, 60), 60));\n            this._addFieldValue(ChronoField.SECOND_OF_MINUTE, MathUtil.intMod(sod, 60));\n        }\n        if (this.fieldValues.containsKey(ChronoField.MINUTE_OF_DAY)) {\n            const mod = this.fieldValues.remove(ChronoField.MINUTE_OF_DAY);\n            if (resolverStyle !== ResolverStyle.LENIENT) {\n                ChronoField.MINUTE_OF_DAY.checkValidValue(mod);\n            }\n            this._addFieldValue(ChronoField.HOUR_OF_DAY, MathUtil.intDiv(mod, 60));\n            this._addFieldValue(ChronoField.MINUTE_OF_HOUR, MathUtil.intMod(mod, 60));\n        }\n\n        //            const sod = MathUtil.intDiv(nod, 1000000000L);\n        //            this._addFieldValue(HOUR_OF_DAY, MathUtil.intDiv(sod, 3600));\n        //            this._addFieldValue(MINUTE_OF_HOUR, MathUtil.intMod(MathUtil.intDiv(sod, 60), 60));\n        //            this._addFieldValue(SECOND_OF_MINUTE, MathUtil.intMod(sod, 60));\n        //            this._addFieldValue(NANO_OF_SECOND, MathUtil.intMod(nod, 1000000000L));\n        if (resolverStyle !== ResolverStyle.LENIENT) {\n            if (this.fieldValues.containsKey(ChronoField.MILLI_OF_SECOND)) {\n                ChronoField.MILLI_OF_SECOND.checkValidValue(this.fieldValues.get(ChronoField.MILLI_OF_SECOND));\n            }\n            if (this.fieldValues.containsKey(ChronoField.MICRO_OF_SECOND)) {\n                ChronoField.MICRO_OF_SECOND.checkValidValue(this.fieldValues.get(ChronoField.MICRO_OF_SECOND));\n            }\n        }\n        if (this.fieldValues.containsKey(ChronoField.MILLI_OF_SECOND) && this.fieldValues.containsKey(ChronoField.MICRO_OF_SECOND)) {\n            const los = this.fieldValues.remove(ChronoField.MILLI_OF_SECOND);\n            const cos = this.fieldValues.get(ChronoField.MICRO_OF_SECOND);\n            this._putFieldValue0(ChronoField.MICRO_OF_SECOND, los * 1000 + (MathUtil.intMod(cos, 1000)));\n        }\n        if (this.fieldValues.containsKey(ChronoField.MICRO_OF_SECOND) && this.fieldValues.containsKey(ChronoField.NANO_OF_SECOND)) {\n            const nos = this.fieldValues.get(ChronoField.NANO_OF_SECOND);\n            this._putFieldValue0(ChronoField.MICRO_OF_SECOND, MathUtil.intDiv(nos, 1000));\n            this.fieldValues.remove(ChronoField.MICRO_OF_SECOND);\n        }\n        if (this.fieldValues.containsKey(ChronoField.MILLI_OF_SECOND) && this.fieldValues.containsKey(ChronoField.NANO_OF_SECOND)) {\n            const nos = this.fieldValues.get(ChronoField.NANO_OF_SECOND);\n            this._putFieldValue0(ChronoField.MILLI_OF_SECOND, MathUtil.intDiv(nos, 1000000));\n            this.fieldValues.remove(ChronoField.MILLI_OF_SECOND);\n        }\n        if (this.fieldValues.containsKey(ChronoField.MICRO_OF_SECOND)) {\n            const cos = this.fieldValues.remove(ChronoField.MICRO_OF_SECOND);\n            this._putFieldValue0(ChronoField.NANO_OF_SECOND, cos * 1000);\n        } else if (this.fieldValues.containsKey(ChronoField.MILLI_OF_SECOND)) {\n            const los = this.fieldValues.remove(ChronoField.MILLI_OF_SECOND);\n            this._putFieldValue0(ChronoField.NANO_OF_SECOND, los * 1000000);\n        }\n    }\n\n    /**\n     *\n     * @param {ResolverStyle} resolverStyle\n     * @private\n     */\n    _resolveTimeInferZeroes(resolverStyle) {\n        let hod =  this.fieldValues.get(ChronoField.HOUR_OF_DAY);\n        const moh =  this.fieldValues.get(ChronoField.MINUTE_OF_HOUR);\n        const som =  this.fieldValues.get(ChronoField.SECOND_OF_MINUTE);\n        let nos =  this.fieldValues.get(ChronoField.NANO_OF_SECOND);\n        if (hod == null) {\n            return;\n        }\n        if (moh == null && (som != null || nos != null)) {\n            return;\n        }\n        if (moh != null && som == null && nos != null) {\n            return;\n        }\n        if (resolverStyle !== ResolverStyle.LENIENT) {\n            if (hod != null) {\n                if (resolverStyle === ResolverStyle.SMART &&\n                                hod === 24 &&\n                                (moh == null || moh === 0) &&\n                                (som == null || som === 0) &&\n                                (nos == null || nos === 0)) {\n                    hod = 0;\n                    this.excessDays = Period.ofDays(1);\n                }\n                const hodVal = ChronoField.HOUR_OF_DAY.checkValidIntValue(hod);\n                if (moh != null) {\n                    const mohVal = ChronoField.MINUTE_OF_HOUR.checkValidIntValue(moh);\n                    if (som != null) {\n                        const somVal = ChronoField.SECOND_OF_MINUTE.checkValidIntValue(som);\n                        if (nos != null) {\n                            const nosVal = ChronoField.NANO_OF_SECOND.checkValidIntValue(nos);\n                            this._addObject(LocalTime.of(hodVal, mohVal, somVal, nosVal));\n                        } else {\n                            this._addObject(LocalTime.of(hodVal, mohVal, somVal));\n                        }\n                    } else {\n                        if (nos == null) {\n                            this._addObject(LocalTime.of(hodVal, mohVal));\n                        }\n                    }\n                } else {\n                    if (som == null && nos == null) {\n                        this._addObject(LocalTime.of(hodVal, 0));\n                    }\n                }\n            }\n        } else {\n            if (hod != null) {\n                let hodVal = hod;\n                if (moh != null) {\n                    if (som != null) {\n                        if (nos == null) {\n                            nos = 0;\n                        }\n                        let totalNanos = MathUtil.safeMultiply(hodVal, 3600000000000);\n                        totalNanos = MathUtil.safeAdd(totalNanos, MathUtil.safeMultiply(moh, 60000000000));\n                        totalNanos = MathUtil.safeAdd(totalNanos, MathUtil.safeMultiply(som, 1000000000));\n                        totalNanos = MathUtil.safeAdd(totalNanos, nos);\n                        const excessDays =  MathUtil.floorDiv(totalNanos, 86400000000000);  // safe int cast\n                        const nod = MathUtil.floorMod(totalNanos, 86400000000000);\n                        this._addObject(LocalTime.ofNanoOfDay(nod));\n                        this.excessDays = Period.ofDays(excessDays);\n                    } else {\n                        let totalSecs = MathUtil.safeMultiply(hodVal, 3600);\n                        totalSecs = MathUtil.safeAdd(totalSecs, MathUtil.safeMultiply(moh, 60));\n                        const excessDays =  MathUtil.floorDiv(totalSecs, 86400);  // safe int cast\n                        const sod = MathUtil.floorMod(totalSecs, 86400);\n                        this._addObject(LocalTime.ofSecondOfDay(sod));\n                        this.excessDays = Period.ofDays(excessDays);\n                    }\n                } else {\n                    const excessDays = MathUtil.safeToInt(MathUtil.floorDiv(hodVal, 24));\n                    hodVal = MathUtil.floorMod(hodVal, 24);\n                    this._addObject(LocalTime.of(hodVal, 0));\n                    this.excessDays = Period.ofDays(excessDays);\n                }\n            }\n        }\n        this.fieldValues.remove(ChronoField.HOUR_OF_DAY);\n        this.fieldValues.remove(ChronoField.MINUTE_OF_HOUR);\n        this.fieldValues.remove(ChronoField.SECOND_OF_MINUTE);\n        this.fieldValues.remove(ChronoField.NANO_OF_SECOND);\n    }\n\n    /**\n     *\n     * @param {ChronoLocalDate|LocalTime} dateOrTime\n     * @private\n     */\n    _addObject(dateOrTime) {\n        if (dateOrTime instanceof ChronoLocalDate){\n            this.date = dateOrTime;\n        } else if (dateOrTime instanceof LocalTime){\n            this.time = dateOrTime;\n        }\n    }\n\n    _resolveInstant() {\n        if (this.date != null && this.time != null) {\n            const offsetSecs = this.fieldValues.get(ChronoField.OFFSET_SECONDS);\n            if (offsetSecs != null) {\n                const offset = ZoneOffset.ofTotalSeconds(offsetSecs);\n                const instant = this.date.atTime(this.time).atZone(offset).getLong(ChronoField.INSTANT_SECONDS);\n                this.fieldValues.put(ChronoField.INSTANT_SECONDS, instant);\n            } else if (this.zone != null) {\n                const instant = this.date.atTime(this.time).atZone(this.zone).getLong(ChronoField.INSTANT_SECONDS);\n                this.fieldValues.put(ChronoField.INSTANT_SECONDS, instant);\n            }\n        }\n    }\n\n    /**\n     * Builds the specified type from the values in this builder.\n     *\n     * This attempts to build the specified type from this builder.\n     * If the builder cannot return the type, an exception is thrown.\n     *\n     * @param {!TemporalQuery} type - the type to invoke `from` on, not null\n     * @return {*} the extracted value, not null\n     * @throws DateTimeException if an error occurs\n     */\n    build(type) {\n        return type.queryFrom(this);\n    }\n\n    /**\n     *\n     * @param {TemporalField} field\n     * @returns {number}\n     */\n    isSupported(field) {\n        if (field == null) {\n            return false;\n        }\n        return (this.fieldValues.containsKey(field) && this.fieldValues.get(field) !== undefined) ||\n                (this.date != null && this.date.isSupported(field)) ||\n                (this.time != null && this.time.isSupported(field));\n    }\n\n    /**\n     *\n     * @param {TemporalField} field\n     * @returns {number}\n     */\n    getLong(field) {\n        requireNonNull(field, 'field');\n        const value = this.getFieldValue0(field);\n        if (value == null) {\n            if (this.date != null && this.date.isSupported(field)) {\n                return this.date.getLong(field);\n            }\n            if (this.time != null && this.time.isSupported(field)) {\n                return this.time.getLong(field);\n            }\n            throw new DateTimeException(`Field not found: ${field}`);\n        }\n        return value;\n    }\n\n    /**\n     *\n     * @param {!TemporalQuery} query\n     * @returns {*}\n     */\n    query(query) {\n        if (query === TemporalQueries.zoneId()) {\n            return this.zone;\n        } else if (query === TemporalQueries.chronology()) {\n            return this.chrono;\n        } else if (query === TemporalQueries.localDate()) {\n            return this.date != null ? LocalDate.from(this.date) : null;\n        } else if (query === TemporalQueries.localTime()) {\n            return this.time;\n        } else if (query === TemporalQueries.zone() || query === TemporalQueries.offset()) {\n            return query.queryFrom(this);\n        } else if (query === TemporalQueries.precision()) {\n            return null;  // not a complete date/time\n        }\n        // inline TemporalAccessor.super.query(query) as an optimization\n        // non-JDK classes are not permitted to make this optimization\n        return query.queryFrom(this);\n    }\n\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert, requireNonNull } from '../assert';\n\nimport { DateTimeBuilder } from './DateTimeBuilder';\nimport { EnumMap } from './EnumMap';\n\nimport { IsoChronology } from '../chrono/IsoChronology';\nimport { Temporal } from '../temporal/Temporal';\nimport { TemporalQueries } from '../temporal/TemporalQueries';\n\n/**\n * @private\n */\nexport class DateTimeParseContext{\n\n    constructor(){\n        if(arguments.length === 1){\n            if(arguments[0] instanceof DateTimeParseContext){\n                this._constructorSelf.apply(this, arguments);\n                return;\n            } else {\n                this._constructorFormatter.apply(this, arguments);\n            }\n        } else {\n            this._constructorParam.apply(this, arguments);\n        }\n\n        this._caseSensitive = true;\n        this._strict = true;\n        this._parsed = [new Parsed(this)];\n    }\n\n    _constructorParam(locale, symbols, chronology){\n        this._locale = locale;\n        this._symbols = symbols;\n        this._overrideChronology = chronology;\n    }\n\n    _constructorFormatter(formatter){\n        this._locale = formatter.locale();\n        this._symbols = formatter.decimalStyle();\n        this._overrideChronology = formatter.chronology();\n    }\n\n\n    _constructorSelf(other) {\n        this._locale = other._locale;\n        this._symbols = other._symbols;\n        this._overrideChronology = other._overrideChronology;\n        this._overrideZone = other._overrideZone;\n        this._caseSensitive = other._caseSensitive;\n        this._strict = other._strict;\n        this._parsed = [new Parsed(this)];\n    }\n\n    /**\n     * Creates a copy of this context.\n     */\n    copy() {\n        return new DateTimeParseContext(this);\n    }\n\n    symbols(){\n        return this._symbols;\n    }\n\n    isStrict(){\n        return this._strict;\n    }\n\n    setStrict(strict){\n        this._strict = strict;\n    }\n\n    locale() {\n        return this._locale;\n    }\n\n    setLocale(locale) {\n        this._locale = locale;\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * Starts the parsing of an optional segment of the input.\n     */\n    startOptional() {\n        this._parsed.push(this.currentParsed().copy());\n    }\n\n    /**\n     * Ends the parsing of an optional segment of the input.\n     *\n     * @param {boolean} successful  whether the optional segment was successfully parsed\n     */\n    endOptional(successful) {\n        if (successful) {\n            this._parsed.splice(this._parsed.length - 2, 1);\n        } else {\n            this._parsed.splice(this._parsed.length - 1, 1);\n        }\n    }\n\n    /**\n     * Checks if parsing is case sensitive.\n     *\n     * @return true if parsing is case sensitive, false if case insensitive\n     */\n    isCaseSensitive() {\n        return this._caseSensitive;\n    }\n\n    /**\n     * Sets whether the parsing is case sensitive or not.\n     *\n     * @param caseSensitive  changes the parsing to be case sensitive or not from now on\n     */\n    setCaseSensitive(caseSensitive) {\n        this._caseSensitive = caseSensitive;\n    }\n\n    /**\n     * Helper to compare two {@link CharSequence} instances.\n     * This uses {@link isCaseSensitive}.\n     *\n     * @param cs1  the first character sequence, not null\n     * @param offset1  the offset into the first sequence, valid\n     * @param cs2  the second character sequence, not null\n     * @param offset2  the offset into the second sequence, valid\n     * @param length  the length to check, valid\n     * @return true if equal\n     */\n    subSequenceEquals(cs1, offset1, cs2, offset2, length) {\n        if (offset1 + length > cs1.length || offset2 + length > cs2.length) {\n            return false;\n        }\n        if (! this.isCaseSensitive()) {\n            cs1 = cs1.toLowerCase();\n            cs2 = cs2.toLowerCase();\n        }\n        for (let i = 0; i < length; i++) {\n            const ch1 = cs1[offset1 + i];\n            const ch2 = cs2[offset2 + i];\n            if (ch1 !== ch2) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Helper to compare two `char`.\n     * This uses {@link isCaseSensitive}.\n     *\n     * @param ch1  the first character\n     * @param ch2  the second character\n     * @return true if equal\n     */\n    charEquals(ch1, ch2) {\n        if (this.isCaseSensitive()) {\n            return ch1 === ch2;\n        }\n        return this.charEqualsIgnoreCase(ch1, ch2);\n    }\n\n    /**\n     * Compares two characters ignoring case.\n     *\n     * @param c1  the first\n     * @param c2  the second\n     * @return true if equal\n     */\n    charEqualsIgnoreCase(c1, c2) {\n        return c1 === c2 ||\n                c1.toLowerCase() === c2.toLowerCase();\n    }\n\n    setParsedField(field, value, errorPos, successPos){\n        const currentParsedFieldValues = this.currentParsed().fieldValues;\n        const old = currentParsedFieldValues.get(field);\n        currentParsedFieldValues.set(field, value);\n        return (old != null && old !== value) ? ~errorPos : successPos;\n    }\n\n    /**\n     * Stores the parsed zone.\n     *\n     * This stores the zone that has been parsed.\n     * No validation is performed other than ensuring it is not null.\n     *\n     * @param {ZoneId} zone  the parsed zone, not null\n     */\n    setParsedZone(zone) {\n        requireNonNull(zone, 'zone');\n        this.currentParsed().zone = zone;\n    }\n\n    getParsed(field) {\n        return this.currentParsed().fieldValues.get(field);\n    }\n\n    toParsed() {\n        return this.currentParsed();\n    }\n\n    currentParsed() {\n        return this._parsed[this._parsed.length - 1];\n    }\n\n    /**\n     * Stores the leap second.\n     */\n    setParsedLeapSecond() {\n        this.currentParsed().leapSecond = true;\n    }\n\n    /**\n     * Gets the effective chronology during parsing.\n     *\n     * @return the effective parsing chronology, not null\n     */\n    getEffectiveChronology() {\n        let chrono = this.currentParsed().chrono;\n        if (chrono == null) {\n            chrono = this._overrideChronology;\n            if (chrono == null) {\n                chrono = IsoChronology.INSTANCE;\n            }\n        }\n        return chrono;\n    }\n\n\n}\n\nclass Parsed extends Temporal {\n    constructor(dateTimeParseContext){\n        super();\n        this.chrono = null;\n        this.zone = null;\n        this.fieldValues = new EnumMap();\n        this.leapSecond = false;\n        this.dateTimeParseContext = dateTimeParseContext;\n    }\n\n    copy() {\n        const cloned = new Parsed();\n        cloned.chrono = this.chrono;\n        cloned.zone = this.zone;\n        cloned.fieldValues.putAll(this.fieldValues);\n        cloned.leapSecond = this.leapSecond;\n        cloned.dateTimeParseContext = this.dateTimeParseContext;\n        return cloned;\n    }\n\n    toString() {\n        return `${this.fieldValues}, ${this.chrono}, ${this.zone}`;\n    }\n\n    isSupported(field) {\n        return this.fieldValues.containsKey(field);\n    }\n\n    get(field) {\n        const val = this.fieldValues.get(field);\n        assert(val != null);\n        return val;\n    }\n\n    query(query) {\n        if (query === TemporalQueries.chronology()) {\n            return this.chrono;\n        }\n        if (query === TemporalQueries.zoneId() || query === TemporalQueries.zone()) {\n            return this.zone;\n        }\n        return super.query(query);\n    }\n\n    toBuilder() {\n        const builder = new DateTimeBuilder();\n        builder.fieldValues.putAll(this.fieldValues);\n        builder.chrono = this.dateTimeParseContext.getEffectiveChronology();\n        if (this.zone != null) {\n            builder.zone = this.zone;\n        } else {\n            builder.zone = this.overrideZone;\n        }\n        builder.leapSecond = this.leapSecond;\n        builder.excessDays = this.excessDays;\n        return builder;\n    }\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { DateTimeException } from '../errors';\n\nimport { DateTimeFormatter } from './DateTimeFormatter';\n\n/**\n * @private\n */\nexport class DateTimePrintContext{\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @param {DateTimeFormatter|Locale} localeOrFormatter\n     * @param {DecimalStyle} symbols\n     */\n    constructor(temporal, localeOrFormatter, symbols) {\n        if(arguments.length === 2 && arguments[1] instanceof DateTimeFormatter){\n            this._temporal = DateTimePrintContext.adjust(temporal, localeOrFormatter);\n            this._locale = localeOrFormatter.locale();\n            this._symbols = localeOrFormatter.decimalStyle();\n        } else {\n            this._temporal = temporal;\n            this._locale = localeOrFormatter;\n            this._symbols = symbols;\n        }\n        this._optional = 0;\n    }\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @param {DateTimeFormatter} formatter\n     * @returns {TemporalAccessor}\n     */\n    // eslint-disable-next-line no-unused-vars\n    static adjust(temporal, formatter) {\n        // TODO implement\n        return temporal;\n    }\n\n\n    symbols(){\n        return this._symbols;\n    }\n\n    /**\n     * Starts the printing of an optional segment of the input.\n     */\n    startOptional() {\n        this._optional++;\n    }\n\n    /**\n     * Ends the printing of an optional segment of the input.\n     */\n    endOptional() {\n        this._optional--;\n    }\n\n    /**\n     * Gets a value using a query.\n     *\n     * @param {TemporalQuery} query  the query to use, not null\n     * @return {*} the result, null if not found and optional is true\n     * @throws DateTimeException if the type is not available and the section is not optional\n     */\n    getValueQuery(query) {\n        const result = this._temporal.query(query);\n        if (result == null && this._optional === 0) {\n            throw new DateTimeException(`Unable to extract value: ${this._temporal}`);\n        }\n        return result;\n    }\n\n    /**\n     * Gets the value of the specified field.\n     *\n     * This will return the value for the specified field.\n     *\n     * @param field  the field to find, not null\n     * @return the value, null if not found and optional is true\n     * @throws DateTimeException if the field is not available and the section is not optional\n     */\n    getValue(field) {\n        try {\n            return this._temporal.getLong(field);\n        } catch (ex) {\n            if ((ex instanceof DateTimeException) && this._optional > 0) {\n                return null;\n            }\n            throw ex;\n        }\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the temporal object being output.\n     *\n     * @return {TemporalAccessor} the temporal object, not null\n     */\n    temporal() {\n        return this._temporal;\n    }\n\n    /**\n     * Gets the locale.\n     * <p>\n     * This locale is used to control localization in the print output except\n     * where localization is controlled by the symbols.\n     *\n     * @return the locale, not null\n     */\n    locale() {\n        return this._locale;\n    }\n\n    //-------------------------------------------------------------------------\n    // for testing\n    /**\n     * Sets the date-time being output.\n     *\n     * @param temporal  the date-time object, not null\n     */\n    setDateTime(temporal) {\n        this._temporal = temporal;\n    }\n\n    setLocale(locale) {\n        this._locale = locale;\n    }\n\n\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { UnsupportedTemporalTypeException, IllegalStateException } from '../errors';\n\nimport { DayOfWeek } from '../DayOfWeek';\nimport { Duration } from '../Duration';\nimport { MathUtil } from '../MathUtil';\nimport { LocalDate } from '../LocalDate';\n\nimport { ChronoField } from './ChronoField';\nimport { ChronoUnit } from './ChronoUnit';\nimport { TemporalField } from './TemporalField';\nimport { TemporalUnit } from './TemporalUnit';\nimport { ValueRange } from './ValueRange';\n\nimport { IsoChronology } from '../chrono/IsoChronology';\n\nimport { ResolverStyle } from '../format/ResolverStyle';\n\n/**\n * Fields and units specific to the ISO-8601 calendar system,\n * including quarter-of-year and week-based-year.\n *\n * This class defines fields and units that are specific to the ISO calendar system.\n *\n * ### Quarter of year\n *\n * The ISO-8601 standard is based on the standard civic 12 month year.\n * This is commonly divided into four quarters, often abbreviated as Q1, Q2, Q3 and Q4.\n *\n * January, February and March are in Q1.\n * April, May and June are in Q2.\n * July, August and September are in Q3.\n * October, November and December are in Q4.\n *\n * The complete date is expressed using three fields:\n *\n * * `IsoFields.DAY_OF_QUARTER` - the day within the quarter, from 1 to 90, 91 or 92\n * * `QUARTER_OF_YEAR` - the week within the week-based-year\n * * `ChronoField.YEAR` - the standard ISO year (see {@link ChronoField})\n *\n * ### Week based years\n *\n * The ISO-8601 standard was originally intended as a data interchange format,\n * defining a string format for dates and times. However, it also defines an\n * alternate way of expressing the date, based on the concept of week-based-year.\n *\n * The date is expressed using three fields:\n *\n * * `ChronoField.DAY_OF_WEEK` - the standard field defining the\n *   day-of-week from Monday (1) to Sunday (7) (see {@link ChronoField})\n * * `WEEK_OF_WEEK_BASED_YEAR` - the week within the week-based-year\n * * `WEEK_BASED_YEAR` - the week-based-year \n *\n * The week-based-year itself is defined relative to the standard ISO proleptic year.\n * It differs from the standard year in that it always starts on a Monday.\n *\n * The first week of a week-based-year is the first Monday-based week of the standard\n * ISO year that has at least 4 days in the new year.\n *\n * * If January 1st is Monday then week 1 starts on January 1st\n * * If January 1st is Tuesday then week 1 starts on December 31st of the previous standard year\n * * If January 1st is Wednesday then week 1 starts on December 30th of the previous standard year\n * * If January 1st is Thursday then week 1 starts on December 29th of the previous standard year\n * * If January 1st is Friday then week 1 starts on January 4th\n * * If January 1st is Saturday then week 1 starts on January 3rd\n * * If January 1st is Sunday then week 1 starts on January 2nd\n *\n * There are 52 weeks in most week-based years, however on occasion there are 53 weeks.\n *\n * For example:\n *\n * * Sunday, 2008-12-28: Week 52 of week-based-year 2008\n * * Monday, 2008-12-29: Week 1 of week-based-year 2009\n * * Wednesday, 2008-12-31: Week 1 of week-based-year 2009\n * * Thursday, 2009-01-01: Week 1 of week-based-year 2009\n * * Sunday, 2009-01-04: Week 1 of week-based-year 2009\n * * Monday, 2009-01-05: Week 2 of week-based-year 2009\n *\n * @property {TemporalField} DAY_OF_QUARTER The field that represents the day-of-quarter.\n *\n * This field allows the day-of-quarter value to be queried and set.\n * The day-of-quarter has values from 1 to 90 in Q1 of a standard year, from 1 to 91\n * in Q1 of a leap year, from 1 to 91 in Q2 and from 1 to 92 in Q3 and Q4.\n *\n * The day-of-quarter can only be calculated if the day-of-year, month-of-year and year\n * are available.\n *\n * When setting this field, the value is allowed to be partially lenient, taking any\n * value from 1 to 92. If the quarter has less than 92 days, then day 92, and\n * potentially day 91, is in the following quarter.\n *\n * @property {TemporalField} QUARTER_OF_YEAR The field that represents the quarter-of-year.\n *\n * This field allows the quarter-of-year value to be queried and set.\n * The quarter-of-year has values from 1 to 4.\n *\n * The day-of-quarter can only be calculated if the month-of-year is available.\n *\n * @property {TemporalField} WEEK_OF_WEEK_BASED_YEAR The field that represents the\n * week-of-week-based-year.\n *\n * This field allows the week of the week-based-year value to be queried and set.\n *\n * @property {TemporalField} WEEK_BASED_YEAR The field that represents the week-based-year.\n *\n * This field allows the week-based-year value to be queried and set.\n *\n * @property {TemporalField} WEEK_BASED_YEARS The unit that represents week-based-years for\n * the purpose of addition and subtraction.\n *\n * This allows a number of week-based-years to be added to, or subtracted from, a date.\n * The unit is equal to either 52 or 53 weeks.\n * The estimated duration of a week-based-year is the same as that of a standard ISO\n * year at 365.2425 days.\n *\n * The rules for addition add the number of week-based-years to the existing value\n * for the week-based-year field. If the resulting week-based-year only has 52 weeks,\n * then the date will be in week 1 of the following week-based-year.\n *\n * @property {TemporalField} QUARTER_YEARS Unit that represents the concept of a quarter-year.\n * For the ISO calendar system, it is equal to 3 months.\n * The estimated duration of a quarter-year is one quarter of 365.2425 days.\n * \n * @typedef {Object} IsoFields\n * @type {Object}\n */\nexport const IsoFields = {};\n\n//-----------------------------------------------------------------------\n\nconst QUARTER_DAYS = [0, 90, 181, 273, 0, 91, 182, 274];\n\n/**\n * Implementation of the field.\n * @private\n */\nclass Field extends TemporalField{\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    isDateBased() {\n        return true;\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    isTimeBased() {\n        return false;\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    _isIso() {\n        return true;\n    }\n\n    /**\n     *\n     * @param {LocalDate} date\n     * @returns {ValueRange}\n     */\n    static _getWeekRangeByLocalDate(date) {\n        const wby = Field._getWeekBasedYear(date);\n        return ValueRange.of(1, Field._getWeekRangeByYear(wby));\n    }\n\n    /**\n     *\n     * @param {number} wby\n     * @returns {number}\n     */\n    static _getWeekRangeByYear(wby) {\n        const date = LocalDate.of(wby, 1, 1);\n        // 53 weeks if standard year starts on Thursday, or Wed in a leap year\n        if (date.dayOfWeek() === DayOfWeek.THURSDAY || (date.dayOfWeek() === DayOfWeek.WEDNESDAY && date.isLeapYear())) {\n            return 53;\n        }\n        return 52;\n    }\n\n    /**\n     *\n     * @param {LocalDate} date\n     * @returns {number}\n     */\n    static _getWeek(date) {\n        const dow0 = date.dayOfWeek().ordinal();\n        const doy0 = date.dayOfYear() - 1;\n        const doyThu0 = doy0 + (3 - dow0);  // adjust to mid-week Thursday (which is 3 indexed from zero)\n        const alignedWeek = MathUtil.intDiv(doyThu0, 7);\n        const firstThuDoy0 = doyThu0 - (alignedWeek * 7);\n        let firstMonDoy0 = firstThuDoy0 - 3;\n        if (firstMonDoy0 < -3) {\n            firstMonDoy0 += 7;\n        }\n        if (doy0 < firstMonDoy0) {\n            return Field._getWeekRangeByLocalDate(date.withDayOfYear(180).minusYears(1)).maximum();\n        }\n        let week = MathUtil.intDiv((doy0 - firstMonDoy0), 7) + 1;\n        if (week === 53) {\n            if ((firstMonDoy0 === -3 || (firstMonDoy0 === -2 && date.isLeapYear())) === false) {\n                week = 1;\n            }\n        }\n        return week;\n    }\n\n    /**\n     *\n     * @param {LocalDate} date\n     * @returns {number}\n     */\n    static _getWeekBasedYear(date) {\n        let year = date.year();\n        let doy = date.dayOfYear();\n        if (doy <= 3) {\n            const dow = date.dayOfWeek().ordinal();\n            if (doy - dow < -2) {\n                year--;\n            }\n        } else if (doy >= 363) {\n            const dow = date.dayOfWeek().ordinal();\n            doy = doy - 363 - (date.isLeapYear() ? 1 : 0);\n            if (doy - dow >= 0) {\n                year++;\n            }\n        }\n        return year;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    displayName(/*locale*/) {\n        return this.toString();\n    }\n\n    /**\n     *\n     * @returns {null}\n     */\n    resolve() {\n        return null;\n    }\n\n    name(){\n        return this.toString();\n    }\n\n}\n\n/**\n * @private\n */\nclass DAY_OF_QUARTER_FIELD extends Field {\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return 'DayOfQuarter';\n    }\n\n    /**\n     *\n     * @returns {TemporalUnit}\n     */\n    baseUnit() {\n        return ChronoUnit.DAYS;\n    }\n\n    /**\n     *\n     * @returns {TemporalUnit}\n     */\n    rangeUnit() {\n        return QUARTER_YEARS;\n    }\n\n    /**\n     *\n     * @returns {ValueRange}\n     */\n    range() {\n        return ValueRange.of(1, 90, 92);\n    }\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {boolean}\n     */\n    isSupportedBy(temporal) {\n        return temporal.isSupported(ChronoField.DAY_OF_YEAR) && temporal.isSupported(ChronoField.MONTH_OF_YEAR) &&\n            temporal.isSupported(ChronoField.YEAR) && this._isIso(temporal);\n    }\n\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {ValueRange}\n     */\n    rangeRefinedBy(temporal) {\n        if (temporal.isSupported(this) === false) {\n            throw new UnsupportedTemporalTypeException('Unsupported field: DayOfQuarter');\n        }\n        const qoy = temporal.getLong(QUARTER_OF_YEAR);\n        if (qoy === 1) {\n            const year = temporal.getLong(ChronoField.YEAR);\n            return (IsoChronology.isLeapYear(year) ? ValueRange.of(1, 91) : ValueRange.of(1, 90));\n        } else if (qoy === 2) {\n            return ValueRange.of(1, 91);\n        } else if (qoy === 3 || qoy === 4) {\n            return ValueRange.of(1, 92);\n        } // else value not from 1 to 4, so drop through\n        return this.range();\n    }\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {number}\n     */\n    getFrom(temporal) {\n        if (temporal.isSupported(this) === false) {\n            throw new UnsupportedTemporalTypeException('Unsupported field: DayOfQuarter');\n        }\n        const doy = temporal.get(ChronoField.DAY_OF_YEAR);\n        const moy = temporal.get(ChronoField.MONTH_OF_YEAR);\n        const year = temporal.getLong(ChronoField.YEAR);\n        return doy - QUARTER_DAYS[MathUtil.intDiv((moy - 1), 3) + (IsoChronology.isLeapYear(year) ? 4 : 0)];\n    }\n\n    /**\n     *\n     * @param {Temporal} temporal\n     * @param {number} newValue\n     * @returns {temporal}\n     */\n    adjustInto(temporal, newValue) {\n        const curValue = this.getFrom(temporal);\n        this.range().checkValidValue(newValue, this);\n        return temporal.with(ChronoField.DAY_OF_YEAR, temporal.getLong(ChronoField.DAY_OF_YEAR) + (newValue - curValue));\n    }\n\n    /**\n     *\n     * @param {Map<TemporalField, number>} fieldValues\n     * @param {TemporalAccessor} partialTemporal\n     * @param {ResolverStyle} resolverStyle\n     * @returns {ValueRange}\n     */\n    resolve(fieldValues, partialTemporal, resolverStyle) {\n        const yearLong = fieldValues.get(ChronoField.YEAR);\n        const qoyLong = fieldValues.get(QUARTER_OF_YEAR);\n        if (yearLong == null || qoyLong == null) {\n            return null;\n        }\n        const y = ChronoField.YEAR.checkValidIntValue(yearLong);\n        const doq = fieldValues.get(DAY_OF_QUARTER);\n        let date;\n        if (resolverStyle === ResolverStyle.LENIENT) {\n            const qoy = qoyLong;\n            date = LocalDate.of(y, 1, 1);\n            date = date.plusMonths(MathUtil.safeMultiply(MathUtil.safeSubtract(qoy, 1), 3));\n            date = date.plusDays(MathUtil.safeSubtract(doq, 1));\n        } else {\n            const qoy = QUARTER_OF_YEAR.range().checkValidIntValue(qoyLong, QUARTER_OF_YEAR);\n            if (resolverStyle === ResolverStyle.STRICT) {\n                let max = 92;\n                if (qoy === 1) {\n                    max = (IsoChronology.isLeapYear(y) ? 91 : 90);\n                } else if (qoy === 2) {\n                    max = 91;\n                }\n                ValueRange.of(1, max).checkValidValue(doq, this);\n            } else {\n                this.range().checkValidValue(doq, this);  // leniently check from 1 to 92\n            }\n            date = LocalDate.of(y, ((qoy - 1) * 3) + 1, 1).plusDays(doq - 1);\n        }\n        fieldValues.remove(this);\n        fieldValues.remove(ChronoField.YEAR);\n        fieldValues.remove(QUARTER_OF_YEAR);\n        return date;\n    }\n}\n\n/**\n * @private\n */\nclass QUARTER_OF_YEAR_FIELD extends Field {\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return 'QuarterOfYear';\n    }\n\n    /**\n     *\n     * @returns {TemporalUnit}\n     */\n    baseUnit() {\n        return QUARTER_YEARS;\n    }\n\n    /**\n     *\n     * @returns {TemporalUnit}\n     */\n    rangeUnit() {\n        return ChronoUnit.YEARS;\n    }\n\n    /**\n     *\n     * @returns {ValueRange}\n     */\n    range() {\n        return ValueRange.of(1, 4);\n    }\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {boolean}\n     */\n    isSupportedBy(temporal) {\n        return temporal.isSupported(ChronoField.MONTH_OF_YEAR) && this._isIso(temporal);\n    }\n\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {ValueRange}\n     */\n    //eslint-disable-next-line no-unused-vars\n    rangeRefinedBy(temporal) {\n        return this.range();\n    }\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {number}\n     */\n    getFrom(temporal) {\n        if (temporal.isSupported(this) === false) {\n            throw new UnsupportedTemporalTypeException('Unsupported field: QuarterOfYear');\n        }\n        const moy = temporal.getLong(ChronoField.MONTH_OF_YEAR);\n        return MathUtil.intDiv((moy + 2), 3);\n    }\n\n    /**\n     *\n     * @param {Temporal} temporal\n     * @param {number} newValue\n     * @returns {temporal}\n     */\n    adjustInto(temporal, newValue) {\n        const curValue = this.getFrom(temporal);\n        this.range().checkValidValue(newValue, this);\n        return temporal.with(ChronoField.MONTH_OF_YEAR, temporal.getLong(ChronoField.MONTH_OF_YEAR) + (newValue - curValue) * 3);\n    }\n\n}\n\n/**\n * @private\n */\nclass WEEK_OF_WEEK_BASED_YEAR_FIELD extends Field {\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return 'WeekOfWeekBasedYear';\n    }\n\n    /**\n     *\n     * @returns {TemporalUnit}\n     */\n    baseUnit() {\n        return ChronoUnit.WEEKS;\n    }\n\n    /**\n     *\n     * @returns {TemporalUnit}\n     */\n    rangeUnit() {\n        return WEEK_BASED_YEARS;\n    }\n\n    /**\n     *\n     * @returns {ValueRange}\n     */\n    range() {\n        return ValueRange.of(1, 52, 53);\n    }\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {boolean}\n     */\n    isSupportedBy(temporal) {\n        return temporal.isSupported(ChronoField.EPOCH_DAY) && this._isIso(temporal);\n    }\n\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {ValueRange}\n     */\n    rangeRefinedBy(temporal) {\n        if (temporal.isSupported(this) === false) {\n            throw new UnsupportedTemporalTypeException('Unsupported field: WeekOfWeekBasedYear');\n        }\n        return Field._getWeekRangeByLocalDate(LocalDate.from(temporal));\n    }\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {number}\n     */\n    getFrom(temporal) {\n        if (temporal.isSupported(this) === false) {\n            throw new UnsupportedTemporalTypeException('Unsupported field: WeekOfWeekBasedYear');\n        }\n        return Field._getWeek(LocalDate.from(temporal));\n    }\n\n    /**\n     *\n     * @param {Temporal} temporal\n     * @param {number} newValue\n     * @returns {temporal}\n     */\n    adjustInto(temporal, newValue) {\n        this.range().checkValidValue(newValue, this);\n        return temporal.plus(MathUtil.safeSubtract(newValue, this.getFrom(temporal)), ChronoUnit.WEEKS);\n    }\n\n    /**\n     *\n     * @param {Map<TemporalField, number>} fieldValues\n     * @param {TemporalAccessor} partialTemporal\n     * @param {ResolverStyle} resolverStyle\n     * @returns {ValueRange}\n     */\n    resolve(fieldValues, partialTemporal, resolverStyle) {\n        const wbyLong = fieldValues.get(WEEK_BASED_YEAR);\n        const dowLong = fieldValues.get(ChronoField.DAY_OF_WEEK);\n        if (wbyLong == null || dowLong == null) {\n            return null;\n        }\n        const wby = WEEK_BASED_YEAR.range().checkValidIntValue(wbyLong, WEEK_BASED_YEAR);\n        const wowby = fieldValues.get(WEEK_OF_WEEK_BASED_YEAR);\n        let date;\n        if (resolverStyle === ResolverStyle.LENIENT) {\n            let dow = dowLong;\n            let weeks = 0;\n            if (dow > 7) {\n                weeks = MathUtil.intDiv((dow - 1), 7);\n                dow = (MathUtil.intMod((dow - 1), 7) + 1);\n            } else if (dow < 1) {\n                weeks = MathUtil.intDiv(dow, 7) - 1;\n                dow = MathUtil.intMod(dow, 7) + 7;\n            }\n            date = LocalDate.of(wby, 1, 4).plusWeeks(wowby - 1).plusWeeks(weeks).with(ChronoField.DAY_OF_WEEK, dow);\n        } else {\n            const dow = ChronoField.DAY_OF_WEEK.checkValidIntValue(dowLong);\n            if (resolverStyle === ResolverStyle.STRICT) {\n                const temp = LocalDate.of(wby, 1, 4);\n                const range = Field._getWeekRangeByLocalDate(temp);\n                range.checkValidValue(wowby, this);\n            } else {\n                this.range().checkValidValue(wowby, this);  // leniently check from 1 to 53\n            }\n            date = LocalDate.of(wby, 1, 4).plusWeeks(wowby - 1).with(ChronoField.DAY_OF_WEEK, dow);\n        }\n        fieldValues.remove(this);\n        fieldValues.remove(WEEK_BASED_YEAR);\n        fieldValues.remove(ChronoField.DAY_OF_WEEK);\n        return date;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    displayName() {\n        return 'Week';\n    }\n\n}\n\n/**\n * @private\n */\nclass WEEK_BASED_YEAR_FIELD extends Field {\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return 'WeekBasedYear';\n    }\n\n    /**\n     *\n     * @returns {TemporalUnit}\n     */\n    baseUnit() {\n        return WEEK_BASED_YEARS;\n    }\n\n    /**\n     *\n     * @returns {TemporalUnit}\n     */\n    rangeUnit() {\n        return ChronoUnit.FOREVER;\n    }\n\n    /**\n     *\n     * @returns {ValueRange}\n     */\n    range() {\n        return ChronoField.YEAR.range();\n    }\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {boolean}\n     */\n    isSupportedBy(temporal) {\n        return temporal.isSupported(ChronoField.EPOCH_DAY) && this._isIso(temporal);\n    }\n\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {ValueRange}\n     */\n    //eslint-disable-next-line no-unused-vars\n    rangeRefinedBy(temporal) {\n        return ChronoField.YEAR.range();\n    }\n\n    /**\n     *\n     * @param {TemporalAccessor} temporal\n     * @returns {number}\n     */\n    getFrom(temporal) {\n        if (temporal.isSupported(this) === false) {\n            throw new UnsupportedTemporalTypeException('Unsupported field: WeekBasedYear');\n        }\n        return Field._getWeekBasedYear(LocalDate.from(temporal));\n    }\n\n    /**\n     *\n     * @param {Temporal} temporal\n     * @param {number} newValue\n     * @returns {temporal}\n     */\n    adjustInto(temporal, newValue) {\n        if (this.isSupportedBy(temporal) === false) {\n            throw new UnsupportedTemporalTypeException('Unsupported field: WeekBasedYear');\n        }\n        const newWby = this.range().checkValidIntValue(newValue, WEEK_BASED_YEAR);  // strict check\n        const date = LocalDate.from(temporal);\n        const dow = date.get(ChronoField.DAY_OF_WEEK);\n        let week = Field._getWeek(date);\n        if (week === 53 && Field._getWeekRangeByYear(newWby) === 52) {\n            week = 52;\n        }\n        let resolved = LocalDate.of(newWby, 1, 4);  // 4th is guaranteed to be in week one\n        const days = (dow - resolved.get(ChronoField.DAY_OF_WEEK)) + ((week - 1) * 7);\n        resolved = resolved.plusDays(days);\n        return temporal.with(resolved);\n    }\n\n}\n\n//-----------------------------------------------------------------------\n/**\n * Implementation of the period unit.\n * @private\n */\nclass Unit extends TemporalUnit {\n\n    /**\n     *\n     * @param {string} name\n     * @param {Duration} estimatedDuration\n     * @private\n     */\n    constructor(name, estimatedDuration) {\n        super();\n        this._name = name;\n        this._duration = estimatedDuration;\n    }\n\n    /**\n     *\n     * @returns {Duration}\n     */\n    duration() {\n        return this._duration;\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    isDurationEstimated() {\n        return true;\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    isDateBased() {\n        return true;\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    isTimeBased() {\n        return false;\n    }\n\n    /**\n     *\n     * @param {Temporal} temporal\n     * @returns {boolean}\n     */\n    isSupportedBy(temporal) {\n        return temporal.isSupported(ChronoField.EPOCH_DAY);\n    }\n\n    /**\n     *\n     * @param {Temporal} temporal\n     * @param {number} periodToAdd\n     * @returns {number}\n     */\n    addTo(temporal, periodToAdd) {\n        switch(this) {\n            case WEEK_BASED_YEARS: {\n                const added = MathUtil.safeAdd(temporal.get(WEEK_BASED_YEAR), periodToAdd);\n                return temporal.with(WEEK_BASED_YEAR, added);\n            }\n            case QUARTER_YEARS:\n                // no overflow (256 is multiple of 4)\n                return temporal.plus(MathUtil.intDiv(periodToAdd, 256), ChronoUnit.YEARS).plus(MathUtil.intMod(periodToAdd, 256) * 3, ChronoUnit.MONTHS);\n            default:\n                throw new IllegalStateException('Unreachable');\n        }\n    }\n\n    /**\n     *\n     * @param {Temporal} temporal1\n     * @param {Temporal} temporal2\n     * @returns {number}\n     */\n    between(temporal1, temporal2) {\n        switch(this) {\n            case WEEK_BASED_YEARS:\n                return MathUtil.safeSubtract(temporal2.getLong(WEEK_BASED_YEAR), temporal1.getLong(WEEK_BASED_YEAR));\n            case QUARTER_YEARS:\n                return MathUtil.intDiv(temporal1.until(temporal2, ChronoUnit.MONTHS), 3);\n            default:\n                throw new IllegalStateException('Unreachable');\n        }\n    }\n\n    toString() {\n        return this._name;\n    }\n}\n\nlet DAY_OF_QUARTER = null;\nlet QUARTER_OF_YEAR = null;\nlet WEEK_OF_WEEK_BASED_YEAR = null;\nlet WEEK_BASED_YEAR = null;\nlet WEEK_BASED_YEARS = null;\nlet QUARTER_YEARS = null;\n\nexport function _init() {\n    DAY_OF_QUARTER = new DAY_OF_QUARTER_FIELD();\n    QUARTER_OF_YEAR = new QUARTER_OF_YEAR_FIELD();\n    WEEK_OF_WEEK_BASED_YEAR = new WEEK_OF_WEEK_BASED_YEAR_FIELD();\n    WEEK_BASED_YEAR = new WEEK_BASED_YEAR_FIELD();\n\n    WEEK_BASED_YEARS = new Unit('WeekBasedYears', Duration.ofSeconds(31556952));\n    QUARTER_YEARS = new Unit('QuarterYears', Duration.ofSeconds(31556952 / 4));\n\n    IsoFields.DAY_OF_QUARTER = DAY_OF_QUARTER;\n    IsoFields.QUARTER_OF_YEAR = QUARTER_OF_YEAR;\n    IsoFields.WEEK_OF_WEEK_BASED_YEAR = WEEK_OF_WEEK_BASED_YEAR;\n    IsoFields.WEEK_BASED_YEAR = WEEK_BASED_YEAR;\n    IsoFields.WEEK_BASED_YEARS = WEEK_BASED_YEARS;\n    IsoFields.QUARTER_YEARS = QUARTER_YEARS;\n\n    // this differs from threeten, but for ease of use we bring back good old joda time functionality\n    /**\n     * the week of the week based year as defined by the ISO8601 Standard with a Monday-based week\n     *\n     * @returns {number} the week a the week based year\n     */\n    LocalDate.prototype.isoWeekOfWeekyear = function () {\n        return this.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);\n    };\n    /**\n     * the year of the week based year as defined by the ISO8601 Standard with a Monday-based week\n     *\n     * @returns {number} the year a the week based year\n     */\n    LocalDate.prototype.isoWeekyear = function () {\n        return this.get(IsoFields.WEEK_BASED_YEAR);\n    };\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nexport class DecimalStyle {\n    /**\n     *\n     * @param zeroChar\n     * @param positiveSignChar\n     * @param negativeSignChar\n     * @param decimalPointChar\n     * @private\n     */\n    constructor(zeroChar, positiveSignChar, negativeSignChar, decimalPointChar) {\n        this._zeroDigit = zeroChar;\n        this._zeroDigitCharCode = zeroChar.charCodeAt(0);\n        this._positiveSign = positiveSignChar;\n        this._negativeSign = negativeSignChar;\n        this._decimalSeparator = decimalPointChar;\n    }\n\n    positiveSign(){\n        return this._positiveSign;\n    }\n\n    withPositiveSign(positiveSign) {\n        if (positiveSign === this._positiveSign) {\n            return this;\n        }\n        return new DecimalStyle(this._zeroDigit, positiveSign, this._negativeSign, this._decimalSeparator);\n    }\n\n    negativeSign(){\n        return this._negativeSign;\n    }\n\n    withNegativeSign(negativeSign) {\n        if (negativeSign === this._negativeSign) {\n            return this;\n        }\n        return new DecimalStyle(this._zeroDigit, this._positiveSign, negativeSign, this._decimalSeparator);\n    }\n\n    zeroDigit(){\n        return this._zeroDigit;\n    }\n\n    withZeroDigit(zeroDigit) {\n        if (zeroDigit === this._zeroDigit) {\n            return this;\n        }\n        return new DecimalStyle(zeroDigit, this._positiveSign, this._negativeSign, this._decimalSeparator);\n    }\n\n    decimalSeparator(){\n        return this._decimalSeparator;\n    }\n\n    withDecimalSeparator(decimalSeparator) {\n        if (decimalSeparator === this._decimalSeparator) {\n            return this;\n        }\n        return new DecimalStyle(this._zeroDigit, this._positiveSign, this._negativeSign, decimalSeparator);\n    }\n\n    convertToDigit(char){\n        const val = char.charCodeAt(0) - this._zeroDigitCharCode;\n        return (val >= 0 && val <= 9) ? val : -1;\n    }\n\n    convertNumberToI18N(numericText) {\n        if (this._zeroDigit === '0') {\n            return numericText;\n        }\n        const diff = this._zeroDigitCharCode - '0'.charCodeAt(0);\n        let convertedText = '';\n        for (let i = 0; i < numericText.length; i++) {\n            convertedText += String.fromCharCode(numericText.charCodeAt(i) + diff);\n        }\n        return convertedText;\n    }\n\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof DecimalStyle) {\n            return (this._zeroDigit === other._zeroDigit && this._positiveSign === other._positiveSign &&\n                this._negativeSign === other._negativeSign && this._decimalSeparator === other._decimalSeparator);\n        }\n        return false;\n    }\n\n    hashCode() {\n        return this._zeroDigit + this._positiveSign + this._negativeSign + this._decimalSeparator;\n    }\n\n    toString() {\n        return `DecimalStyle[${this._zeroDigit}${this._positiveSign}${this._negativeSign}${this._decimalSeparator}]`;\n    }\n\n    static of(){\n        throw new Error('not yet supported');\n    }\n    static availableLocales(){\n        throw new Error('not yet supported');\n    }\n\n}\n\nDecimalStyle.STANDARD = new DecimalStyle('0', '+', '-', '.');\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { Enum } from '../Enum';\n\nexport class SignStyle extends Enum{\n    /**\n     * Parse helper.\n     *\n     * @param positive  true if positive sign parsed, false for negative sign\n     * @param strict  true if strict, false if lenient\n     * @param fixedWidth  true if fixed width, false if not\n     * @return true if valid\n     */\n    parse(positive, strict, fixedWidth){\n        switch (this) {\n            case SignStyle.NORMAL: // NORMAL\n                // valid if negative or (positive and lenient)\n                return !positive || !strict;\n            case SignStyle.ALWAYS: // ALWAYS\n            case SignStyle.EXCEEDS_PAD: // EXCEEDS_PAD\n                return true;\n            default:\n                // valid if lenient and not fixed width\n                return !strict && !fixedWidth;\n        }\n\n    }\n}\n\nSignStyle.NORMAL = new SignStyle('NORMAL');\nSignStyle.NEVER = new SignStyle('NEVER');\nSignStyle.ALWAYS = new SignStyle('ALWAYS');\nSignStyle.EXCEEDS_PAD = new SignStyle('EXCEEDS_PAD');\nSignStyle.NOT_NEGATIVE = new SignStyle('NOT_NEGATIVE');\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE.md in the root directory of this source tree)\n */\n\nimport { Enum } from '../Enum';\n\n/**\n * Enumeration of the style of text formatting and parsing.\n *\n * Text styles define three sizes for the formatted text - 'full', 'short' and 'narrow'.\n * Each of these three sizes is available in both 'standard' and 'stand-alone' variations.\n *\n * The difference between the three sizes is obvious in most languages.\n * For example, in English the 'full' month is 'January', the 'short' month is 'Jan'\n * and the 'narrow' month is 'J'. Note that the narrow size is often not unique.\n * For example, 'January', 'June' and 'July' all have the 'narrow' text 'J'.\n *\n * The difference between the 'standard' and 'stand-alone' forms is trickier to describe\n * as there is no difference in English. However, in other languages there is a difference\n * in the word used when the text is used alone, as opposed to in a complete date.\n * For example, the word used for a month when used alone in a date picker is different\n * to the word used for month in association with a day and year in a date.\n *\n * ### Specification for implementors\n *\n * This is immutable and thread-safe enum.\n */\nexport class TextStyle extends Enum {\n    /**\n     * Checks if the style is stand-alone.\n     *\n     * @return {boolean} true if the style is stand-alone\n     */\n    isStandalone() {\n        switch (this) {\n            case TextStyle.FULL_STANDALONE:\n            case TextStyle.SHORT_STANDALONE:\n            case TextStyle.NARROW_STANDALONE:\n                return true;\n            default:\n                return false;\n        }\n    }\n\n    /**\n     * Converts the style to the equivalent stand-alone style.\n     *\n     * @return {TextStyle} the matching stand-alone style\n     */\n    asStandalone() {\n        switch (this) {\n            case TextStyle.FULL:\n                return TextStyle.FULL_STANDALONE;\n            case TextStyle.SHORT:\n                return TextStyle.SHORT_STANDALONE;\n            case TextStyle.NARROW:\n                return TextStyle.NARROW_STANDALONE;\n            default:\n                // all others are already standalone\n                return this;\n        }\n    }\n\n    /**\n     * Converts the style to the equivalent normal style.\n     *\n     * @return {TextStyle} the matching normal style\n     */\n    asNormal() {\n        switch (this) {\n            case TextStyle.FULL_STANDALONE:\n                return TextStyle.FULL;\n            case TextStyle.SHORT_STANDALONE:\n                return TextStyle.SHORT;\n            case TextStyle.NARROW_STANDALONE:\n                return TextStyle.NARROW;\n            default:\n                // all others are already normal\n                return this;\n        }\n    }\n}\n\n/**\n * Full text, typically the full description.\n * For example, day-of-week Monday might output \"Monday\".\n */\nTextStyle.FULL = new TextStyle('FULL');\n/**\n * Full text for stand-alone use, typically the full description.\n * For example, day-of-week Monday might output \"Monday\".\n */\nTextStyle.FULL_STANDALONE = new TextStyle('FULL_STANDALONE');\n/**\n * Short text, typically an abbreviation.\n * For example, day-of-week Monday might output \"Mon\".\n */\nTextStyle.SHORT = new TextStyle('SHORT');\n/**\n * Short text for stand-alone use, typically an abbreviation.\n * For example, day-of-week Monday might output \"Mon\".\n */\nTextStyle.SHORT_STANDALONE = new TextStyle('SHORT_STANDALONE');\n/**\n * Narrow text, typically a single letter.\n * For example, day-of-week Monday might output \"M\".\n */\nTextStyle.NARROW = new TextStyle('NARROW');\n/**\n * Narrow text for stand-alone use, typically a single letter.\n * For example, day-of-week Monday might output \"M\".\n */\nTextStyle.NARROW_STANDALONE = new TextStyle('NARROW_STANDALONE');\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { IllegalArgumentException } from '../../errors';\n\n/**\n * Prints or parses a char literal.\n * @private\n */\nexport class CharLiteralPrinterParser {\n\n    constructor(literal) {\n        if (literal.length > 1) {\n            throw new IllegalArgumentException(`invalid literal, too long: \"${literal}\"`);\n        }\n        this._literal = literal;\n    }\n\n    print(context, buf) {\n        buf.append(this._literal);\n        return true;\n    }\n\n    parse(context, text, position) {\n        const length = text.length;\n        if (position === length) {\n            return ~position;\n        }\n        const ch = text.charAt(position);\n        if (context.charEquals(this._literal, ch) === false) {\n            return ~position;\n        }\n        return position + this._literal.length;\n    }\n\n    toString() {\n        if (this._literal === '\\'') {\n            return \"''\";\n        }\n        return `'${this._literal}'`;\n    }\n}\n\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n/**\n * @private\n */\nexport class CompositePrinterParser {\n\n    constructor(printerParsers, optional) {\n        this._printerParsers = printerParsers;\n        this._optional = optional;\n    }\n\n    /**\n     * Returns a copy of this printer-parser with the optional flag changed.\n     *\n     * @param {boolean} optional  the optional flag to set in the copy\n     * @return {CompositePrinterParser} the new printer-parser, not null\n     */\n    withOptional(optional) {\n        if (optional === this._optional) {\n            return this;\n        }\n        return new CompositePrinterParser(this._printerParsers, optional);\n    }\n\n    print(context, buf) {\n        const length = buf.length();\n        if (this._optional) {\n            context.startOptional();\n        }\n        try {\n            for (let i=0; i<this._printerParsers.length; i++) {\n                const pp = this._printerParsers[i];\n                if (pp.print(context, buf) === false) {\n                    buf.setLength(length);  // reset buffer\n                    return true;\n                }\n            }\n        } finally {\n            if (this._optional) {\n                context.endOptional();\n            }\n        }\n        return true;\n    }\n\n    parse(context, text, position) {\n        if (this._optional) {\n            context.startOptional();\n            let pos = position;\n            for (let i=0; i<this._printerParsers.length; i++) {\n                const pp = this._printerParsers[i];\n                pos = pp.parse(context, text, pos);\n                if (pos < 0) {\n                    context.endOptional(false);\n                    return position;  // return original position\n                }\n            }\n            context.endOptional(true);\n            return pos;\n        } else {\n            for (let i=0; i<this._printerParsers.length; i++) {\n                const pp = this._printerParsers[i];\n                position = pp.parse(context, text, position);\n                if (position < 0) {\n                    break;\n                }\n            }\n            return position;\n        }\n    }\n\n    toString() {\n        let buf = '';\n        if (this._printerParsers != null) {\n            buf += this._optional ? '[' : '(';\n            for (let i=0; i<this._printerParsers.length; i++) {\n                const pp = this._printerParsers[i];\n                buf += pp.toString();\n            }\n            buf += this._optional ? ']' : ')';\n        }\n        return buf;\n    }\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from '../../assert';\nimport { IllegalArgumentException } from '../../errors';\nimport { MathUtil } from '../../MathUtil';\n\n/**\n * TODO optimize FractionPrinterParser, fix documentation\n *\n * Prints and parses a numeric date-time field with optional padding.\n * @private\n */\nexport class FractionPrinterParser {\n\n    /**\n     * Constructor.\n     *\n     * @param {TemporalField} field  the field to output, not null\n     * @param {Number} minWidth  the minimum width to output, from 0 to 9\n     * @param {Number} maxWidth  the maximum width to output, from 0 to 9\n     * @param {boolean} decimalPoint  whether to output the localized decimal point symbol\n     */\n    constructor(field, minWidth, maxWidth, decimalPoint) {\n        requireNonNull(field, 'field');\n        if (field.range().isFixed() === false) {\n            throw new IllegalArgumentException(`Field must have a fixed set of values: ${field}`);\n        }\n        if (minWidth < 0 || minWidth > 9) {\n            throw new IllegalArgumentException(`Minimum width must be from 0 to 9 inclusive but was ${minWidth}`);\n        }\n        if (maxWidth < 1 || maxWidth > 9) {\n            throw new IllegalArgumentException(`Maximum width must be from 1 to 9 inclusive but was ${maxWidth}`);\n        }\n        if (maxWidth < minWidth) {\n            throw new IllegalArgumentException(`Maximum width must exceed or equal the minimum width but ${ \n                maxWidth} < ${minWidth}`);\n        }\n        this.field = field;\n        this.minWidth = minWidth;\n        this.maxWidth = maxWidth;\n        this.decimalPoint = decimalPoint;\n    }\n\n    print(context, buf) {\n        const value = context.getValue(this.field);\n        if (value === null) {\n            return false;\n        }\n        const symbols = context.symbols();\n        if (value === 0) {  // scale is zero if value is zero\n            if (this.minWidth > 0) {\n                if (this.decimalPoint) {\n                    buf.append(symbols.decimalSeparator());\n                }\n                for (let i = 0; i < this.minWidth; i++) {\n                    buf.append(symbols.zeroDigit());\n                }\n            }\n        } else {\n            let fraction = this.convertToFraction(value, symbols.zeroDigit());\n            const outputScale = Math.min(Math.max(fraction.length, this.minWidth), this.maxWidth);\n            fraction = fraction.substr(0, outputScale);\n            if(fraction * 1 > 0 ) {\n                while (fraction.length > this.minWidth && fraction[fraction.length - 1] === '0') {\n                    fraction = fraction.substr(0, fraction.length - 1);\n                }\n            }\n            let str = fraction;\n            str = symbols.convertNumberToI18N(str);\n            if (this.decimalPoint) {\n                buf.append(symbols.decimalSeparator());\n            }\n            buf.append(str);\n        }\n        return true;\n    }\n\n    parse(context, text, position) {\n        const effectiveMin = (context.isStrict() ? this.minWidth : 0);\n        const effectiveMax = (context.isStrict() ? this.maxWidth : 9);\n        const length = text.length;\n        if (position === length) {\n            // valid if whole field is optional, invalid if minimum width\n            return (effectiveMin > 0 ? ~position : position);\n        }\n        if (this.decimalPoint) {\n            if (text[position] !== context.symbols().decimalSeparator()) {\n                // valid if whole field is optional, invalid if minimum width\n                return (effectiveMin > 0 ? ~position : position);\n            }\n            position++;\n        }\n        const minEndPos = position + effectiveMin;\n        if (minEndPos > length) {\n            return ~position;  // need at least min width digits\n        }\n        const maxEndPos = Math.min(position + effectiveMax, length);\n        let total = 0;  // can use int because we are only parsing up to 9 digits\n        let pos = position;\n        while (pos < maxEndPos) {\n            const ch = text.charAt(pos++);\n            const digit = context.symbols().convertToDigit(ch);\n            if (digit < 0) {\n                if (pos < minEndPos) {\n                    return ~position;  // need at least min width digits\n                }\n                pos--;\n                break;\n            }\n            total = total * 10 + digit;\n        }\n        const moveLeft = pos - position;\n        const scale = Math.pow(10, moveLeft);\n        const value = this.convertFromFraction(total, scale);\n        return context.setParsedField(this.field, value, position, pos);\n    }\n\n    /**\n     *\n     * @param {Number} value  the value to convert, must be valid for this rule\n     * @param {String} zeroDigit  the character for zero\n     * @return {String} the value as a fraction within the range, from 0 to 1, not null\n     */\n    convertToFraction(value, zeroDigit) {\n        const range = this.field.range();\n        range.checkValidValue(value, this.field);\n        const _min = range.minimum();\n        const _range = range.maximum() - _min + 1;\n        const _value = value - _min;\n        const _scaled = MathUtil.intDiv((_value * 1000000000),  _range);\n        let fraction = `${_scaled}`;\n        while(fraction.length < 9){\n            fraction = zeroDigit + fraction;\n        }\n        return fraction;\n    }\n\n    /**\n     *\n     * @param {Number} total  the fraction to convert, not null\n     * @param {Number} scale  the scale, not null\n     * @return {Number} the value of the field, valid for this rule\n     * @throws DateTimeException if the value cannot be converted\n     */\n    convertFromFraction(total, scale) {\n        const range = this.field.range();\n        const _min = range.minimum();\n        const _range = range.maximum() - _min + 1;\n        const _value = MathUtil.intDiv((total * _range), scale);\n        return _value;\n    }\n\n    toString() {\n        const decimal = (this.decimalPoint ? ',DecimalPoint' : '');\n        return `Fraction(${this.field},${this.minWidth},${this.maxWidth}${decimal})`;\n    }\n}\n\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert } from '../../assert';\nimport { ArithmeticException, DateTimeException, IllegalArgumentException } from '../../errors';\nimport { MathUtil } from '../../MathUtil';\n\nimport { IsoChronology } from '../../chrono/IsoChronology';\n\nimport { SignStyle } from '../SignStyle';\n\n\nconst MAX_WIDTH = 15; // can't parse all numbers with more then 15 digits in javascript\n\nconst EXCEED_POINTS = [\n    0,\n    10,\n    100,\n    1000,\n    10000,\n    100000,\n    1000000,\n    10000000,\n    100000000,\n    1000000000\n];\n\n/**\n * @private\n */\nexport class NumberPrinterParser {\n\n    /**\n     * Constructor.\n     *\n     * @param field  the field to print, not null\n     * @param minWidth  the minimum field width, from 1 to 19\n     * @param maxWidth  the maximum field width, from minWidth to 19\n     * @param signStyle  the positive/negative sign style, not null\n     * @param subsequentWidth  the width of subsequent non-negative numbers, 0 or greater,\n     *  -1 if fixed width due to active adjacent parsing\n     */\n    constructor(field, minWidth, maxWidth, signStyle, subsequentWidth=0){\n        this._field = field;\n        this._minWidth = minWidth;\n        this._maxWidth = maxWidth;\n        this._signStyle = signStyle;\n        this._subsequentWidth = subsequentWidth;\n    }\n\n    field(){ return this._field;}\n    minWidth(){ return this._minWidth;}\n    maxWidth(){ return this._maxWidth;}\n    signStyle(){ return this._signStyle;}\n\n    withFixedWidth() {\n        if (this._subsequentWidth === -1) {\n            return this;\n        }\n        return new NumberPrinterParser(this._field, this._minWidth, this._maxWidth, this._signStyle, -1);\n    }\n\n    withSubsequentWidth(subsequentWidth) {\n        return new NumberPrinterParser(this._field, this._minWidth, this._maxWidth, this._signStyle, this._subsequentWidth + subsequentWidth);\n    }\n\n    _isFixedWidth() {\n        return this._subsequentWidth === -1 ||\n            (this._subsequentWidth > 0 && this._minWidth === this._maxWidth && this._signStyle === SignStyle.NOT_NEGATIVE);\n    }\n\n    print(context, buf) {\n        const contextValue = context.getValue(this._field);\n        if (contextValue == null) {\n            return false;\n        }\n        const value = this._getValue(context, contextValue);\n        const symbols = context.symbols();\n        let str = `${Math.abs(value)}`;\n        if (str.length > this._maxWidth) {\n            throw new DateTimeException(`Field ${this._field \n            } cannot be printed as the value ${value \n            } exceeds the maximum print width of ${this._maxWidth}`);\n        }\n        str = symbols.convertNumberToI18N(str);\n\n        if (value >= 0) {\n            switch (this._signStyle) {\n                case SignStyle.EXCEEDS_PAD:\n                    if (this._minWidth < MAX_WIDTH && value >= EXCEED_POINTS[this._minWidth]) {\n                        buf.append(symbols.positiveSign());\n                    }\n                    break;\n                case SignStyle.ALWAYS:\n                    buf.append(symbols.positiveSign());\n                    break;\n            }\n        } else {\n            switch (this._signStyle) {\n                case SignStyle.NORMAL:\n                case SignStyle.EXCEEDS_PAD:\n                case SignStyle.ALWAYS:\n                    buf.append(symbols.negativeSign());\n                    break;\n                case SignStyle.NOT_NEGATIVE:\n                    throw new DateTimeException(`Field ${this._field \n                    } cannot be printed as the value ${value \n                    } cannot be negative according to the SignStyle`);\n            }\n        }\n        for (let i = 0; i < this._minWidth - str.length; i++) {\n            buf.append(symbols.zeroDigit());\n        }\n        buf.append(str);\n        return true;\n    }\n\n    parse(context, text, position){\n        const length = text.length;\n        if (position === length) {\n            return ~position;\n        }\n        assert(position>=0 && position<length);\n        const sign = text.charAt(position);  // IOOBE if invalid position\n        let negative = false;\n        let positive = false;\n        if (sign === context.symbols().positiveSign()) {\n            if (this._signStyle.parse(true, context.isStrict(), this._minWidth === this._maxWidth) === false) {\n                return ~position;\n            }\n            positive = true;\n            position++;\n        } else if (sign === context.symbols().negativeSign()) {\n            if (this._signStyle.parse(false, context.isStrict(), this._minWidth === this._maxWidth) === false) {\n                return ~position;\n            }\n            negative = true;\n            position++;\n        } else {\n            if (this._signStyle === SignStyle.ALWAYS && context.isStrict()) {\n                return ~position;\n            }\n        }\n        const effMinWidth = (context.isStrict() || this._isFixedWidth() ? this._minWidth : 1);\n        const minEndPos = position + effMinWidth;\n        if (minEndPos > length) {\n            return ~position;\n        }\n        let effMaxWidth = (context.isStrict() || this._isFixedWidth() ? this._maxWidth : 9) + Math.max(this._subsequentWidth, 0);\n        let total = 0;\n        let pos = position;\n        for (let pass = 0; pass < 2; pass++) {\n            const maxEndPos = Math.min(pos + effMaxWidth, length);\n            while (pos < maxEndPos) {\n                const ch = text.charAt(pos++);\n                const digit = context.symbols().convertToDigit(ch);\n                if (digit < 0) {\n                    pos--;\n                    if (pos < minEndPos) {\n                        return ~position;  // need at least min width digits\n                    }\n                    break;\n                }\n                if ((pos - position) > MAX_WIDTH) {\n                    throw new ArithmeticException('number text exceeds length');\n                } else {\n                    total = total * 10 + digit;\n                }\n            }\n            if (this._subsequentWidth > 0 && pass === 0) {\n                // re-parse now we know the correct width\n                const parseLen = pos - position;\n                effMaxWidth = Math.max(effMinWidth, parseLen - this._subsequentWidth);\n                pos = position;\n                total = 0;\n            } else {\n                break;\n            }\n        }\n        if (negative) {\n            if (total === 0 && context.isStrict()) {\n                return ~(position - 1);  // minus zero not allowed\n            }\n            if(total !== 0) {\n                total = -total;\n            }\n        } else if (this._signStyle === SignStyle.EXCEEDS_PAD && context.isStrict()) {\n            const parseLen = pos - position;\n            if (positive) {\n                if (parseLen <= this._minWidth) {\n                    return ~(position - 1);  // '+' only parsed if minWidth exceeded\n                }\n            } else {\n                if (parseLen > this._minWidth) {\n                    return ~position;  // '+' must be parsed if minWidth exceeded\n                }\n            }\n        }\n        return this._setValue(context, total, position, pos);\n    }\n\n    /**\n     * Gets the value to output.\n     * (This is needed to allow e.g. ReducedPrinterParser to override this and change the value!\n     *\n     * @param context  the context\n     * @param value  the value of the field, not null\n     * @return the value\n     * @private\n     */\n    _getValue(context, value) {\n        return value;\n    }\n\n    /**\n     * Stores the value.\n     *\n     * @param context  the context to store into, not null\n     * @param value  the value\n     * @param errorPos  the position of the field being parsed\n     * @param successPos  the position after the field being parsed\n     * @return the new position\n     */\n    _setValue(context, value, errorPos, successPos) {\n        return context.setParsedField(this._field, value, errorPos, successPos);\n    }\n\n    toString() {\n        if (this._minWidth === 1 && this._maxWidth === MAX_WIDTH && this._signStyle === SignStyle.NORMAL) {\n            return `Value(${this._field})`;\n        }\n        if (this._minWidth === this._maxWidth && this._signStyle === SignStyle.NOT_NEGATIVE) {\n            return `Value(${this._field},${this._minWidth})`;\n        }\n        return `Value(${this._field},${this._minWidth},${this._maxWidth},${this._signStyle})`;\n    }\n\n}\n//-----------------------------------------------------------------------\n/**\n * Prints and parses a reduced numeric date-time field.\n * @private\n */\nexport class ReducedPrinterParser extends NumberPrinterParser {\n\n    /**\n     * Constructor.\n     *\n     * @param {TemporalField} field  the field to print, validated not null\n     * @param {number} width  the field width, from 1 to 10\n     * @param {number} maxWidth  the field max width, from 1 to 10\n     * @param {number} baseValue  the base value\n     * @param {ChronoLocalDate} baseDate  the base date\n     */\n    constructor(field, width, maxWidth, baseValue, baseDate) {\n        super(field, width, maxWidth, SignStyle.NOT_NEGATIVE);\n        if (width < 1 || width > 10) {\n            throw new IllegalArgumentException(`The width must be from 1 to 10 inclusive but was ${width}`);\n        }\n        if (maxWidth < 1 || maxWidth > 10) {\n            throw new IllegalArgumentException(`The maxWidth must be from 1 to 10 inclusive but was ${maxWidth}`);\n        }\n        if (maxWidth < width) {\n            throw new IllegalArgumentException('The maxWidth must be greater than the width');\n        }\n        if (baseDate === null) {\n            if (field.range().isValidValue(baseValue) === false) {\n                throw new IllegalArgumentException('The base value must be within the range of the field');\n            }\n            if ((baseValue + EXCEED_POINTS[width]) > MathUtil.MAX_SAFE_INTEGER) {\n                throw new DateTimeException('Unable to add printer-parser as the range exceeds the capacity of an int');\n            }\n        }\n        this._baseValue = baseValue;\n        this._baseDate = baseDate;\n    }\n\n    /**\n     *\n     * @param {DateTimePrintContext} context\n     * @param {number} value\n     */\n    _getValue(context, value) {\n        const absValue = Math.abs(value);\n        let baseValue = this._baseValue;\n        if (this._baseDate !== null) {\n            // TODO: in threetenbp the following line is used, but we dont have Chronology yet,\n            // let chrono = Chronology.from(context.getTemporal());\n            // so let's use IsoChronology for now\n            context.temporal();\n            const chrono = IsoChronology.INSTANCE;\n            baseValue = chrono.date(this._baseDate).get(this._field);\n        }\n        if (value >= baseValue && value < baseValue + EXCEED_POINTS[this._minWidth]) {\n            return absValue % EXCEED_POINTS[this._minWidth];\n        }\n        return absValue % EXCEED_POINTS[this._maxWidth];\n    }\n\n    /**\n     *\n     * @param {DateTimeParseContext} context\n     * @param {number} value\n     * @param {number} errorPos\n     * @param {number} successPos\n     */\n    _setValue(context, value, errorPos, successPos) {\n        let baseValue = this._baseValue;\n        if (this._baseDate != null) {\n            const chrono = context.getEffectiveChronology();\n            baseValue = chrono.date(this._baseDate).get(this._field);\n            // TODO: not implemented??\n            // context.addChronologyChangedParser(this, value, errorPos, successPos);\n        }\n        const parseLen = successPos - errorPos;\n        if (parseLen === this._minWidth && value >= 0) {\n            const range = EXCEED_POINTS[this._minWidth];\n            const lastPart = baseValue % range;\n            const basePart = baseValue - lastPart;\n            if (baseValue > 0) {\n                value = basePart + value;\n            } else {\n                value = basePart - value;\n            }\n            if (value < baseValue) {\n                value += range;\n            }\n        }\n        return context.setParsedField(this._field, value, errorPos, successPos);\n    }\n\n    withFixedWidth() {\n        if (this._subsequentWidth === -1) {\n            return this;\n        }\n        return new ReducedPrinterParser(this._field, this._minWidth, this._maxWidth, this._baseValue, this._baseDate, -1);\n    }\n\n    /**\n     *\n     * @param {number} subsequentWidth\n     * @returns {ReducedPrinterParser}\n     */\n    withSubsequentWidth(subsequentWidth) {\n        return new ReducedPrinterParser(this._field, this._minWidth, this._maxWidth, this._baseValue, this._baseDate,\n            this._subsequentWidth + subsequentWidth);\n    }\n\n    /**\n     *\n     * @param {DateTimeParseContext} context\n     */\n    isFixedWidth(context) {\n        if (context.isStrict() === false) {\n            return false;\n        }\n        return super.isFixedWidth(context);\n    }\n\n    toString() {\n        return `ReducedValue(${this._field},${this._minWidth},${this._maxWidth},${this._baseDate != null ? this._baseDate : this._baseValue})`;\n    }\n}\n\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from '../../assert';\nimport { IllegalArgumentException } from '../../errors';\nimport { MathUtil } from '../../MathUtil';\n\nimport { ChronoField } from '../../temporal/ChronoField';\n\n//-----------------------------------------------------------------------\nconst PATTERNS = [\n    '+HH', '+HHmm', '+HH:mm', '+HHMM', '+HH:MM', '+HHMMss', '+HH:MM:ss', '+HHMMSS', '+HH:MM:SS'\n];\n/**\n * Prints or parses an offset ID.\n * @private\n */\nexport class OffsetIdPrinterParser  {\n\n    /**\n     * Constructor.\n     *\n     * @param {string} noOffsetText  the text to use for UTC, not null\n     * @param {string} pattern  the pattern\n     */\n    constructor(noOffsetText, pattern) {\n        requireNonNull(noOffsetText, 'noOffsetText');\n        requireNonNull(pattern, 'pattern');\n        this.noOffsetText = noOffsetText;\n        this.type = this._checkPattern(pattern);\n    }\n\n    /**\n     * @param {String} pattern\n     * @return {number}\n     */\n    _checkPattern(pattern) {\n        for (let i = 0; i < PATTERNS.length; i++) {\n            if (PATTERNS[i] === pattern) {\n                return i;\n            }\n        }\n        throw new IllegalArgumentException(`Invalid zone offset pattern: ${pattern}`);\n    }\n\n    /**\n     * @param {DateTimePrintContext} context\n     * @param {StringBuilder} buf\n     * @return {boolean}\n     */\n    print(context, buf) {\n        const offsetSecs = context.getValue(ChronoField.OFFSET_SECONDS);\n        if (offsetSecs == null) {\n            return false;\n        }\n        const totalSecs = MathUtil.safeToInt(offsetSecs);\n        if (totalSecs === 0) {\n            buf.append(this.noOffsetText);\n        } else {\n            const absHours = Math.abs(MathUtil.intMod(MathUtil.intDiv(totalSecs, 3600), 100));  // anything larger than 99 silently dropped\n            const absMinutes = Math.abs(MathUtil.intMod(MathUtil.intDiv(totalSecs, 60), 60));\n            const absSeconds = Math.abs(MathUtil.intMod(totalSecs, 60));\n            const bufPos = buf.length();\n            let output = absHours;\n            buf.append(totalSecs < 0 ? '-' : '+')\n                .appendChar((`${MathUtil.intDiv(absHours, 10)}0`)).appendChar(`${MathUtil.intMod(absHours, 10)}0`);\n            if (this.type >= 3 || (this.type >= 1 && absMinutes > 0)) {\n                buf.append((this.type % 2) === 0 ? ':' : '')\n                    .appendChar((`${MathUtil.intDiv(absMinutes, 10)}0`)).appendChar((`${absMinutes % 10}0`));\n                output += absMinutes;\n                if (this.type >= 7 || (this.type >= 5 && absSeconds > 0)) {\n                    buf.append((this.type % 2) === 0 ? ':' : '')\n                        .appendChar((`${MathUtil.intDiv(absSeconds, 10)}0`)).appendChar((`${absSeconds % 10}0`));\n                    output += absSeconds;\n                }\n            }\n            if (output === 0) {\n                buf.setLength(bufPos);\n                buf.append(this.noOffsetText);\n            }\n        }\n        return true;\n    }\n\n    /**\n     * @param {DateTimeParseContext} context\n     * @param {String} text\n     * @param {number} position\n     * @return {number}\n     */\n    parse(context, text, position) {\n        const length = text.length;\n        const noOffsetLen = this.noOffsetText.length;\n        if (noOffsetLen === 0) {\n            if (position === length) {\n                return context.setParsedField(ChronoField.OFFSET_SECONDS, 0, position, position);\n            }\n        } else {\n            if (position === length) {\n                return ~position;\n            }\n            if (context.subSequenceEquals(text, position, this.noOffsetText, 0, noOffsetLen)) {\n                return context.setParsedField(ChronoField.OFFSET_SECONDS, 0, position, position + noOffsetLen);\n            }\n        }\n\n        // parse normal plus/minus offset\n        const sign = text[position];  // IOOBE if invalid position\n        if (sign === '+' || sign === '-') {\n            // starts\n            const negative = (sign === '-' ? -1 : 1);\n            const array = [0,0,0,0];\n            array[0] = position + 1;\n            if ((this._parseNumber(array, 1, text, true) ||\n                this._parseNumber(array, 2, text, this.type >=3) ||\n                this._parseNumber(array, 3, text, false)) === false) {\n                // success\n                const offsetSecs = MathUtil.safeZero(negative * (array[1] * 3600 + array[2] * 60 + array[3]));\n                return context.setParsedField(ChronoField.OFFSET_SECONDS, offsetSecs, position, array[0]);\n            }\n        }\n        // handle special case of empty no offset text\n        if (noOffsetLen === 0) {\n            return context.setParsedField(ChronoField.OFFSET_SECONDS, 0, position, position + noOffsetLen);\n        }\n        return ~position;\n    }\n\n    /**\n     * Parse a two digit zero-prefixed number.\n     *\n     * @param {number[]} array  the array of parsed data, 0=pos,1=hours,2=mins,3=secs, not null\n     * @param {number} arrayIndex  the index to parse the value into\n     * @param {string} parseText  the offset ID, not null\n     * @param {boolean} required  whether this number is required\n     * @return {boolean} true if an error occurred\n     */\n    _parseNumber(array, arrayIndex, parseText, required) {\n        if ((this.type + 3) / 2 < arrayIndex) {\n            return false;  // ignore seconds/minutes\n        }\n        let pos = array[0];\n        if ((this.type % 2) === 0 && arrayIndex > 1) {\n            if (pos + 1 > parseText.length || parseText[pos] !== ':') {\n                return required;\n            }\n            pos++;\n        }\n        if (pos + 2 > parseText.length) {\n            return required;\n        }\n        const ch1 = parseText[pos++];\n        const ch2 = parseText[pos++];\n        if (ch1 < '0' || ch1 > '9' || ch2 < '0' || ch2 > '9') {\n            return required;\n        }\n        const value = (ch1.charCodeAt(0) - 48) * 10 + (ch2.charCodeAt(0) - 48);\n        if (value < 0 || value > 59) {\n            return required;\n        }\n        array[arrayIndex] = value;\n        array[0] = pos;\n        return false;\n    }\n\n\n    toString() {\n        const converted = this.noOffsetText.replace('\\'', '\\'\\'');\n        return `Offset(${PATTERNS[this.type]},'${converted}')`;\n    }\n}\nOffsetIdPrinterParser.INSTANCE_ID = new OffsetIdPrinterParser('Z', '+HH:MM:ss');\nOffsetIdPrinterParser.PATTERNS = PATTERNS;\n\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert } from '../../assert';\n\nimport { DateTimeException } from '../../errors';\n\n/**\n * Pads the output to a fixed width.\n * @private\n */\nexport class PadPrinterParserDecorator {\n\n    /**\n     * Constructor.\n     *\n     * @param printerParser  the printer, not null\n     * @param padWidth  the width to pad to, 1 or greater\n     * @param padChar  the pad character\n     */\n    constructor(printerParser, padWidth, padChar) {\n        // input checked by DateTimeFormatterBuilder\n        this._printerParser = printerParser;\n        this._padWidth = padWidth;\n        this._padChar = padChar;\n    }\n\n    print(context, buf) {\n        const preLen = buf.length();\n        if (this._printerParser.print(context, buf) === false) {\n            return false;\n        }\n        const len = buf.length() - preLen;\n        if (len > this._padWidth) {\n            throw new DateTimeException(\n                `Cannot print as output of ${len} characters exceeds pad width of ${this._padWidth}`);\n        }\n        for (let i = 0; i < this._padWidth - len; i++) {\n            buf.insert(preLen, this._padChar);\n        }\n        return true;\n    }\n\n    parse(context, text, position) {\n        // cache context before changed by decorated parser\n        const strict = context.isStrict();\n        const caseSensitive = context.isCaseSensitive();\n        // parse\n        assert(!(position > text.length));\n        assert(position >= 0);\n        if (position === text.length) {\n            return ~position;  // no more characters in the string\n        }\n        let endPos = position + this._padWidth;\n        if (endPos > text.length) {\n            if (strict) {\n                return ~position;  // not enough characters in the string to meet the parse width\n            }\n            endPos = text.length;\n        }\n        let pos = position;\n        while (pos < endPos &&\n        (caseSensitive ? text[pos] === this._padChar : context.charEquals(text[pos], this._padChar))) {\n            pos++;\n        }\n        text = text.substring(0, endPos);\n        const resultPos = this._printerParser.parse(context, text, pos);\n        if (resultPos !== endPos && strict) {\n            return ~(position + pos);  // parse of decorated field didn't parse to the end\n        }\n        return resultPos;\n    }\n\n    toString() {\n        return `Pad(${this._printerParser},${this._padWidth}${(this._padChar === ' ' ? ')' : `,'${this._padChar}')`)}`;\n    }\n}\n\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { Enum } from '../../Enum';\n\n/**\n * @private\n */\nexport class SettingsParser extends Enum {\n\n    print(/*context, buf*/) {\n        return true;  // nothing to do here\n    }\n\n    parse(context, text, position) {\n        // using ordinals to avoid javac synthetic inner class\n        switch (this) {\n            case SettingsParser.SENSITIVE:   context.setCaseSensitive(true); break;\n            case SettingsParser.INSENSITIVE: context.setCaseSensitive(false); break;\n            case SettingsParser.STRICT:      context.setStrict(true); break;\n            case SettingsParser.LENIENT:     context.setStrict(false); break;\n        }\n        return position;\n    }\n\n    toString() {\n        // using ordinals to avoid javac synthetic inner class\n        switch (this) {\n            case SettingsParser.SENSITIVE:   return 'ParseCaseSensitive(true)';\n            case SettingsParser.INSENSITIVE: return 'ParseCaseSensitive(false)';\n            case SettingsParser.STRICT:      return 'ParseStrict(true)';\n            case SettingsParser.LENIENT:     return 'ParseStrict(false)';\n        }\n    }\n}\n\nSettingsParser.SENSITIVE = new SettingsParser('SENSITIVE');\nSettingsParser.INSENSITIVE = new SettingsParser('INSENSITIVE');\nSettingsParser.STRICT = new SettingsParser('STRICT');\nSettingsParser.LENIENT = new SettingsParser('LENIENT');\n\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert } from '../../assert';\n\n/**\n * Prints or parses a string literal.\n * @private\n */\nexport class StringLiteralPrinterParser {\n\n    constructor(literal) {\n        this._literal = literal;\n    }\n\n    print(context, buf) {\n        buf.append(this._literal);\n        return true;\n    }\n\n    parse(context, text, position) {\n        const length = text.length;\n        assert(!(position > length || position < 0));\n\n        if (context.subSequenceEquals(text, position, this._literal, 0, this._literal.length) === false) {\n            return ~position;\n        }\n        return position + this._literal.length;\n    }\n\n    toString() {\n        const converted = this._literal.replace(\"'\", \"''\");\n        return `'${converted}'`;\n    }\n}\n\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE.md in the root directory of this source tree)\n */\n\nimport { requireNonNull, requireInstance } from './assert';\nimport { DateTimeException, UnsupportedTemporalTypeException } from './errors';\nimport { MathUtil } from './MathUtil';\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { Clock } from './Clock';\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\nimport { DateTimeFormatterBuilder } from './format/DateTimeFormatterBuilder';\nimport { IsoChronology } from './chrono/IsoChronology';\nimport { LocalDate } from './LocalDate';\nimport { Month } from './Month';\nimport { TemporalAccessor } from './temporal/TemporalAccessor';\nimport { TemporalQuery, createTemporalQuery } from './temporal/TemporalQuery';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { ValueRange } from './temporal/ValueRange';\nimport { Year } from './Year';\nimport { ZoneId } from './ZoneId';\n\n/**\n * A month-day in the ISO-8601 calendar system, such as `--12-03`.\n *\n * {@link MonthDay} is an immutable date-time object that represents the combination\n * of a year and month. Any field that can be derived from a month and day, such as\n * quarter-of-year, can be obtained.\n *\n * This class does not store or represent a year, time or time-zone.\n * For example, the value \"December 3rd\" can be stored in a {@link MonthDay}.\n *\n * Since a {@link MonthDay} does not possess a year, the leap day of\n * February 29th is considered valid.\n *\n * This class implements {@link TemporalAccessor} rather than {@link Temporal}.\n * This is because it is not possible to define whether February 29th is valid or not\n * without external information, preventing the implementation of plus/minus.\n * Related to this, {@link MonthDay} only provides access to query and set the fields\n * {@link MONTH_OF_YEAR} and {@link DAY_OF_MONTH}.\n *\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. It is equivalent to the proleptic Gregorian calendar\n * system, in which today's rules for leap years are applied for all time.\n * For most applications written today, the ISO-8601 rules are entirely suitable.\n * However, any application that makes use of historical dates, and requires them\n * to be accurate will find the ISO-8601 approach unsuitable.\n *\n * ### Specification for implementors\n *\n * This class is immutable and thread-safe.\n */\nexport class MonthDay extends TemporalAccessor {\n    /**\n     * function overloading for {@link MonthDay.now}\n     *\n     * if called with 0 argument {@link MonthDay.now0} is executed,\n     *\n     * if called with 1 argument and first argument is an instance of ZoneId, then {@link MonthDay.nowZoneId} is executed,\n     *\n     * otherwise {@link MonthDay.nowClock} is executed\n     *\n     * @param {?(ZoneId|Clock)} zoneIdOrClock\n     * @returns {MonthDay}\n     */\n    static now(zoneIdOrClock) {\n        if (arguments.length === 0) {\n            return MonthDay.now0();\n        } else if (arguments.length === 1 && zoneIdOrClock instanceof ZoneId) {\n            return MonthDay.nowZoneId(zoneIdOrClock);\n        } else {\n            return MonthDay.nowClock(zoneIdOrClock);\n        }\n    }\n    /**\n     * Obtains the current month-day from the system clock in the default time-zone.\n     *\n     * This will query the system clock (see {@link Clock#systemDefaultZone}) in the default\n     * time-zone to obtain the current month-day.\n     *\n     * Using this method will prevent the ability to use an alternate clock for testing\n     * because the clock is hard-coded.\n     *\n     * @return {MonthDay} the current month-day using the system clock and default time-zone, not null\n     */\n    static now0() {\n        return this.nowClock(Clock.systemDefaultZone());\n    }\n\n    /**\n     * Obtains the current month-day from the system clock in the specified time-zone.\n     *\n     * This will query the system clock (see {@link Clock#system}) to obtain the current month-day.\n     * Specifying the time-zone avoids dependence on the default time-zone.\n     *\n     * Using this method will prevent the ability to use an alternate clock for testing\n     * because the clock is hard-coded.\n     *\n     * @param {ZoneId} zone  the zone ID to use, not null\n     * @return {MonthDay} the current month-day using the system clock, not null\n     */\n    static nowZoneId(zone) {\n        requireNonNull(zone, 'zone');\n        return this.nowClock(Clock.system(zone));\n    }\n\n    /**\n     * Obtains the current month-day from the specified clock.\n     *\n     * This will query the specified clock to obtain the current month-day.\n     * Using this method allows the use of an alternate clock for testing.\n     * The alternate clock may be introduced using dependency injection (see {@link Clock}).\n     *\n     * @param {Clock} clock  the clock to use, not null\n     * @return {MonthDay} the current month-day, not null\n     */\n    static nowClock(clock) {\n        requireNonNull(clock, 'clock');\n        const now = LocalDate.now(clock);  // called once\n        return MonthDay.of(now.month(), now.dayOfMonth());\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link MonthDay.of}\n     *\n     * if called with 2 argument and first argument is an instance of Month, then {@link MonthDay.ofMonthNumber} is executed,\n     *\n     * otherwise {@link MonthDay.ofNumberNumber} is executed\n     *\n     * @param {!(Month|number)} monthOrNumber\n     * @param {?number} number\n     * @returns {MonthDay}\n     */\n    static of(monthOrNumber, number) {\n        if (arguments.length === 2 && monthOrNumber instanceof Month) {\n            return MonthDay.ofMonthNumber(monthOrNumber, number);\n        } else {\n            return MonthDay.ofNumberNumber(monthOrNumber, number);\n        }\n    }\n    /**\n     * Obtains an instance of {@link MonthDay}.\n     *\n     * The day-of-month must be valid for the month within a leap year.\n     * Hence, for February, day 29 is valid.\n     *\n     * For example, passing in April and day 31 will throw an exception, as\n     * there can never be April 31st in any year. By contrast, passing in\n     * February 29th is permitted, as that month-day can sometimes be valid.\n     *\n     * @param {Month} month  the month-of-year to represent, not null\n     * @param {number} dayOfMonth  the day-of-month to represent, from 1 to 31\n     * @return {MonthDay} the month-day, not null\n     * @throws DateTimeException if the value of any field is out of range\n     * @throws DateTimeException if the day-of-month is invalid for the month\n     */\n    static ofMonthNumber(month, dayOfMonth) {\n        requireNonNull(month, 'month');\n        ChronoField.DAY_OF_MONTH.checkValidValue(dayOfMonth);\n        if (dayOfMonth > month.maxLength()) {\n            throw new DateTimeException(`Illegal value for DayOfMonth field, value ${dayOfMonth \n            } is not valid for month ${month.toString()}`);\n        }\n        return new MonthDay(month.value(), dayOfMonth);\n    }\n\n    /**\n     * Obtains an instance of {@link MonthDay}.\n     *\n     * The day-of-month must be valid for the month within a leap year.\n     * Hence, for month 2 (February), day 29 is valid.\n     *\n     * For example, passing in month 4 (April) and day 31 will throw an exception, as\n     * there can never be April 31st in any year. By contrast, passing in\n     * February 29th is permitted, as that month-day can sometimes be valid.\n     *\n     * @param {number} month  the month-of-year to represent, from 1 (January) to 12 (December)\n     * @param {number} dayOfMonth  the day-of-month to represent, from 1 to 31\n     * @return {MonthDay} the month-day, not null\n     * @throws DateTimeException if the value of any field is out of range\n     * @throws DateTimeException if the day-of-month is invalid for the month\n     */\n    static ofNumberNumber(month, dayOfMonth) {\n        requireNonNull(month, 'month');\n        requireNonNull(dayOfMonth, 'dayOfMonth');\n        return MonthDay.of(Month.of(month), dayOfMonth);\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link MonthDay} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link MonthDay}.\n     *\n     * The conversion extracts the MONTH_OF_YEAR (see {@link ChronoField#MONTH_OF_YEAR}) and\n     * DAY_OF_MONTH (see {@link ChronoField#DAY_OF_MONTH}) fields.\n     * The extraction is only permitted if the date-time has an ISO chronology.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used in queries via method reference, {@link MonthDay::from}.\n     *\n     * @param {TemporalAccessor} temporal  the temporal object to convert, not null\n     * @return {MonthDay} the month-day, not null\n     * @throws DateTimeException if unable to convert to a {@link MonthDay}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        requireInstance(temporal, TemporalAccessor, 'temporal');\n        if (temporal instanceof MonthDay) {\n            return temporal;\n        }\n        try {\n            /* TODO: only IsoChronology for now\n            if (IsoChronology.INSTANCE.equals(Chronology.from(temporal)) == false) {\n                temporal = LocalDate.from(temporal);\n            }*/\n            return MonthDay.of(temporal.get(ChronoField.MONTH_OF_YEAR), temporal.get(ChronoField.DAY_OF_MONTH));\n        } catch (ex) {\n            throw new DateTimeException(`Unable to obtain MonthDay from TemporalAccessor: ${ \n                temporal}, type ${temporal && temporal.constructor != null ? temporal.constructor.name : ''}`);\n        }\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link MonthDay.parse}\n     *\n     * if called with 1 argument, then {@link MonthDay.parseString} is executed,\n     *\n     * otherwise {@link MonthDay.parseStringFormatter} is executed\n     *\n     * @param {!(String)} text\n     * @param {?DateTimeFormatter} formatter\n     * @returns {MonthDay}\n     */\n    static parse(text, formatter) {\n        if (arguments.length === 1) {\n            return MonthDay.parseString(text);\n        } else {\n            return MonthDay.parseStringFormatter(text, formatter);\n        }\n    }\n\n    /**\n     * Obtains an instance of {@link MonthDay} from a text string such as `--12-03`.\n     *\n     * The string must represent a valid month-day.\n     * The format is `--MM-dd`.\n     *\n     * @param {String} text  the text to parse such as \"--12-03\", not null\n     * @return {MonthDay} the parsed month-day, not null\n     * @throws DateTimeParseException if the text cannot be parsed\n     */\n    static parseString(text) {\n        return MonthDay.parseStringFormatter(text, PARSER);\n    }\n\n    /**\n     * Obtains an instance of {@link MonthDay} from a text string using a specific formatter.\n     *\n     * The text is parsed using the formatter, returning a month-day.\n     *\n     * @param {String} text  the text to parse, not null\n     * @param {DateTimeFormatter} formatter  the formatter to use, not null\n     * @return {MonthDay} the parsed month-day, not null\n     * @throws DateTimeParseException if the text cannot be parsed\n     */\n    static parseStringFormatter(text, formatter) {\n        requireNonNull(text, 'text');\n        requireNonNull(formatter, 'formatter');\n        requireInstance(formatter, DateTimeFormatter, 'formatter');\n        return formatter.parse(text, MonthDay.FROM);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Constructor, previously validated.\n     *\n     * @param {number} month  the month-of-year to represent, validated from 1 to 12\n     * @param {number} dayOfMonth  the day-of-month to represent, validated from 1 to 29-31\n     * @private\n     */\n    constructor(month, dayOfMonth) {\n        super();\n        this._month = MathUtil.safeToInt(month);\n        this._day = MathUtil.safeToInt(dayOfMonth);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the month-of-year field from 1 to 12.\n     *\n     * This method returns the month as an `int` from 1 to 12.\n     * Application code is frequently clearer if the enum {@link Month}\n     * is used by calling {@link getMonth}.\n     *\n     * @return {number} the month-of-year, from 1 to 12\n     * @see #month()\n     */\n    monthValue() {\n        return this._month;\n    }\n\n    /**\n     * Gets the month-of-year field using the {@link Month} enum.\n     *\n     * This method returns the enum {@link Month} for the month.\n     * This avoids confusion as to what `int` values mean.\n     * If you need access to the primitive `int` value then the enum\n     * provides the int value (see {@link Month#getValue}).\n     *\n     * @return {Month} the month-of-year, not null\n     * @see #getMonthValue()\n     */\n    month() {\n        return Month.of(this._month);\n    }\n\n    /**\n     * Gets the day-of-month field.\n     *\n     * This method returns the primitive `int` value for the day-of-month.\n     *\n     * @return {number} the day-of-month, from 1 to 31\n     */\n    dayOfMonth() {\n        return this._day;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this month-day can be queried for the specified field.\n     * If false, then calling the range (see {@link range}) and\n     * get (see {@link get}) methods will throw an exception.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this date-time.\n     * The supported fields are:\n     *\n     * * {@link MONTH_OF_YEAR}\n     * * {@link YEAR}\n     *\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.isSupportedBy}\n     * passing `this` as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {TemporalField} field  the field to check, null returns false\n     * @return {boolean} true if the field is supported on this month-day, false if not\n     */\n    isSupported(field) {\n        if (field instanceof ChronoField) {\n            return field === ChronoField.MONTH_OF_YEAR || field === ChronoField.DAY_OF_MONTH;\n        }\n        return field != null && field.isSupportedBy(this);\n    }\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * The range object expresses the minimum and maximum valid values for a field.\n     * This month-day is used to enhance the accuracy of the returned range.\n     * If it is not possible to return the range, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return\n     * appropriate range instances.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n     * passing `this` as the argument.\n     * Whether the range can be obtained is determined by the field.\n     *\n     * @param {TemporalField} field  the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws DateTimeException if the range for the field cannot be obtained\n     */\n    range(field) {\n        if (field === ChronoField.MONTH_OF_YEAR) {\n            return field.range();\n        } else if (field === ChronoField.DAY_OF_MONTH) {\n            return ValueRange.of(1, this.month().minLength(), this.month().maxLength());\n        }\n        return super.range(field);\n    }\n\n    /**\n     * Gets the value of the specified field from this month-day as an `int`.\n     *\n     * This queries this month-day for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this month-day.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field  the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    get(field) {\n        return this.range(field).checkValidIntValue(this.getLong(field), field);\n    }\n\n    /**\n     * Gets the value of the specified field from this month-day as a `long`.\n     *\n     * This queries this month-day for the value for the specified field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this month-day.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field  the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    getLong(field) {\n        requireNonNull(field, 'field');\n        if (field instanceof ChronoField) {\n            switch (field) {\n                // alignedDOW and alignedWOM not supported because they cannot be set in with()\n                case ChronoField.DAY_OF_MONTH: return this._day;\n                case ChronoField.MONTH_OF_YEAR: return this._month;\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.getFrom(this);\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if the year is valid for this month-day.\n     *\n     * This method checks whether this month and day and the input year form\n     * a valid date. This can only return false for February 29th.\n     *\n     * @param {number} year  the year to validate, an out of range value returns false\n     * @return {boolean} true if the year is valid for this month-day\n     * @see Year#isValidMonthDay(MonthDay)\n     */\n    isValidYear(year) {\n        return (this._day === 29 && this._month === 2 && Year.isLeap(year) === false) === false;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link MonthDay} with the month-of-year altered.\n     *\n     * This returns a month-day with the specified month.\n     * If the day-of-month is invalid for the specified month, the day will\n     * be adjusted to the last valid day-of-month.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} month  the month-of-year to set in the returned month-day, from 1 (January) to 12 (December)\n     * @return {MonthDay} based on this month-day with the requested month, not null\n     * @throws DateTimeException if the month-of-year value is invalid\n     */\n    withMonth(month) {\n        return this.with(Month.of(month));\n    }\n\n    /**\n    * Returns a copy of this {@link MonthDay} with the month-of-year altered.\n    *\n    * This returns a month-day with the specified month.\n    * If the day-of-month is invalid for the specified month, the day will\n    * be adjusted to the last valid day-of-month.\n    *\n    * This instance is immutable and unaffected by this method call.\n    *\n    * @param {Month} month  the month-of-year to set in the returned month-day, not null\n    * @return {MonthDay} based on this month-day with the requested month, not null\n    */\n    with(month) {\n        requireNonNull(month, 'month');\n        if (month.value() === this._month) {\n            return this;\n        }\n        const day = Math.min(this._day, month.maxLength());\n        return new MonthDay(month.value(), day);\n    }\n\n    /**\n     * Returns a copy of this {@link MonthDay} with the day-of-month altered.\n     *\n     * This returns a month-day with the specified day-of-month.\n     * If the day-of-month is invalid for the month, an exception is thrown.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} dayOfMonth  the day-of-month to set in the return month-day, from 1 to 31\n     * @return {MonthDay} based on this month-day with the requested day, not null\n     * @throws DateTimeException if the day-of-month value is invalid\n     * @throws DateTimeException if the day-of-month is invalid for the month\n     */\n    withDayOfMonth(dayOfMonth) {\n        if (dayOfMonth === this._day) {\n            return this;\n        }\n        return MonthDay.of(this._month, dayOfMonth);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Queries this month-day using the specified query.\n     *\n     * This queries this month-day using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing `this` as the argument.\n     *\n     * @param {TemporalQuery} query  the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws DateTimeException if unable to query (defined by the query)\n     * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        requireNonNull(query, 'query');\n        requireInstance(query, TemporalQuery, 'query');\n        if (query === TemporalQueries.chronology()) {\n            return IsoChronology.INSTANCE;\n        }\n        return super.query(query);\n    }\n\n    /**\n     * Adjusts the specified temporal object to have this month-day.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with the month and day-of-month changed to be the same as this.\n     *\n     * The adjustment is equivalent to using {@link Temporal#with}\n     * twice, passing {@link ChronoField#MONTH_OF_YEAR} and\n     * {@link ChronoField#DAY_OF_MONTH} as the fields.\n     * If the specified temporal object does not use the ISO calendar system then\n     * a {@link DateTimeException} is thrown.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisMonthDay.adjustInto(temporal);\n     *   temporal = temporal.with(thisMonthDay);\n     * </pre>\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} temporal  the target object to be adjusted, not null\n     * @return {Temporal} the adjusted object, not null\n     * @throws DateTimeException if unable to make the adjustment\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        requireNonNull(temporal, 'temporal');\n        /* TODO: only IsoChronology for now\n        if (Chronology.from(temporal).equals(IsoChronology.INSTANCE) == false) {\n            throw new DateTimeException(\"Adjustment only supported on ISO date-time\");\n        }*/\n        temporal = temporal.with(ChronoField.MONTH_OF_YEAR, this._month);\n        return temporal.with(ChronoField.DAY_OF_MONTH, Math.min(temporal.range(ChronoField.DAY_OF_MONTH).maximum(), this._day));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Combines this month-day with a year to create a {@link LocalDate}.\n     *\n     * This returns a {@link LocalDate} formed from this month-day and the specified year.\n     *\n     * A month-day of February 29th will be adjusted to February 28th in the resulting\n     * date if the year is not a leap year.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} year  the year to use, from MIN_YEAR to MAX_YEAR\n     * @return {LocalDate} the local date formed from this month-day and the specified year, not null\n     * @throws DateTimeException if the year is outside the valid range of years\n     */\n    atYear(year) {\n        return LocalDate.of(year, this._month, this.isValidYear(year) ? this._day : 28);\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * Compares this month-day to another month-day.\n     *\n     * The comparison is based first on value of the month, then on the value of the day.\n     * It is \"consistent with equals\", as defined by {@link Comparable}.\n     *\n     * @param {MonthDay} other  the other month-day to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     */\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, MonthDay, 'other');\n        let cmp = (this._month - other.monthValue());\n        if (cmp === 0) {\n            cmp = (this._day - other.dayOfMonth());\n        }\n        return cmp;\n    }\n\n    /**\n     * Is this month-day after the specified month-day.\n     *\n     * @param {MonthDay} other  the other month-day to compare to, not null\n     * @return {boolean} true if this is after the specified month-day\n     */\n    isAfter(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, MonthDay, 'other');\n        return this.compareTo(other) > 0;\n    }\n\n    /**\n     * Is this month-day before the specified month-day.\n     *\n     * @param {MonthDay} other  the other month-day to compare to, not null\n     * @return {boolean} true if this point is before the specified month-day\n     */\n    isBefore(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, MonthDay, 'other');\n        return this.compareTo(other) < 0;\n    }\n\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this month-day is equal to another month-day.\n     *\n     * The comparison is based on the time-line position of the month-day within a year.\n     *\n     * @param {*} obj  the object to check, null returns false\n     * @return {boolean} true if this is equal to the other month-day\n     */\n    equals(obj) {\n        if (this === obj) {\n            return true;\n        }\n        if (obj instanceof MonthDay) {\n            const other = obj;\n            return this.monthValue() === other.monthValue() && this.dayOfMonth() === other.dayOfMonth();\n        }\n        return false;\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * Outputs this month-day as a string, such as `--12-03`.\n     *\n     * The output will be in the format `--MM-dd`:\n     *\n     * @return {String} a string representation of this month-day, not null\n     */\n    toString() {\n        return `--${\n            this._month < 10 ? '0' : ''}${this._month\n        }${this._day < 10 ? '-0' : '-'}${this._day}`;\n    }\n\n    /**\n     * toJSON() use by JSON.stringify\n     * delegates to toString()\n     *\n     * @return {string}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n    /**\n     * Outputs this month-day as a string using the formatter.\n     *\n     * This month-day will be passed to the formatter\n     * print method (see {@link DateTimeFormatter#format}).\n     *\n     * @param {DateTimeFormatter} formatter  the formatter to use, not null\n     * @return {String} the formatted month-day string, not null\n     * @throws DateTimeException if an error occurs during printing\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        requireInstance(formatter, DateTimeFormatter, 'formatter');\n        return formatter.format(this);\n    }\n\n}\n\nlet PARSER;\n\nexport function _init() {\n    PARSER = new DateTimeFormatterBuilder()\n        .appendLiteral('--')\n        .appendValue(ChronoField.MONTH_OF_YEAR, 2)\n        .appendLiteral('-')\n        .appendValue(ChronoField.DAY_OF_MONTH, 2)\n        .toFormatter();\n\n    MonthDay.FROM = createTemporalQuery('MonthDay.FROM', (temporal) => {\n        return MonthDay.from(temporal);\n    });\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE.md in the root directory of this source tree)\n */\n\nimport { requireNonNull, requireInstance } from './assert';\nimport { DateTimeException, UnsupportedTemporalTypeException } from './errors';\nimport { MathUtil } from './MathUtil';\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { Clock } from './Clock';\nimport { DateTimeFormatterBuilder } from './format/DateTimeFormatterBuilder';\nimport { IsoChronology } from './chrono/IsoChronology';\nimport { LocalDate } from './LocalDate';\nimport { Month } from './Month';\nimport { SignStyle } from './format/SignStyle';\nimport { Temporal } from './temporal/Temporal';\nimport { TemporalField } from './temporal/TemporalField';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { TemporalQuery } from './temporal/TemporalQuery';\nimport { TemporalUnit } from './temporal/TemporalUnit';\nimport { createTemporalQuery } from './temporal/TemporalQuery';\nimport { ValueRange } from './temporal/ValueRange';\nimport { Year } from './Year';\nimport { ZoneId } from './ZoneId';\n\n/**\n * A year-month in the ISO-8601 calendar system, such as `2007-12`.\n *\n * {@link YearMonth} is an immutable date-time object that represents the combination\n * of a year and month. Any field that can be derived from a year and month, such as\n * quarter-of-year, can be obtained.\n *\n * This class does not store or represent a day, time or time-zone.\n * For example, the value \"October 2007\" can be stored in a {@link YearMonth}.\n *\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. It is equivalent to the proleptic Gregorian calendar\n * system, in which today's rules for leap years are applied for all time.\n * For most applications written today, the ISO-8601 rules are entirely suitable.\n * However, any application that makes use of historical dates, and requires them\n * to be accurate will find the ISO-8601 approach unsuitable.\n *\n * ### Specification for implementors\n *\n * This class is immutable and thread-safe.\n */\nexport class YearMonth extends Temporal {\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link YearMonth.now}\n     *\n     * if called with 0 argument {@link YearMonth.now0} is executed,\n     *\n     * if called with 1 argument and first argument is an instance of ZoneId, then {@link YearMonth.nowZoneId} is executed,\n     *\n     * otherwise {@link YearMonth.nowClock} is executed\n     *\n     * @param {?(ZoneId|Clock)} zoneIdOrClock\n     * @returns {YearMonth}\n     */\n    static now(zoneIdOrClock) {\n        if (arguments.length === 0) {\n            return YearMonth.now0();\n        } else if (arguments.length === 1 && zoneIdOrClock instanceof ZoneId) {\n            return YearMonth.nowZoneId(zoneIdOrClock);\n        } else {\n            return YearMonth.nowClock(zoneIdOrClock);\n        }\n    }\n\n    /**\n     * Obtains the current year-month from the system clock in the default time-zone.\n     *\n     * This will query the system clock (see {@link Clock#systemDefaultZone}) in the default\n     * time-zone to obtain the current year-month.\n     * The zone and offset will be set based on the time-zone in the clock.\n     *\n     * Using this method will prevent the ability to use an alternate clock for testing\n     * because the clock is hard-coded.\n     *\n     * @return {YearMonth} the current year-month using the system clock and default time-zone, not null\n     */\n    static now0() {\n        return YearMonth.nowClock(Clock.systemDefaultZone());\n    }\n\n    /**\n     * Obtains the current year-month from the system clock in the specified time-zone.\n     *\n     * This will query the system clock (see {@link Clock#system}) to obtain the current year-month.\n     * Specifying the time-zone avoids dependence on the default time-zone.\n     *\n     * Using this method will prevent the ability to use an alternate clock for testing\n     * because the clock is hard-coded.\n     *\n     * @param {ZoneId} zone  the zone ID to use, not null\n     * @return {YearMonth} the current year-month using the system clock, not null\n     */\n    static nowZoneId(zone) {\n        return YearMonth.nowClock(Clock.system(zone));\n    }\n\n    /**\n     * Obtains the current year-month from the specified clock.\n     *\n     * This will query the specified clock to obtain the current year-month.\n     * Using this method allows the use of an alternate clock for testing.\n     * The alternate clock may be introduced using dependency injection.\n     *\n     * @param {Clock} clock  the clock to use, not null\n     * @return {YearMonth} the current year-month, not null\n     */\n    static nowClock(clock) {\n        const now = LocalDate.now(clock);\n        return YearMonth.of(now.year(), now.month());\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link YearMonth.of}\n     *\n     * if called with 2 argument and first argument is an instance of Month, then {@link YearMonth.ofNumberMonth} is executed,\n     *\n     * otherwise {@link YearMonth.ofNumberNumber} is executed\n     *\n     * @param {!number} year\n     * @param {!(Month|number)} monthOrNumber\n     * @returns {YearMonth}\n     */\n    static of(year, monthOrNumber) {\n        if (arguments.length === 2 && monthOrNumber instanceof Month) {\n            return YearMonth.ofNumberMonth(year, monthOrNumber);\n        } else {\n            return YearMonth.ofNumberNumber(year, monthOrNumber);\n        }\n    }\n\n    /**\n     * Obtains an instance of {@link YearMonth} from a year and month.\n     *\n     * @param {number} year  the year to represent, from MIN_YEAR to MAX_YEAR\n     * @param {Month} month  the month-of-year to represent, not null\n     * @return {YearMonth} the year-month, not null\n     * @throws DateTimeException if the year value is invalid\n     */\n    static ofNumberMonth(year, month) {\n        requireNonNull(month, 'month');\n        requireInstance(month, Month, 'month');\n        return YearMonth.ofNumberNumber(year, month.value());\n    }\n\n    /**\n     * Obtains an instance of {@link YearMonth} from a year and month.\n     *\n     * @param {number} year  the year to represent, from MIN_YEAR to MAX_YEAR\n     * @param {number} month  the month-of-year to represent, from 1 (January) to 12 (December)\n     * @return {YearMonth} the year-month, not null\n     * @throws DateTimeException if either field value is invalid\n     */\n    static ofNumberNumber(year, month) {\n        requireNonNull(year, 'year');\n        requireNonNull(month, 'month');\n        ChronoField.YEAR.checkValidValue(year);\n        ChronoField.MONTH_OF_YEAR.checkValidValue(month);\n        return new YearMonth(year, month);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link YearMonth} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link YearMonth}.\n     *\n     * The conversion extracts the {@link ChronoField#YEAR} and\n     * {@link ChronoField#MONTH_OF_YEAR} fields.\n     * The extraction is only permitted if the temporal object has an ISO\n     * chronology, or can be converted to a {@link LocalDate}.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used in queries via method reference, {@link YearMonth::from}.\n     *\n     * @param {TemporalAccessor} temporal  the temporal object to convert, not null\n     * @return {YearMonth} the year-month, not null\n     * @throws DateTimeException if unable to convert to a {@link YearMonth}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        if (temporal instanceof YearMonth) {\n            return temporal;\n        }\n        try {\n            /* TODO: only IsoChronology for now\n            if (IsoChronology.INSTANCE.equals(Chronology.from(temporal)) == false) {\n                temporal = LocalDate.from(temporal);\n            }*/\n            return YearMonth.of(temporal.get(ChronoField.YEAR), temporal.get(ChronoField.MONTH_OF_YEAR));\n        } catch (ex) {\n            throw new DateTimeException(`Unable to obtain YearMonth from TemporalAccessor: ${ \n                temporal}, type ${temporal && temporal.constructor != null ? temporal.constructor.name : ''}`);\n        }\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link YearMonth.parse}\n     *\n     * if called with 2 argument and first argument is an instance of Month, then {@link YearMonth.parseString} is executed,\n     *\n     * otherwise {@link YearMonth.parseStringFormatter} is executed\n     *\n     * @param {!(String)} text\n     * @param {?DateTimeFormatter} formatter\n     * @returns {YearMonth}\n     */\n    static parse(text, formatter) {\n        if (arguments.length === 1) {\n            return YearMonth.parseString(text);\n        } else {\n            return YearMonth.parseStringFormatter(text, formatter);\n        }\n    }\n\n    /**\n     * Obtains an instance of {@link YearMonth} from a text string such as `2007-12`.\n     *\n     * The string must represent a valid year-month.\n     * The format must be {@link yyyy-MM}.\n     * Years outside the range 0000 to 9999 must be prefixed by the plus or minus symbol.\n     *\n     * @param {String} text  the text to parse such as \"2007-12\", not null\n     * @return {YearMonth} the parsed year-month, not null\n     * @throws DateTimeParseException if the text cannot be parsed\n     */\n    static parseString(text) {\n        return YearMonth.parseStringFormatter(text, PARSER);\n    }\n\n    /**\n     * Obtains an instance of {@link YearMonth} from a text string using a specific formatter.\n     *\n     * The text is parsed using the formatter, returning a year-month.\n     *\n     * @param {String} text  the text to parse, not null\n     * @param {DateTimeFormatter} formatter  the formatter to use, not null\n     * @return the parsed year-month, not null\n     * @throws DateTimeParseException if the text cannot be parsed\n     */\n    static parseStringFormatter(text, formatter) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.parse(text, YearMonth.FROM);\n    }\n\n\n    /**\n     * Constructor.\n     *\n     * @param {number} year  the year to represent, validated from MIN_YEAR to MAX_YEAR\n     * @param {number} month  the month-of-year to represent, validated from 1 (January) to 12 (December)\n     * @private\n     */\n    constructor(year, month) {\n        super();\n        this._year = MathUtil.safeToInt(year);\n        this._month = MathUtil.safeToInt(month);\n    }\n\n    /**\n     * function overloading for {@link YearMonth.isSupported}\n     *\n     * if called with 1 argument and first argument is an instance of TemporalField, then {@link YearMonth.isSupportedField} is executed,\n     *\n     * otherwise {@link YearMonth.isSupportedUnit} is executed\n     *\n     * @param {!(TemporalField|ChronoUnit)} fieldOrUnit\n     * @returns {boolean}\n     */\n    isSupported(fieldOrUnit) {\n        if (arguments.length === 1 && fieldOrUnit instanceof TemporalField) {\n            return this.isSupportedField(fieldOrUnit);\n        } else {\n            return this.isSupportedUnit(fieldOrUnit);\n        }\n    }\n\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this year-month can be queried for the specified field.\n     * If false, then calling {@link range} and {@link get} will throw an exception.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this date-time.\n     * The supported fields are:\n     *\n     * * {@link MONTH_OF_YEAR}\n     * * {@link EPOCH_MONTH}\n     * * {@link YEAR_OF_ERA}\n     * * {@link YEAR}\n     * * {@link ERA}\n     *\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.isSupportedBy}\n     * passing `this` as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {TemporalField} field  the field to check, null returns false\n     * @return {boolean} true if the field is supported on this year-month, false if not\n     */\n    isSupportedField(field) {\n        if (field instanceof ChronoField) {\n            return field === ChronoField.YEAR || field === ChronoField.MONTH_OF_YEAR ||\n                    field === ChronoField.PROLEPTIC_MONTH || field === ChronoField.YEAR_OF_ERA || field === ChronoField.ERA;\n        }\n        return field != null && field.isSupportedBy(this);\n    }\n\n    isSupportedUnit(unit) {\n        if (unit instanceof ChronoUnit) {\n            return unit === ChronoUnit.MONTHS || unit === ChronoUnit.YEARS || unit === ChronoUnit.DECADES || unit === ChronoUnit.CENTURIES || unit === ChronoUnit.MILLENNIA || unit === ChronoUnit.ERAS;\n        }\n        return unit != null && unit.isSupportedBy(this);\n    }\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * The range object expresses the minimum and maximum valid values for a field.\n     * This year-month is used to enhance the accuracy of the returned range.\n     * If it is not possible to return the range, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return\n     * appropriate range instances.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n     * passing `this` as the argument.\n     * Whether the range can be obtained is determined by the field.\n     *\n     * @param {TemporalField} field  the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws DateTimeException if the range for the field cannot be obtained\n     */\n    range(field) {\n        if (field === ChronoField.YEAR_OF_ERA) {\n            return (this.year() <= 0 ? ValueRange.of(1, Year.MAX_VALUE + 1) : ValueRange.of(1, Year.MAX_VALUE));\n        }\n        return super.range(field);\n    }\n\n    /**\n     * Gets the value of the specified field from this year-month as an `int`.\n     *\n     * This queries this year-month for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this year-month, except {@link EPOCH_MONTH} which is too\n     * large to fit in an `int` and throw a {@link DateTimeException}.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field  the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    get(field) {\n        requireNonNull(field, 'field');\n        requireInstance(field, TemporalField, 'field');\n        return this.range(field).checkValidIntValue(this.getLong(field), field);\n    }\n\n    /**\n     * Gets the value of the specified field from this year-month as a `long`.\n     *\n     * This queries this year-month for the value for the specified field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this year-month.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field  the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    getLong(field) {\n        requireNonNull(field, 'field');\n        requireInstance(field, TemporalField, 'field');\n        if (field instanceof ChronoField) {\n            switch (field) {\n                case ChronoField.MONTH_OF_YEAR: return this._month;\n                case ChronoField.PROLEPTIC_MONTH: return this._getProlepticMonth();\n                case ChronoField.YEAR_OF_ERA: return (this._year < 1 ? 1 - this._year : this._year);\n                case ChronoField.YEAR: return this._year;\n                case ChronoField.ERA: return (this._year < 1 ? 0 : 1);\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.getFrom(this);\n    }\n\n    _getProlepticMonth() {\n        return MathUtil.safeAdd(MathUtil.safeMultiply(this._year, 12), (this._month - 1));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the year field.\n     *\n     * This method returns the primitive `int` value for the year.\n     *\n     * The year returned by this method is proleptic as per {@link get}.\n     *\n     * @return {number} the year, from MIN_YEAR to MAX_YEAR\n     */\n    year() {\n        return this._year;\n    }\n\n    /**\n     * Gets the month-of-year field from 1 to 12.\n     *\n     * This method returns the month as an `int` from 1 to 12.\n     * Application code is frequently clearer if the enum {@link Month}\n     * is used by calling {@link getMonth}.\n     *\n     * @return {number} the month-of-year, from 1 to 12\n     * @see #getMonth()\n     */\n    monthValue() {\n        return this._month;\n    }\n\n    /**\n     * Gets the month-of-year field using the {@link Month} enum.\n     *\n     * This method returns the enum {@link Month} for the month.\n     * This avoids confusion as to what `int` values mean.\n     * If you need access to the primitive `int` value, use {@link Month#getValue}.\n     *\n     * @return {Month} the month-of-year, not null\n     */\n    month() {\n        return Month.of(this._month);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if the year is a leap year, according to the ISO proleptic\n     * calendar system rules.\n     *\n     * This method applies the current rules for leap years across the whole time-line.\n     * In general, a year is a leap year if it is divisible by four without\n     * remainder. However, years divisible by 100, are not leap years, with\n     * the exception of years divisible by 400 which are.\n     *\n     * For example, 1904 is a leap year it is divisible by 4.\n     * 1900 was not a leap year as it is divisible by 100, however 2000 was a\n     * leap year as it is divisible by 400.\n     *\n     * The calculation is proleptic - applying the same rules into the far future and far past.\n     * This is historically inaccurate, but is correct for the ISO-8601 standard.\n     *\n     * @return {boolean} true if the year is leap, false otherwise\n     */\n    isLeapYear() {\n        return IsoChronology.isLeapYear(this._year);\n    }\n\n    /**\n     * Checks if the day-of-month is valid for this year-month.\n     *\n     * This method checks whether this year and month and the input day form\n     * a valid date.\n     *\n     * @param {number} dayOfMonth  the day-of-month to validate, from 1 to 31, invalid value returns false\n     * @return {boolean} true if the day is valid for this year-month\n     */\n    isValidDay(dayOfMonth) {\n        return dayOfMonth >= 1 && dayOfMonth <= this.lengthOfMonth();\n    }\n\n    /**\n     * Returns the length of the month, taking account of the year.\n     *\n     * This returns the length of the month in days.\n     * For example, a date in January would return 31.\n     *\n     * @return {number} the length of the month in days, from 28 to 31\n     */\n    lengthOfMonth() {\n        return this.month().length(this.isLeapYear());\n    }\n\n    /**\n     * Returns the length of the year.\n     *\n     * This returns the length of the year in days, either 365 or 366.\n     *\n     * @return {number} 366 if the year is leap, 365 otherwise\n     */\n    lengthOfYear() {\n        return (this.isLeapYear() ? 366 : 365);\n    }\n\n    /**\n     * function overloading for {@link YearMonth.with}\n     *\n     * if called with 1 argument, then {@link YearMonth.withAdjuster} is executed,\n     * otherwise {@link YearMonth.withFieldValue} is executed.\n     *\n     * @param {!(TemporalAdjuster|TemporalField)} adjusterOrField\n     * @param {?number} value nullable only of first argument is an instance of TemporalAdjuster\n     * @returns {YearMonth}\n     */\n    with(adjusterOrField, value) {\n        if (arguments.length === 1) {\n            return this._withAdjuster(adjusterOrField);\n        } else {\n            return this._withField(adjusterOrField, value);\n        }\n    }\n\n    /**\n     * Returns a copy of this year-month with the specified field set to a new value.\n     *\n     * This returns a new {@link YearMonth}, based on this one, with the value\n     * for the specified field changed.\n     * This can be used to change any supported field, such as the year or month.\n     * If it is not possible to set the value, because the field is not supported or for\n     * some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the adjustment is implemented here.\n     * The supported fields behave as follows:\n     *\n     * * {@link MONTH_OF_YEAR} -\n     *   Returns a {@link YearMonth} with the specified month-of-year.\n     *   The year will be unchanged.\n     * * {@link PROLEPTIC_MONTH} -\n     *   Returns a {@link YearMonth} with the specified proleptic-month.\n     *   This completely replaces the year and month of this object.\n     * * {@link YEAR_OF_ERA} -\n     *   Returns a {@link YearMonth} with the specified year-of-era\n     *   The month and era will be unchanged.\n     * * {@link YEAR} -\n     *   Returns a {@link YearMonth} with the specified year.\n     *   The month will be unchanged.\n     * * {@link ERA} -\n     *   Returns a {@link YearMonth} with the specified era.\n     *   The month and year-of-era will be unchanged.\n     *\n     * In all cases, if the new value is outside the valid range of values for the field\n     * then a {@link DateTimeException} will be thrown.\n     *\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.adjustInto}\n     * passing `this` as the argument. In this case, the field determines\n     * whether and how to adjust the instant.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalField} field  the field to set in the result, not null\n     * @param {number} newValue  the new value of the field in the result\n     * @return a {@link YearMonth} based on `this` with the specified field set, not null\n     * @throws DateTimeException if the field cannot be set\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    _withField(field, newValue) {\n        requireNonNull(field, 'field');\n        requireInstance(field, TemporalField, 'field');\n        if (field instanceof ChronoField) {\n            const f = field;\n            f.checkValidValue(newValue);\n            switch (f) {\n                case ChronoField.MONTH_OF_YEAR: return this.withMonth(newValue);\n                case ChronoField.PROLEPTIC_MONTH: return this.plusMonths(newValue - this.getLong(ChronoField.PROLEPTIC_MONTH));\n                case ChronoField.YEAR_OF_ERA: return this.withYear((this._year < 1 ? 1 - newValue : newValue));\n                case ChronoField.YEAR: return this.withYear(newValue);\n                case ChronoField.ERA: return (this.getLong(ChronoField.ERA) === newValue ? this : this.withYear(1 - this._year));\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.adjustInto(this, newValue);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link YearMonth} with the year altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} year  the year to set in the returned year-month, from MIN_YEAR to MAX_YEAR\n     * @return {YearMonth} based on this year-month with the requested year, not null\n     * @throws DateTimeException if the year value is invalid\n     */\n    withYear(year) {\n        ChronoField.YEAR.checkValidValue(year);\n        return new YearMonth(year, this._month);\n    }\n\n    /**\n     * Returns a copy of this {@link YearMonth} with the month-of-year altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} month  the month-of-year to set in the returned year-month, from 1 (January) to 12 (December)\n     * @return {YearMonth} based on this year-month with the requested month, not null\n     * @throws DateTimeException if the month-of-year value is invalid\n     */\n    withMonth(month) {\n        ChronoField.MONTH_OF_YEAR.checkValidValue(month);\n        return new YearMonth(this._year, month);\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * @param {number} amountToAdd\n     * @param {TemporalUnit} unit\n     * @return {YearMonth} based on this year-month with the addition made, not null\n     * @throws DateTimeException if the addition cannot be made\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    _plusUnit(amountToAdd, unit) {\n        requireNonNull(unit, 'unit');\n        requireInstance(unit, TemporalUnit, 'unit');\n        if (unit instanceof ChronoUnit) {\n            switch (unit) {\n                case ChronoUnit.MONTHS: return this.plusMonths(amountToAdd);\n                case ChronoUnit.YEARS: return this.plusYears(amountToAdd);\n                case ChronoUnit.DECADES: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 10));\n                case ChronoUnit.CENTURIES: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 100));\n                case ChronoUnit.MILLENNIA: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 1000));\n                case ChronoUnit.ERAS: return this.with(ChronoField.ERA, MathUtil.safeAdd(this.getLong(ChronoField.ERA), amountToAdd));\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.addTo(this, amountToAdd);\n    }\n\n    /**\n     * Returns a copy of this year-month with the specified period in years added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} yearsToAdd  the years to add, may be negative\n     * @return {YearMonth} based on this year-month with the years added, not null\n     * @throws DateTimeException if the result exceeds the supported range\n     */\n    plusYears(yearsToAdd) {\n        if (yearsToAdd === 0) {\n            return this;\n        }\n        const newYear = ChronoField.YEAR.checkValidIntValue(this._year + yearsToAdd);  // safe overflow\n        return this.withYear(newYear);\n    }\n\n    /**\n     * Returns a copy of this year-month with the specified period in months added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} monthsToAdd  the months to add, may be negative\n     * @return {YearMonth} based on this year-month with the months added, not null\n     * @throws DateTimeException if the result exceeds the supported range\n     */\n    plusMonths(monthsToAdd) {\n        if (monthsToAdd === 0) {\n            return this;\n        }\n        const monthCount = (this._year * 12) + (this._month - 1);\n        const calcMonths = monthCount + monthsToAdd;\n        const newYear = ChronoField.YEAR.checkValidIntValue(MathUtil.floorDiv(calcMonths, 12));\n        const newMonth = MathUtil.floorMod(calcMonths, 12) + 1;\n        return new YearMonth(newYear, newMonth);\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns a copy of this year-month with the specified period in years subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} yearsToSubtract  the years to subtract, may be negative\n     * @return {YearMonth} based on this year-month with the years subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported range\n     */\n    minusYears(yearsToSubtract) {\n        return (yearsToSubtract === MathUtil.MIN_SAFE_INTEGER ? this.plusYears(MathUtil.MIN_SAFE_INTEGER).plusYears(1) : this.plusYears(-yearsToSubtract));\n    }\n\n    /**\n     * Returns a copy of this year-month with the specified period in months subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} monthsToSubtract  the months to subtract, may be negative\n     * @return {YearMonth} based on this year-month with the months subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported range\n     */\n    minusMonths(monthsToSubtract) {\n        return (monthsToSubtract === MathUtil.MIN_SAFE_INTEGER ? this.plusMonths(Math.MAX_SAFE_INTEGER).plusMonths(1) : this.plusMonths(-monthsToSubtract));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Queries this year-month using the specified query.\n     *\n     * This queries this year-month using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing `this` as the argument.\n     *\n     * @param {TemporalQuery} query  the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws DateTimeException if unable to query (defined by the query)\n     * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        requireNonNull(query, 'query');\n        requireInstance(query, TemporalQuery, 'query');\n        if (query === TemporalQueries.chronology()) {\n            return IsoChronology.INSTANCE;\n        } else if (query === TemporalQueries.precision()) {\n            return ChronoUnit.MONTHS;\n        } else if (query === TemporalQueries.localDate() || query === TemporalQueries.localTime() ||\n                query === TemporalQueries.zone() || query === TemporalQueries.zoneId() || query === TemporalQueries.offset()) {\n            return null;\n        }\n        return super.query(query);\n    }\n\n    /**\n     * Adjusts the specified temporal object to have this year-month.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with the year and month changed to be the same as this.\n     *\n     * The adjustment is equivalent to using {@link Temporal#with}\n     * passing {@link ChronoField#PROLEPTIC_MONTH} as the field.\n     * If the specified temporal object does not use the ISO calendar system then\n     * a {@link DateTimeException} is thrown.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisYearMonth.adjustInto(temporal);\n     *   temporal = temporal.with(thisYearMonth);\n     * </pre>\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} temporal  the target object to be adjusted, not null\n     * @return {Temporal} the adjusted object, not null\n     * @throws DateTimeException if unable to make the adjustment\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        requireNonNull(temporal, 'temporal');\n        requireInstance(temporal, Temporal, 'temporal');\n        /* TODO: only IsoChronology for now\n        if (Chronology.from(temporal).equals(IsoChronology.INSTANCE) == false) {\n            throw new DateTimeException(\"Adjustment only supported on ISO date-time\");\n        }*/\n        return temporal.with(ChronoField.PROLEPTIC_MONTH, this._getProlepticMonth());\n    }\n\n    /**\n     * Calculates the period between this year-month and another year-month in\n     * terms of the specified unit.\n     *\n     * This calculates the period between two year-months in terms of a single unit.\n     * The start and end points are `this` and the specified year-month.\n     * The result will be negative if the end is before the start.\n     * The {@link Temporal} passed to this method must be a {@link YearMonth}.\n     * For example, the period in years between two year-months can be calculated\n     * using {@link startYearMonth.until}.\n     *\n     * The calculation returns a whole number, representing the number of\n     * complete units between the two year-months.\n     * For example, the period in decades between 2012-06 and 2032-05\n     * will only be one decade as it is one month short of two decades.\n     *\n     * This method operates in association with {@link TemporalUnit#between}.\n     * The result of this method is a `long` representing the amount of\n     * the specified unit. By contrast, the result of {@link between} is an\n     * object that can be used directly in addition/subtraction:\n     * <pre>\n     *   long period = start.until(end, YEARS);   // this method\n     *   dateTime.plus(YEARS.between(start, end));      // use in plus/minus\n     * </pre>\n     *\n     * The calculation is implemented in this method for {@link ChronoUnit}.\n     * The units {@link MONTHS}, {@link YEARS}, {@link DECADES},\n     * {@link CENTURIES}, {@link MILLENNIA} and {@link ERAS} are supported.\n     * Other {@link ChronoUnit} values will throw an exception.\n     *\n     * If the unit is not a {@link ChronoUnit}, then the result of this method\n     * is obtained by invoking {@link TemporalUnit.between}\n     * passing `this` as the first argument and the input temporal as\n     * the second argument.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} endExclusive  the end year-month, which is converted to a {@link YearMonth}, not null\n     * @param {TemporalUnit} unit  the unit to measure the period in, not null\n     * @return {number} the amount of the period between this year-month and the end year-month\n     * @throws DateTimeException if the period cannot be calculated\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    until(endExclusive, unit) {\n        requireNonNull(endExclusive, 'endExclusive');\n        requireNonNull(unit, 'unit');\n        requireInstance(endExclusive, Temporal, 'endExclusive');\n        requireInstance(unit, TemporalUnit, 'unit');\n\n        const end = YearMonth.from(endExclusive);\n        if (unit instanceof ChronoUnit) {\n            const monthsUntil = end._getProlepticMonth() - this._getProlepticMonth();  // no overflow\n            switch (unit) {\n                case ChronoUnit.MONTHS: return monthsUntil;\n                case ChronoUnit.YEARS: return MathUtil.intDiv(monthsUntil, 12);\n                case ChronoUnit.DECADES: return MathUtil.intDiv(monthsUntil, 120);\n                case ChronoUnit.CENTURIES: return MathUtil.intDiv(monthsUntil, 1200);\n                case ChronoUnit.MILLENNIA: return MathUtil.intDiv(monthsUntil, 12000);\n                case ChronoUnit.ERAS: return end.getLong(ChronoField.ERA) - this.getLong(ChronoField.ERA);\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.between(this, end);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Combines this year-month with a day-of-month to create a {@link LocalDate}.\n     *\n     * This returns a {@link LocalDate} formed from this year-month and the specified day-of-month.\n     *\n     * The day-of-month value must be valid for the year-month.\n     *\n     * This method can be used as part of a chain to produce a date:\n     * <pre>\n     *  LocalDate date = year.atMonth(month).atDay(day);\n     * </pre>\n     *\n     * @param {number} dayOfMonth  the day-of-month to use, from 1 to 31\n     * @return {LocalDate} the date formed from this year-month and the specified day, not null\n     * @throws DateTimeException if the day is invalid for the year-month\n     * @see #isValidDay(int)\n     */\n    atDay(dayOfMonth) {\n        requireNonNull(dayOfMonth, 'dayOfMonth');\n        return LocalDate.of(this._year, this._month, dayOfMonth);\n    }\n\n    /**\n     * Returns a {@link LocalDate} at the end of the month.\n     *\n     * This returns a {@link LocalDate} based on this year-month.\n     * The day-of-month is set to the last valid day of the month, taking\n     * into account leap years.\n     *\n     * This method can be used as part of a chain to produce a date:\n     * <pre>\n     *  LocalDate date = year.atMonth(month).atEndOfMonth();\n     * </pre>\n     *\n     * @return {LocalDate} the last valid date of this year-month, not null\n     */\n    atEndOfMonth() {\n        return LocalDate.of(this._year, this._month, this.lengthOfMonth());\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Compares this year-month to another year-month.\n     *\n     * The comparison is based first on the value of the year, then on the value of the month.\n     * It is \"consistent with equals\", as defined by {@link Comparable}.\n     *\n     * @param {YearMonth} other  the other year-month to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     */\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, YearMonth, 'other');\n        let cmp = (this._year - other.year());\n        if (cmp === 0) {\n            cmp = (this._month - other.monthValue());\n        }\n        return cmp;\n    }\n\n    /**\n     * Is this year-month after the specified year-month.\n     *\n     * @param {YearMonth} other  the other year-month to compare to, not null\n     * @return {boolean} true if this is after the specified year-month\n     */\n    isAfter(other) {\n        return this.compareTo(other) > 0;\n    }\n\n    /**\n     * Is this year-month before the specified year-month.\n     *\n     * @param {YearMonth} other  the other year-month to compare to, not null\n     * @return {boolean} true if this point is before the specified year-month\n     */\n    isBefore(other) {\n        return this.compareTo(other) < 0;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this year-month is equal to another year-month.\n     *\n     * The comparison is based on the time-line position of the year-months.\n     *\n     * @param {*} obj  the object to check, null returns false\n     * @return {boolean} true if this is equal to the other year-month\n     */\n    equals(obj) {\n        if (this === obj) {\n            return true;\n        }\n        if (obj instanceof YearMonth) {\n            const other = obj;\n            return this.year() === other.year() && this.monthValue() === other.monthValue();\n        }\n        return false;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Outputs this year-month as a string, such as `2007-12`.\n     *\n     * The output will be in the format {@link yyyy-MM}:\n     *\n     * @return {String} a string representation of this year-month, not null\n     */\n    toString() {\n        return PARSER.format(this);\n    }\n\n    /**\n     * toJSON() use by JSON.stringify\n     * delegates to toString()\n     *\n     * @return {string}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n    /**\n     * Outputs this year-month as a string using the formatter.\n     *\n     * @param {DateTimeFormatter} formatter  the formatter to use, not null\n     * @return {String} the formatted year-month string, not null\n     * @throws DateTimeException if an error occurs during printing\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.format(this);\n    }\n\n}\n\nlet PARSER;\n\nexport function _init() {\n\n    PARSER = new DateTimeFormatterBuilder()\n        .appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD)\n        .appendLiteral('-')\n        .appendValue(ChronoField.MONTH_OF_YEAR, 2)\n        .toFormatter();\n\n    YearMonth.FROM = createTemporalQuery('YearMonth.FROM', (temporal) => {\n        return YearMonth.from(temporal);\n    });\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { DateTimeException, UnsupportedTemporalTypeException } from './errors';\nimport { requireNonNull, requireInstance } from './assert';\nimport { MathUtil } from './MathUtil';\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { Clock } from './Clock';\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\nimport { DateTimeFormatterBuilder } from './format/DateTimeFormatterBuilder';\nimport { IsoChronology } from './chrono/IsoChronology';\nimport { LocalDate } from './LocalDate';\nimport { Month } from './Month';\nimport { MonthDay } from './MonthDay';\nimport { SignStyle } from './format/SignStyle';\nimport { Temporal } from './temporal/Temporal';\nimport { TemporalAccessor } from './temporal/TemporalAccessor';\nimport { TemporalField } from './temporal/TemporalField';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { TemporalQuery, createTemporalQuery } from './temporal/TemporalQuery';\nimport { TemporalUnit } from './temporal/TemporalUnit';\nimport { YearConstants } from './YearConstants';\nimport { YearMonth } from './YearMonth';\nimport { ZoneId } from './ZoneId';\n\n\n/**\n * A year in the ISO-8601 calendar system, such as `2007`.\n *\n * {@link Year} is an immutable date-time object that represents a year.\n * Any field that can be derived from a year can be obtained.\n *\n * **Note that years in the ISO chronology only align with years in the\n * Gregorian-Julian system for modern years. Parts of Russia did not switch to the\n * modern Gregorian/ISO rules until 1920.\n * As such, historical years must be treated with caution.**\n *\n * This class does not store or represent a month, day, time or time-zone.\n * For example, the value \"2007\" can be stored in a {@link Year}.\n *\n * Years represented by this class follow the ISO-8601 standard and use\n * the proleptic numbering system. Year 1 is preceded by year 0, then by year -1.\n *\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. It is equivalent to the proleptic Gregorian calendar\n * system, in which today's rules for leap years are applied for all time.\n * For most applications written today, the ISO-8601 rules are entirely suitable.\n * However, any application that makes use of historical dates, and requires them\n * to be accurate will find the ISO-8601 approach unsuitable.\n *\n * ### Static properties of Class {@link LocalDate}\n *\n * Year.MIN_VALUE = -999.999;\n *\n * The minimum supported year. Theoretically the minimum could be -28.542.4812 years in javascript.\n * approx LocalDateTime.ofEpochSecond(Number.MIN_SAFE_INTEGER, 0, ZoneOffset.UTC).year()\n *\n * Year.MAX_VALUE = 999.999;\n *\n * The maximum supported year. Theoretically the maximum could be 285.428.751 years in javascript.\n * approx LocalDateTime.ofEpochSecond(Number.MAX_SAFE_INTEGER, 0, ZoneOffset.UTC).year()\n *\n */\nexport class Year extends Temporal {\n\n    /**\n     *\n     * @param {number} value\n     * @private\n     */\n    constructor(value) {\n        super();\n        this._year = MathUtil.safeToInt(value);\n    }\n\n    /**\n     *\n     * @return {number} gets the value\n     */\n    value() {\n        return this._year;\n    }\n\n    /**\n     * function overloading for {@link Year.now}\n     *\n     * if called without arguments, then {@link Year.now0} is executed.\n\n     * if called with 1 arguments and first argument is an instance of ZoneId, then {@link Year.nowZoneId} is executed.\n     *\n     * Otherwise {@link Year.nowClock} is executed.\n     *\n     * @param {!(ZoneId|Clock)} zoneIdOrClock\n     * @returns {Year}\n     */\n    static now(zoneIdOrClock = undefined) {\n        if (zoneIdOrClock === undefined) {\n            return Year.now0();\n        } else if (zoneIdOrClock instanceof ZoneId) {\n            return Year.nowZoneId(zoneIdOrClock);\n        } else {\n            return Year.nowClock(zoneIdOrClock);\n        }\n    }\n\n    /**\n     * Obtains the current year from the system clock in the default time-zone.\n     *\n     * This will query the system clock (see {@link Clock#systemDefaultZone}) in the default\n     * time-zone to obtain the current year.\n     *\n     * Using this method will prevent the ability to use an alternate clock for testing\n     * because the clock is hard-coded.\n     *\n     * @return {Year} the current year using the system clock and default time-zone, not null\n     */\n    static now0() {\n        return Year.nowClock(Clock.systemDefaultZone());\n    }\n\n    /**\n     * Obtains the current year from the system clock in the specified time-zone.\n     *\n     * This will query the system clock (see {@link Clock#system}) to obtain the current year.\n     * Specifying the time-zone avoids dependence on the default time-zone.\n     *\n     * Using this method will prevent the ability to use an alternate clock for testing\n     * because the clock is hard-coded.\n     *\n     * @param {ZoneId} zone  the zone ID to use, not null\n     * @return {Year} the current year using the system clock, not null\n     */\n    static nowZoneId(zone) {\n        requireNonNull(zone, 'zone');\n        requireInstance(zone, ZoneId, 'zone');\n        return Year.nowClock(Clock.system(zone));\n    }\n\n    /**\n     * Obtains the current year from the specified clock.\n     *\n     * This will query the specified clock to obtain the current year.\n     * Using this method allows the use of an alternate clock for testing.\n     * The alternate clock may be introduced using dependency injection.\n     *\n     * @param {Clock} clock  the clock to use, not null\n     * @return {Year} the current year, not null\n     */\n    static nowClock(clock) {\n        requireNonNull(clock, 'clock');\n        requireInstance(clock, Clock, 'clock');\n        const now = LocalDate.now(clock);  // called once\n        return Year.of(now.year());\n    }\n    /**\n     * Obtains an instance of {@link Year}.\n     *\n     * This method accepts a year value from the proleptic ISO calendar system.\n     *\n     * * The year 2AD/CE is represented by 2.\n     * * The year 1AD/CE is represented by 1.\n     * * The year 1BC/BCE is represented by 0.\n     * * The year 2BC/BCE is represented by -1.\n     *\n     * @param {Number} isoYear  the ISO proleptic year to represent, from {@link MIN_VALUE} to {@link MAX_VALUE}\n     * @return {Year} the year, not null\n     * @throws DateTimeException if the field is invalid\n     */\n    static of(isoYear) {\n        requireNonNull(isoYear, 'isoYear');\n        ChronoField.YEAR.checkValidValue(isoYear);\n        return new Year(isoYear);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link Year} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link Year}.\n     *\n     * The conversion extracts the {@link ChronoField#YEAR} field.\n     * The extraction is only permitted if the temporal object has an ISO\n     * chronology, or can be converted to a {@link LocalDate}.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used in queries via method reference, {@link Year::from}.\n     *\n     * @param {TemporalAccessor} temporal  the temporal object to convert, not null\n     * @return {Year} the year, not null\n     * @throws DateTimeException if unable to convert to a {@link Year}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        requireInstance(temporal, TemporalAccessor, 'temporal');\n        if (temporal instanceof Year) {\n            return temporal;\n        }\n        try {\n            /* TODO: we support only ISO for now\n            if (IsoChronology.INSTANCE.equals(Chronology.from(temporal)) == false) {\n                temporal = LocalDate.from(temporal);\n            }*/\n            return Year.of(temporal.get(ChronoField.YEAR));\n        } catch (ex) {\n            throw new DateTimeException(`Unable to obtain Year from TemporalAccessor: ${ \n                temporal}, type ${temporal && temporal.constructor != null ? temporal.constructor.name : ''}`);\n        }\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link Year.parse}\n     *\n     * if called with 1 argument, then {@link Year.parseText} is executed.\n     *\n     * Otherwise {@link Year.parseTextFormatter} is executed.\n     *\n     * @param {!(String)} text\n     * @param {?DateTimeFormatter} formatter\n     * @returns {Year}\n     */\n    static parse(text, formatter) {\n        if (arguments.length <= 1) {\n            return Year.parseText(text);\n        } else {\n            return Year.parseTextFormatter(text, formatter);\n        }\n    }\n\n    /**\n     * Obtains an instance of {@link Year} from a text string such as `2007`.\n     *\n     * The string must represent a valid year.\n     * Years outside the range 0000 to 9999 must be prefixed by the plus or minus symbol.\n     *\n     * @param {String} text  the text to parse such as \"2007\", not null\n     * @return {Year} the parsed year, not null\n     * @throws DateTimeParseException if the text cannot be parsed\n     */\n    static parseText(text) {\n        requireNonNull(text, 'text');\n        return Year.parse(text, PARSER);\n    }\n\n    /**\n     * Obtains an instance of {@link Year} from a text string using a specific formatter.\n     *\n     * The text is parsed using the formatter, returning a year.\n     *\n     * @param {String} text  the text to parse, not null\n     * @param {DateTimeFormatter} formatter  the formatter to use, not null\n     * @return {Year} the parsed year, not null\n     * @throws DateTimeParseException if the text cannot be parsed\n     */\n    static parseTextFormatter(text, formatter = PARSER) {\n        requireNonNull(text, 'text');\n        requireNonNull(formatter, 'formatter');\n        requireInstance(formatter, DateTimeFormatter, 'formatter');\n        return formatter.parse(text, Year.FROM);\n    }\n\n    //-------------------------------------------------------------------------\n    /**\n     * Checks if the year is a leap year, according to the ISO proleptic\n     * calendar system rules.\n     *\n     * This method applies the current rules for leap years across the whole time-line.\n     * In general, a year is a leap year if it is divisible by four without\n     * remainder. However, years divisible by 100, are not leap years, with\n     * the exception of years divisible by 400 which are.\n     *\n     * For example, 1904 is a leap year it is divisible by 4.\n     * 1900 was not a leap year as it is divisible by 100, however 2000 was a\n     * leap year as it is divisible by 400.\n     *\n     * The calculation is proleptic - applying the same rules into the far future and far past.\n     * This is historically inaccurate, but is correct for the ISO-8601 standard.\n     *\n     * @param {number} year  the year to check\n     * @return {boolean} true if the year is leap, false otherwise\n     */\n    static isLeap(year) {\n        return ((MathUtil.intMod(year, 4) === 0) && ((MathUtil.intMod(year, 100) !== 0) || (MathUtil.intMod(year, 400) === 0)));\n    }\n\n    /**\n     * function overloading for {@link YearMonth.isSupported}\n     *\n     * if called with 1 argument and first argument is an instance of TemporalField, then {@link YearMonth.isSupportedField} is executed,\n     *\n     * otherwise {@link YearMonth.isSupportedUnit} is executed\n     *\n     * @param {!(TemporalField|ChronoUnit)} fieldOrUnit\n     * @returns {boolean}\n     */\n    isSupported(fieldOrUnit) {\n        if (arguments.length === 1 && fieldOrUnit instanceof TemporalField) {\n            return this.isSupportedField(fieldOrUnit);\n        } else {\n            return this.isSupportedUnit(fieldOrUnit);\n        }\n    }\n\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this year can be queried for the specified field.\n     * If false, then calling {@link range} and {@link get} will throw an exception.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this date-time.\n     * The supported fields are:\n     *\n     * * {@link YEAR_OF_ERA}\n     * * {@link YEAR}\n     * * {@link ERA}\n     *\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.isSupportedBy}\n     * passing `this` as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {TemporalField} field  the field to check, null returns false\n     * @return {boolean} true if the field is supported on this year, false if not\n     */\n    isSupportedField(field) {\n        if (field instanceof ChronoField) {\n            return field === ChronoField.YEAR || field === ChronoField.YEAR_OF_ERA || field === ChronoField.ERA;\n        }\n        return field != null && field.isSupportedBy(this);\n    }\n\n    isSupportedUnit(unit) {\n        if (unit instanceof ChronoUnit) {\n            return unit === ChronoUnit.YEARS || unit === ChronoUnit.DECADES || unit === ChronoUnit.CENTURIES || unit === ChronoUnit.MILLENNIA || unit === ChronoUnit.ERAS;\n        }\n        return unit != null && unit.isSupportedBy(this);\n    }\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * The range object expresses the minimum and maximum valid values for a field.\n     * This year is used to enhance the accuracy of the returned range.\n     * If it is not possible to return the range, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return\n     * appropriate range instances.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n     * passing `this` as the argument.\n     * Whether the range can be obtained is determined by the field.\n     *\n     * @param {TemporalField} field  the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws DateTimeException if the range for the field cannot be obtained\n     */\n    range(field) {\n        if (this.isSupported(field)) {\n            return field.range();\n        } else if (field instanceof ChronoField) {\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return super.range(field);\n    }\n\n    /**\n     * Gets the value of the specified field from this year as an `int`.\n     *\n     * This queries this year for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this year.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field  the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    get(field) {\n        return this.range(field).checkValidIntValue(this.getLong(field), field);\n    }\n\n    /**\n     * Gets the value of the specified field from this year as a `long`.\n     *\n     * This queries this year for the value for the specified field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this year.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field  the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    getLong(field) {\n        requireNonNull(field, 'field');\n        if (field instanceof ChronoField) {\n            switch (field) {\n                case ChronoField.YEAR_OF_ERA: return (this._year < 1 ? 1 - this._year : this._year);\n                case ChronoField.YEAR: return this._year;\n                case ChronoField.ERA: return (this._year < 1 ? 0 : 1);\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.getFrom(this);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if the year is a leap year, according to the ISO proleptic\n     * calendar system rules.\n     *\n     * This method applies the current rules for leap years across the whole time-line.\n     * In general, a year is a leap year if it is divisible by four without\n     * remainder. However, years divisible by 100, are not leap years, with\n     * the exception of years divisible by 400 which are.\n     *\n     * For example, 1904 is a leap year it is divisible by 4.\n     * 1900 was not a leap year as it is divisible by 100, however 2000 was a\n     * leap year as it is divisible by 400.\n     *\n     * The calculation is proleptic - applying the same rules into the far future and far past.\n     * This is historically inaccurate, but is correct for the ISO-8601 standard.\n     *\n     * @return {boolean} true if the year is leap, false otherwise\n     */\n    isLeap() {\n        return Year.isLeap(this._year);\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns a copy of this year with the specified field set to a new value.\n     *\n     * This returns a new {@link Year}, based on this one, with the value\n     * for the specified field changed.\n     * If it is not possible to set the value, because the field is not supported or for\n     * some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the adjustment is implemented here.\n     * The supported fields behave as follows:\n     *\n     * * {@link YEAR_OF_ERA} -\n     *   Returns a {@link Year} with the specified year-of-era\n     *   The era will be unchanged.\n     * * {@link YEAR} -\n     *   Returns a {@link Year} with the specified year.\n     *   This completely replaces the date and is equivalent to {@link of}.\n     * * {@link ERA} -\n     *   Returns a {@link Year} with the specified era.\n     *   The year-of-era will be unchanged.\n     *\n     * In all cases, if the new value is outside the valid range of values for the field\n     * then a {@link DateTimeException} will be thrown.\n     *\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.adjustInto}\n     * passing `this` as the argument. In this case, the field determines\n     * whether and how to adjust the instant.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalField} field  the field to set in the result, not null\n     * @param {number} newValue  the new value of the field in the result\n     * @returns {Year} based on `this` with the specified field set, not null\n     * @throws DateTimeException if the field cannot be set\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    _withField(field, newValue) {\n        requireNonNull(field, 'field');\n        requireInstance(field, TemporalField, 'field');\n        if (field instanceof ChronoField) {\n            field.checkValidValue(newValue);\n            switch (field) {\n                case ChronoField.YEAR_OF_ERA:\n                    return Year.of((this._year < 1 ? 1 - newValue : newValue));\n                case ChronoField.YEAR:\n                    return Year.of(newValue);\n                case ChronoField.ERA:\n                    return (this.getLong(ChronoField.ERA) === newValue ? this : Year.of(1 - this._year));\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.adjustInto(this, newValue);\n    }\n\n    /**\n     * @param {number} amountToAdd\n     * @param {TemporalUnit} unit\n     * @return {Year} based on this year with the addition made, not null\n     * @throws DateTimeException if the addition cannot be made\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    _plusUnit(amountToAdd, unit) {\n        requireNonNull(amountToAdd, 'amountToAdd');\n        requireNonNull(unit, 'unit');\n        requireInstance(unit, TemporalUnit, 'unit');\n        if (unit instanceof ChronoUnit) {\n            switch (unit) {\n                case ChronoUnit.YEARS: return this.plusYears(amountToAdd);\n                case ChronoUnit.DECADES: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 10));\n                case ChronoUnit.CENTURIES: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 100));\n                case ChronoUnit.MILLENNIA: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 1000));\n                case ChronoUnit.ERAS: return this.with(ChronoField.ERA, MathUtil.safeAdd(this.getLong(ChronoField.ERA), amountToAdd));\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.addTo(this, amountToAdd);\n    }\n\n    /**\n     * Returns a copy of this year with the specified number of years added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} yearsToAdd  the years to add, may be negative\n     * @return {Year} based on this year with the period added, not null\n     * @throws DateTimeException if the result exceeds the supported year range\n     */\n    plusYears(yearsToAdd) {\n        if (yearsToAdd === 0) {\n            return this;\n        }\n        return Year.of(ChronoField.YEAR.checkValidIntValue(MathUtil.safeAdd(this._year, yearsToAdd)));\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns a copy of this year with the specified number of years subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} yearsToSubtract  the years to subtract, may be negative\n     * @return {Year} based on this year with the period subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported year range\n     */\n    minusYears(yearsToSubtract) {\n        return (yearsToSubtract === MathUtil.MIN_SAFE_INTEGER ? this.plusYears(MathUtil.MAX_SAFE_INTEGER).plusYears(1) : this.plusYears(-yearsToSubtract));\n    }\n\n    /**\n     * Adjusts the specified temporal object to have this year.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with the year changed to be the same as this.\n     *\n     * The adjustment is equivalent to using {@link Temporal#with}\n     * passing {@link ChronoField#YEAR} as the field.\n     * If the specified temporal object does not use the ISO calendar system then\n     * a {@link DateTimeException} is thrown.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisYear.adjustInto(temporal);\n     *   temporal = temporal.with(thisYear);\n     * </pre>\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} temporal  the target object to be adjusted, not null\n     * @return {Temporal} the adjusted object, not null\n     * @throws DateTimeException if unable to make the adjustment\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        requireNonNull(temporal, 'temporal');\n        /* TODO: only IsoChronology for now\n         if (Chronology.from(temporal).equals(IsoChronology.INSTANCE) == false) {\n         throw new DateTimeException(\"Adjustment only supported on ISO date-time\");\n         }*/\n        return temporal.with(ChronoField.YEAR, this._year);\n    }\n\n    /**\n     * Checks if the month-day is valid for this year.\n     *\n     * This method checks whether this year and the input month and day form\n     * a valid date.\n     *\n     * @param {MonthDay} monthDay  the month-day to validate, null returns false\n     * @return {boolean} true if the month and day are valid for this year\n     */\n    isValidMonthDay(monthDay) {\n        return monthDay != null && monthDay.isValidYear(this._year);\n    }\n\n    /**\n     * Gets the length of this year in days.\n     *\n     * @return {number} the length of this year in days, 365 or 366\n     */\n    length() {\n        return this.isLeap() ? 366 : 365;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Combines this year with a day-of-year to create a {@link LocalDate}.\n     *\n     * This returns a {@link LocalDate} formed from this year and the specified day-of-year.\n     *\n     * The day-of-year value 366 is only valid in a leap year.\n     *\n     * @param {number} dayOfYear  the day-of-year to use, not null\n     * @return {LocalDate} the local date formed from this year and the specified date of year, not null\n     * @throws DateTimeException if the day of year is zero or less, 366 or greater or equal\n     *  to 366 and this is not a leap year\n     */\n    atDay(dayOfYear) {\n        return LocalDate.ofYearDay(this._year, dayOfYear);\n    }\n\n    /**\n     * function overloading for {@link Year.atMonth}\n     *\n     * if called with 1 arguments and first argument is instance of Month, then {@link Year.atMonthMonth} is executed.\n     *\n     * Otherwise {@link Year.atMonthNumber} is executed.\n     *\n     * @param {Month|number} monthOrNumber\n     * @returns {YearMonth}\n     */\n    atMonth(monthOrNumber) {\n        if (arguments.length === 1 && monthOrNumber instanceof Month) {\n            return this.atMonthMonth(monthOrNumber);\n        } else {\n            return this.atMonthNumber(monthOrNumber);\n        }\n    }\n\n    /**\n     * Combines this year with a month to create a {@link YearMonth}.\n     *\n     * This returns a {@link YearMonth} formed from this year and the specified month.\n     * All possible combinations of year and month are valid.\n     *\n     * This method can be used as part of a chain to produce a date:\n     * <pre>\n     *  LocalDate date = year.atMonth(month).atDay(day);\n     * </pre>\n     *\n     * @param {Month} month  the month-of-year to use, not null\n     * @return {YearMonth} the year-month formed from this year and the specified month, not null\n     */\n    atMonthMonth(month) {\n        requireNonNull(month, 'month');\n        requireInstance(month, Month, 'month');\n        return YearMonth.of(this._year, month);\n    }\n\n    /**\n     * Combines this year with a month to create a {@link YearMonth}.\n     *\n     * This returns a {@link YearMonth} formed from this year and the specified month.\n     * All possible combinations of year and month are valid.\n     *\n     * This method can be used as part of a chain to produce a date:\n     * <pre>\n     *  LocalDate date = year.atMonth(month).atDay(day);\n     * </pre>\n     *\n     * @param {number} month  the month-of-year to use, from 1 (January) to 12 (December)\n     * @return {YearMonth} the year-month formed from this year and the specified month, not null\n     * @throws DateTimeException if the month is invalid\n     */\n    atMonthNumber(month) {\n        requireNonNull(month, 'month');\n        return YearMonth.of(this._year, month);\n    }\n\n    /**\n     * Combines this year with a month-day to create a {@link LocalDate}.\n     *\n     * This returns a {@link LocalDate} formed from this year and the specified month-day.\n     *\n     * A month-day of February 29th will be adjusted to February 28th in the resulting\n     * date if the year is not a leap year.\n     *\n     * @param {MonthDay} monthDay  the month-day to use, not null\n     * @return {LocalDate} the local date formed from this year and the specified month-day, not null\n     */\n    atMonthDay(monthDay) {\n        requireNonNull(monthDay, 'monthDay');\n        requireInstance(monthDay, MonthDay, 'monthDay');\n        return monthDay.atYear(this._year);\n    }\n\n\n    //-----------------------------------------------------------------------\n    /**\n     * Queries this year using the specified query.\n     *\n     * This queries this year using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing `this` as the argument.\n     *\n     * @param {TemporalQuery} query  the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws DateTimeException if unable to query (defined by the query)\n     * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        requireNonNull(query, 'query()');\n        requireInstance(query, TemporalQuery, 'query()');\n        if (query === TemporalQueries.chronology()) {\n            return IsoChronology.INSTANCE;\n        } else if (query === TemporalQueries.precision()) {\n            return ChronoUnit.YEARS;\n        } else if (query === TemporalQueries.localDate() || query === TemporalQueries.localTime() ||\n                query === TemporalQueries.zone() || query === TemporalQueries.zoneId() || query === TemporalQueries.offset()) {\n            return null;\n        }\n        return super.query(query);\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * Compares this year to another year.\n     *\n     * The comparison is based on the value of the year.\n     * It is \"consistent with equals\", as defined by {@link Comparable}.\n     *\n     * @param {Year} other  the other year to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     */\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, Year, 'other');\n        return this._year - other._year;\n    }\n\n    /**\n     * Is this year after the specified year.\n     *\n     * @param {Year} other  the other year to compare to, not null\n     * @return {boolean} true if this is after the specified year\n     */\n    isAfter(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, Year, 'other');\n        return this._year > other._year;\n    }\n\n    /**\n     * Is this year before the specified year.\n     *\n     * @param {Year} other  the other year to compare to, not null\n     * @return {boolean} true if this point is before the specified year\n     */\n    isBefore(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, Year, 'other');\n        return this._year < other._year;\n    }\n    /**\n     * Outputs this year as a string using the formatter.\n     *\n     * @param {DateTimeFormatter} formatter  the formatter to use, not null\n     * @return {String} the formatted year string, not null\n     * @throws DateTimeException if an error occurs during printing\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        requireInstance(formatter, DateTimeFormatter, 'formatter');\n        return formatter.format(this);\n    }\n\n    /**\n     * Checks if this year is equal to the specified {@link Year}.\n     *\n     * The comparison is based on the value\n     *\n     * @param {*} other - the other year, null returns false\n     * @return {boolean} true if the other duration is equal to this one\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof Year) {\n            return this.value() === other.value();\n        }\n        return false;\n    }\n    /**\n     * Outputs this year as a string.\n     *\n     * @return {String} a string representation of this year, not null\n     */\n    toString() {\n        return `${this._year}`;\n    }\n\n    /**\n     * toJSON() use by JSON.stringify\n     * delegates to toString()\n     *\n     * @return {string}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n    /**\n     * Calculates the amount of time until another temporal in terms of the specified unit.\n     * This calculates the amount of time between two temporal objects in terms of a single {@link TemporalUnit}. The start and end points are this and the specified temporal. The end point is converted to be of the same type as the start point if different. The result will be negative if the end is before the start. For example, the amount in hours between two temporal objects can be calculated using `startTime.until(endTime, HOURS)`.\n     *\n     * The calculation returns a whole number, representing the number of complete units between the two temporals. For example, the amount in hours between the times 11:30 and 13:29 will only be one hour as it is one minute short of two hours.\n     *\n     * There are two equivalent ways of using this method. The first is to invoke this method directly. The second is to use `TemporalUnit.between(Temporal, Temporal)`:\n     *\n     * <pre>\n     *    // these two lines are equivalent\n     *    temporal = start.until(end, unit);\n     *    temporal = unit.between(start, end);\n     * </pre>\n     *\n     * The choice should be made based on which makes the code more readable.\n     * For example, this method allows the number of days between two dates to be calculated:\n     *\n     * <pre>\n     *   daysBetween = start.until(end, DAYS);\n     *   // or alternatively\n     *   daysBetween = DAYS.between(start, end);\n     * </pre>\n     *\n     * ### Implementation Requirements:\n     * Implementations must begin by checking to ensure that the input temporal object is of the same observable type as the implementation. They must then perform the calculation for all instances of {@link ChronoUnit}. An {@link UnsupportedTemporalTypeException} must be thrown for {@link ChronoUnit} instances that are unsupported.\n     * If the unit is not a {@link ChronoUnit}, then the result of this method is obtained by invoking `TemporalUnit.between(Temporal, Temporal)` passing this as the first argument and the converted input temporal as the second argument.\n     *\n     * In summary, implementations must behave in a manner equivalent to this pseudo-code:\n     *\n     * <pre>\n     *   // convert the end temporal to the same type as this class\n     *   if (unit instanceof ChronoUnit) {\n     *     // if unit is supported, then calculate and return result\n     *     // else throw UnsupportedTemporalTypeException for unsupported units\n     *   }\n     *   return unit.between(this, convertedEndTemporal);\n     * </pre>\n     *\n     * Note that the unit's between method must only be invoked if the two temporal objects have exactly the same type evaluated by `getClass()`.\n     *\n     * Implementations must ensure that no observable state is altered when this read-only method is invoked.\n     *\n     * @param {Temporal} endExclusive - the end temporal, exclusive, converted to be of the same type as this object, not null\n     * @param {TemporalUnit} unit - the unit to measure the amount in, not null\n     * @return {number} the amount of time between this temporal object and the specified one in terms of the unit; positive if the specified object is later than this one, negative if it is earlier than this one\n     * @throws DateTimeException - if the amount cannot be calculated, or the end temporal cannot be converted to the same type as this temporal\n     * @throws UnsupportedTemporalTypeException - if the unit is not supported\n     * @throws ArithmeticException - if numeric overflow occurs\n     */\n    until(endExclusive, unit) {\n        const end = Year.from(endExclusive);\n\n        if (unit instanceof ChronoUnit) {\n            const yearsUntil = end.value() - this.value();\n            switch (unit) {\n                case ChronoUnit.YEARS:\n                    return yearsUntil;\n                case ChronoUnit.DECADES:\n                    return MathUtil.intDiv(yearsUntil, 10);\n                case ChronoUnit.CENTURIES:\n                    return MathUtil.intDiv(yearsUntil, 100);\n                case ChronoUnit.MILLENNIA:\n                    return MathUtil.intDiv(yearsUntil, 1000);\n                case ChronoUnit.ERAS:\n                    return end.getLong(ChronoField.ERA) - this.getLong(ChronoField.ERA);\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.between(this, end);\n    }\n}\n\nlet PARSER;\n\nexport function _init() {\n\n    Year.MIN_VALUE = YearConstants.MIN_VALUE;\n    Year.MAX_VALUE = YearConstants.MAX_VALUE;\n\n    PARSER = new DateTimeFormatterBuilder()\n        .appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD)\n        .toFormatter();\n\n    Year.FROM = createTemporalQuery('Year.FROM', (temporal) => {\n        return Year.from(temporal);\n    });\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter, Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { DateTimeException } from '../errors';\n\nexport class ZoneRulesProvider {\n    /**\n     * Gets the rules for the zone ID.\n     *\n     * This returns the latest available rules for the zone ID.\n     *\n     * This method relies on time-zone data provider files that are configured.\n     *\n     * @param {string} zoneId\n     * @return {ZoneRules}\n     */\n    static getRules(zoneId){\n        throw new DateTimeException(`unsupported ZoneId:${zoneId}`);\n    }\n\n\n    /**\n     * Gets the set of available zone IDs.\n     *\n     * These zone IDs are loaded and available for use by {@link ZoneId}.\n     *\n     * @return {string[]} a modifiable copy of the set of zone IDs, not null\n     */\n    static getAvailableZoneIds(){\n        return [];\n    }\n}\n\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n\nimport { ZoneId } from './ZoneId';\nimport { ZoneRulesProvider } from './zone/ZoneRulesProvider';\n\n/**\n * A geographical region where the same time-zone rules apply.\n *\n * Time-zone information is categorized as a set of rules defining when and\n * how the offset from UTC/Greenwich changes. These rules are accessed using\n * identifiers based on geographical regions, such as countries or states.\n * The most common region classification is the Time Zone Database (TZDB),\n * which defines regions such as 'Europe/Paris' and 'Asia/Tokyo'.\n *\n * The region identifier, modeled by this class, is distinct from the\n * underlying rules, modeled by {@link ZoneRules}.\n * The rules are defined by governments and change frequently.\n * By contrast, the region identifier is well-defined and long-lived.\n * This separation also allows rules to be shared between regions if appropriate.\n *\n * ### Specification for implementors\n *\n * This class is immutable and thread-safe.\n */\nexport class ZoneRegion extends ZoneId {\n    /**\n     * @param {string} zoneId\n     * @return {ZoneId}\n     */\n    static ofId(zoneId){\n        const rules = ZoneRulesProvider.getRules(zoneId);\n        return new ZoneRegion(zoneId, rules);\n    }\n\n    //-------------------------------------------------------------------------\n    /**\n     * Constructor.\n     *\n     * @param {string} id  the time-zone ID, not null\n     * @param {ZoneRules} rules  the rules, null for lazy lookup\n     * @private\n     */\n    constructor(id, rules) {\n        super();\n        this._id = id;\n        this._rules = rules;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     *\n     * @returns {string}\n     */\n    id() {\n        return this._id;\n    }\n\n    /**\n     *\n     * @returns {ZoneRules}\n     */\n    rules() {\n        return this._rules;\n    }\n\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { ZoneOffset } from '../../ZoneOffset';\nimport { ZoneId } from '../../ZoneId';\nimport { ZoneRegion } from '../../ZoneRegion';\n\nimport { ChronoField } from '../../temporal/ChronoField';\n\nimport { ZoneRulesProvider } from '../../zone/ZoneRulesProvider';\n\nimport { OffsetIdPrinterParser } from './OffsetIdPrinterParser';\n\n/**\n * Prints or parses a zone ID.\n * @private\n */\nexport class ZoneIdPrinterParser {\n\n    /**\n     *\n     * @param {TemporalQuery} query\n     * @param {string} description\n     */\n    constructor(query, description) {\n        this.query = query;\n        this.description = description;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     *\n     * @param {DateTimePrintContext } context\n     * @param {StringBuilder} buf\n     * @returns {boolean}\n     */\n    print(context, buf) {\n        const zone = context.getValueQuery(this.query);\n        if (zone == null) {\n            return false;\n        }\n        buf.append(zone.id());\n        return true;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * This implementation looks for the longest matching string.\n     * For example, parsing Etc/GMT-2 will return Etc/GMC-2 rather than just\n     * Etc/GMC although both are valid.\n     *\n     * This implementation uses a tree to search for valid time-zone names in\n     * the parseText. The top level node of the tree has a length equal to the\n     * length of the shortest time-zone as well as the beginning characters of\n     * all other time-zones.\n     *\n     * @param {DateTimeParseContext} context\n     * @param {String} text\n     * @param {number} position\n     * @return {number}\n     */\n    parse(context, text, position) {\n        const length = text.length;\n        if (position > length) {\n            return ~position;\n        }\n        if (position === length) {\n            return ~position;\n        }\n\n        // handle fixed time-zone IDs\n        const nextChar = text.charAt(position);\n        if (nextChar === '+' || nextChar === '-') {\n            const newContext = context.copy();\n            const endPos = OffsetIdPrinterParser.INSTANCE_ID.parse(newContext, text, position);\n            if (endPos < 0) {\n                return endPos;\n            }\n            const offset = newContext.getParsed(ChronoField.OFFSET_SECONDS);\n            const zone = ZoneOffset.ofTotalSeconds(offset);\n            context.setParsedZone(zone);\n            return endPos;\n        } else if (length >= position + 2) {\n            const nextNextChar = text.charAt(position + 1);\n            if (context.charEquals(nextChar, 'U') &&\n                context.charEquals(nextNextChar, 'T')) {\n                if (length >= position + 3 &&\n                    context.charEquals(text.charAt(position + 2), 'C')) {\n                    return this._parsePrefixedOffset(context, text, position, position + 3);\n                }\n                return this._parsePrefixedOffset(context, text, position, position + 2);\n            } else if (context.charEquals(nextChar, 'G') &&\n                length >= position + 3 &&\n                context.charEquals(nextNextChar, 'M') &&\n                context.charEquals(text.charAt(position + 2), 'T')) {\n                return this._parsePrefixedOffset(context, text, position, position + 3);\n            }\n        }\n        // javascript special case\n        if(text.substr(position, 6) === 'SYSTEM'){\n            context.setParsedZone(ZoneId.systemDefault());\n            return position + 6;\n        }\n\n        // ...\n        if (context.charEquals(nextChar, 'Z')) {\n            context.setParsedZone(ZoneOffset.UTC);\n            return position + 1;\n        }\n\n        const availableZoneIds = ZoneRulesProvider.getAvailableZoneIds();\n        if (zoneIdTree.size !== availableZoneIds.length) {\n            zoneIdTree = ZoneIdTree.createTreeMap(availableZoneIds);\n        }\n\n        const maxParseLength = length - position;\n        let treeMap = zoneIdTree.treeMap;\n        let parsedZoneId = null;\n        let parseLength = 0;\n        while(treeMap != null) {\n            const parsedSubZoneId = text.substr(position, Math.min(treeMap.length, maxParseLength));\n            treeMap = treeMap.get(parsedSubZoneId);\n            if (treeMap != null && treeMap.isLeaf) {\n                parsedZoneId = parsedSubZoneId;\n                parseLength = treeMap.length;\n            }\n        }\n        if (parsedZoneId != null) {\n            context.setParsedZone(ZoneRegion.ofId(parsedZoneId));\n            return position + parseLength;\n        }\n\n        return ~position;\n    }\n\n    /**\n     *\n     * @param {DateTimeParseContext} context\n     * @param {String} text\n     * @param {number} prefixPos\n     * @param {number} position\n     * @return {number}\n     */\n    _parsePrefixedOffset(context, text, prefixPos, position) {\n        const prefix = text.substring(prefixPos, position).toUpperCase();\n        const newContext = context.copy();\n        if (position < text.length && context.charEquals(text.charAt(position), 'Z')) {\n            context.setParsedZone(ZoneId.ofOffset(prefix, ZoneOffset.UTC));\n            return position;\n        }\n        const endPos = OffsetIdPrinterParser.INSTANCE_ID.parse(newContext, text, position);\n        if (endPos < 0) {\n            context.setParsedZone(ZoneId.ofOffset(prefix, ZoneOffset.UTC));\n            return position;\n        }\n        const offsetSecs = newContext.getParsed(ChronoField.OFFSET_SECONDS);\n        const offset = ZoneOffset.ofTotalSeconds(offsetSecs);\n        context.setParsedZone(ZoneId.ofOffset(prefix, offset));\n        return endPos;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.description;\n    }\n}\n\nclass ZoneIdTree {\n\n    static createTreeMap(availableZoneIds) {\n        const sortedZoneIds =  availableZoneIds.sort((a, b) => a.length - b.length);\n        const treeMap = new ZoneIdTreeMap(sortedZoneIds[0].length, false);\n        for (let i=0; i<sortedZoneIds.length; i++){\n            treeMap.add(sortedZoneIds[i]);\n        }\n        return new ZoneIdTree(sortedZoneIds.length, treeMap);\n    }\n\n    constructor(size, treeMap) {\n        this.size = size;\n        this.treeMap = treeMap;\n    }\n}\n\nclass ZoneIdTreeMap {\n    constructor(length = 0, isLeaf = false){\n        this.length = length;\n        this.isLeaf = isLeaf;\n        this._treeMap = {};\n    }\n\n    add(zoneId){\n        const idLength = zoneId.length;\n        if(idLength === this.length) {\n            this._treeMap[zoneId] = new ZoneIdTreeMap(idLength, true);\n        } else if (idLength > this.length) {\n            const subZoneId = zoneId.substr(0, this.length);\n            let subTreeMap = this._treeMap[subZoneId];\n            if (subTreeMap == null) {\n                subTreeMap = new ZoneIdTreeMap(idLength, false);\n                this._treeMap[subZoneId] = subTreeMap;\n            }\n            subTreeMap.add(zoneId);\n        }\n    }\n\n    get(zoneId){\n        return this._treeMap[zoneId];\n    }\n}\n\nlet zoneIdTree = new ZoneIdTree([]);","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert, requireNonNull, requireInstance } from '../assert';\nimport { IllegalArgumentException, IllegalStateException } from '../errors';\nimport { MathUtil } from '../MathUtil';\n\nimport { LocalDate } from '../LocalDate';\nimport { LocalDateTime } from '../LocalDateTime';\nimport { ZoneOffset } from '../ZoneOffset';\nimport { ChronoLocalDate } from '../chrono/ChronoLocalDate';\nimport { ChronoField } from '../temporal/ChronoField';\nimport { IsoFields } from '../temporal/IsoFields';\nimport { TemporalQueries } from '../temporal/TemporalQueries';\n\nimport { DateTimeFormatter } from './DateTimeFormatter';\nimport { DecimalStyle } from './DecimalStyle';\nimport { SignStyle } from './SignStyle';\nimport { TextStyle } from './TextStyle';\nimport { ResolverStyle } from './ResolverStyle';\n\nimport { CharLiteralPrinterParser } from './parser/CharLiteralPrinterParser';\nimport { CompositePrinterParser } from './parser/CompositePrinterParser';\nimport { FractionPrinterParser } from './parser/FractionPrinterParser';\nimport { NumberPrinterParser, ReducedPrinterParser } from './parser/NumberPrinterParser';\nimport { OffsetIdPrinterParser } from './parser/OffsetIdPrinterParser';\nimport { PadPrinterParserDecorator } from './parser/PadPrinterParserDecorator';\nimport { SettingsParser } from './parser/SettingsParser';\nimport { StringLiteralPrinterParser } from './parser/StringLiteralPrinterParser';\nimport { ZoneIdPrinterParser } from './parser/ZoneIdPrinterParser';\n\nconst MAX_WIDTH = 15; // can't parse all numbers with more then 15 digits in javascript\n\nexport class DateTimeFormatterBuilder {\n\n    /**\n     * Constructs a new instance of the builder.\n     */\n    constructor() {\n        /**\n         * The currently active builder, used by the outermost builder.\n         */\n        this._active = this;\n        /**\n         * The parent builder, null for the outermost builder.\n         */\n        this._parent = null;\n\n        /**\n         * The list of printers that will be used.\n         */\n        this._printerParsers = [];\n\n        /**\n         * Whether this builder produces an optional formatter.\n         */\n        this._optional = false;\n        /**\n         * The width to pad the next field to.\n         */\n        this._padNextWidth = 0;\n\n        /**\n         * The character to pad the next field with.\n         */\n        this._padNextChar = null;\n\n        /**\n         * The index of the last variable width value parser.\n         */\n        this._valueParserIndex = -1;\n    }\n\n    /**\n     * Private static factory, replaces private threeten constructor\n     * Returns a new instance of the builder.\n     *\n     * @param {DateTimeFormatterBuilder} parent  the parent builder, not null\n     * @param {boolean} optional  whether the formatter is optional, not null\n     * @return {DateTimeFormatterBuilder} new instance\n     */\n    static _of(parent, optional){\n        requireNonNull(parent, 'parent');\n        requireNonNull(optional, 'optional');\n\n        const dtFormatterBuilder = new DateTimeFormatterBuilder();\n        dtFormatterBuilder._parent = parent;\n        dtFormatterBuilder._optional = optional;\n\n        return dtFormatterBuilder;\n    }\n\n    /**\n     * Changes the parse style to be case sensitive for the remainder of the formatter.\n     *\n     * Parsing can be case sensitive or insensitive - by default it is case sensitive.\n     * This method allows the case sensitivity setting of parsing to be changed.\n     *\n     * Calling this method changes the state of the builder such that all\n     * subsequent builder method calls will parse text in case sensitive mode.\n     * See {@link parseCaseInsensitive} for the opposite setting.\n     * The parse case sensitive/insensitive methods may be called at any point\n     * in the builder, thus the parser can swap between case parsing modes\n     * multiple times during the parse.\n     *\n     * Since the default is case sensitive, this method should only be used after\n     * a previous call to {@link parseCaseInsensitive}.\n     *\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    parseCaseSensitive() {\n        this._appendInternalPrinterParser(SettingsParser.SENSITIVE);\n        return this;\n    }\n\n    /**\n     * Changes the parse style to be case insensitive for the remainder of the formatter.\n     *\n     * Parsing can be case sensitive or insensitive - by default it is case sensitive.\n     * This method allows the case sensitivity setting of parsing to be changed.\n     *\n     * Calling this method changes the state of the builder such that all\n     * subsequent builder method calls will parse text in case sensitive mode.\n     * See {@link parseCaseSensitive} for the opposite setting.\n     * The parse case sensitive/insensitive methods may be called at any point\n     * in the builder, thus the parser can swap between case parsing modes\n     * multiple times during the parse.\n     *\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    parseCaseInsensitive() {\n        this._appendInternalPrinterParser(SettingsParser.INSENSITIVE);\n        return this;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Changes the parse style to be strict for the remainder of the formatter.\n     *\n     * Parsing can be strict or lenient - by default its strict.\n     * This controls the degree of flexibility in matching the text and sign styles.\n     *\n     * When used, this method changes the parsing to be strict from this point onwards.\n     * As strict is the default, this is normally only needed after calling {@link parseLenient}.\n     * The change will remain in force until the end of the formatter that is eventually\n     * constructed or until {@link parseLenient} is called.\n     *\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    parseStrict() {\n        this._appendInternalPrinterParser(SettingsParser.STRICT);\n        return this;\n    }\n\n    /**\n     * Changes the parse style to be lenient for the remainder of the formatter.\n     * Note that case sensitivity is set separately to this method.\n     *\n     * Parsing can be strict or lenient - by default its strict.\n     * This controls the degree of flexibility in matching the text and sign styles.\n     * Applications calling this method should typically also call {@link parseCaseInsensitive}.\n     *\n     * When used, this method changes the parsing to be strict from this point onwards.\n     * The change will remain in force until the end of the formatter that is eventually\n     * constructed or until {@link parseStrict} is called.\n     *\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    parseLenient() {\n        this._appendInternalPrinterParser(SettingsParser.LENIENT);\n        return this;\n    }\n\n    /**\n     * appendValue function overloading\n     */\n    appendValue(){\n        if(arguments.length === 1){\n            return this._appendValue1.apply(this, arguments);\n        } else if(arguments.length === 2){\n            return this._appendValue2.apply(this, arguments);\n        } else {\n            return this._appendValue4.apply(this, arguments);\n        }\n    }\n\n    /**\n     * Appends the value of a date-time field to the formatter using a normal\n     * output style.\n     *\n     * The value of the field will be output during a print.\n     * If the value cannot be obtained then an exception will be thrown.\n     *\n     * The value will be printed as per the normal print of an integer value.\n     * Only negative numbers will be signed. No padding will be added.\n     *\n     * The parser for a variable width value such as this normally behaves greedily,\n     * requiring one digit, but accepting as many digits as possible.\n     * This behavior can be affected by 'adjacent value parsing'.\n     * See {@link appendValue} for full details.\n     *\n     * @param field  the field to append, not null\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    _appendValue1(field) {\n        requireNonNull(field);\n        this._appendValuePrinterParser(new NumberPrinterParser(field, 1, MAX_WIDTH, SignStyle.NORMAL));\n        return this;\n    }\n\n    /**\n     * Appends the value of a date-time field to the formatter using a fixed\n     * width, zero-padded approach.\n     *\n     * The value of the field will be output during a print.\n     * If the value cannot be obtained then an exception will be thrown.\n     *\n     * The value will be zero-padded on the left. If the size of the value\n     * means that it cannot be printed within the width then an exception is thrown.\n     * If the value of the field is negative then an exception is thrown during printing.\n     *\n     * This method supports a special technique of parsing known as 'adjacent value parsing'.\n     * This technique solves the problem where a variable length value is followed by one or more\n     * fixed length values. The standard parser is greedy, and thus it would normally\n     * steal the digits that are needed by the fixed width value parsers that follow the\n     * variable width one.\n     *\n     * No action is required to initiate 'adjacent value parsing'.\n     * When a call to {@link appendValue} with a variable width is made, the builder\n     * enters adjacent value parsing setup mode. If the immediately subsequent method\n     * call or calls on the same builder are to this method, then the parser will reserve\n     * space so that the fixed width values can be parsed.\n     *\n     * For example, consider `builder.appendValue(YEAR).appendValue(MONTH_OF_YEAR, 2)`.\n     * The year is a variable width parse of between 1 and 19 digits.\n     * The month is a fixed width parse of 2 digits.\n     * Because these were appended to the same builder immediately after one another,\n     * the year parser will reserve two digits for the month to parse.\n     * Thus, the text '201106' will correctly parse to a year of 2011 and a month of 6.\n     * Without adjacent value parsing, the year would greedily parse all six digits and leave\n     * nothing for the month.\n     *\n     * Adjacent value parsing applies to each set of fixed width not-negative values in the parser\n     * that immediately follow any kind of variable width value.\n     * Calling any other append method will end the setup of adjacent value parsing.\n     * Thus, in the unlikely event that you need to avoid adjacent value parsing behavior,\n     * simply add the `appendValue` to another {@link DateTimeFormatterBuilder}\n     * and add that to this builder.\n     *\n     * If adjacent parsing is active, then parsing must match exactly the specified\n     * number of digits in both strict and lenient modes.\n     * In addition, no positive or negative sign is permitted.\n     *\n     * @param field  the field to append, not null\n     * @param width  the width of the printed field, from 1 to 19\n     * @return this, for chaining, not null\n     * @throws IllegalArgumentException if the width is invalid\n     */\n    _appendValue2(field, width) {\n        requireNonNull(field);\n        if (width < 1 || width > MAX_WIDTH) {\n            throw new IllegalArgumentException(`The width must be from 1 to ${MAX_WIDTH} inclusive but was ${width}`);\n        }\n        const pp = new NumberPrinterParser(field, width, width, SignStyle.NOT_NEGATIVE);\n        this._appendValuePrinterParser(pp);\n        return this;\n    }\n\n    /**\n     * Appends the value of a date-time field to the formatter providing full\n     * control over printing.\n     *\n     * The value of the field will be output during a print.\n     * If the value cannot be obtained then an exception will be thrown.\n     *\n     * This method provides full control of the numeric formatting, including\n     * zero-padding and the positive/negative sign.\n     *\n     * The parser for a variable width value such as this normally behaves greedily,\n     * accepting as many digits as possible.\n     * This behavior can be affected by 'adjacent value parsing'.\n     * See {@link appendValue} for full details.\n     *\n     * In strict parsing mode, the minimum number of parsed digits is `minWidth`.\n     * In lenient parsing mode, the minimum number of parsed digits is one.\n     *\n     * If this method is invoked with equal minimum and maximum widths and a sign style of\n     * `NOT_NEGATIVE` then it delegates to `appendValue(TemporalField, int)`.\n     * In this scenario, the printing and parsing behavior described there occur.\n     *\n     * @param field  the field to append, not null\n     * @param minWidth  the minimum field width of the printed field, from 1 to 19\n     * @param maxWidth  the maximum field width of the printed field, from 1 to 19\n     * @param signStyle  the positive/negative output style, not null\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     * @throws IllegalArgumentException if the widths are invalid\n     */\n    _appendValue4(field, minWidth, maxWidth, signStyle) {\n        requireNonNull(field);\n        requireNonNull(signStyle);\n        if (minWidth === maxWidth && signStyle === SignStyle.NOT_NEGATIVE) {\n            return this._appendValue2(field, maxWidth);\n        }\n        if (minWidth < 1 || minWidth > MAX_WIDTH) {\n            throw new IllegalArgumentException(`The minimum width must be from 1 to ${MAX_WIDTH} inclusive but was ${minWidth}`);\n        }\n        if (maxWidth < 1 || maxWidth > MAX_WIDTH) {\n            throw new IllegalArgumentException(`The minimum width must be from 1 to ${MAX_WIDTH} inclusive but was ${maxWidth}`);\n        }\n        if (maxWidth < minWidth) {\n            throw new IllegalArgumentException(`The maximum width must exceed or equal the minimum width but ${maxWidth} < ${minWidth}`);\n        }\n        const pp = new NumberPrinterParser(field, minWidth, maxWidth, signStyle);\n        this._appendValuePrinterParser(pp);\n        return this;\n    }\n\n    /**\n     * appendValueReduced function overloading\n     */\n    appendValueReduced() {\n        if (arguments.length === 4 && arguments[3] instanceof ChronoLocalDate) {\n            return this._appendValueReducedFieldWidthMaxWidthBaseDate.apply(this, arguments);\n        } else {\n            return this._appendValueReducedFieldWidthMaxWidthBaseValue.apply(this, arguments);\n        }\n    }\n\n    /**\n     * Appends the reduced value of a date-time field to the formatter.\n     *\n     * Since fields such as year vary by chronology, it is recommended to use the\n     * {@link appendValueReduced} date}\n     * variant of this method in most cases. This variant is suitable for\n     * simple fields or working with only the ISO chronology.\n     *\n     * For formatting, the `width` and `maxWidth` are used to\n     * determine the number of characters to format.\n     * If they are equal then the format is fixed width.\n     * If the value of the field is within the range of the `baseValue` using\n     * `width` characters then the reduced value is formatted otherwise the value is\n     * truncated to fit `maxWidth`.\n     * The rightmost characters are output to match the width, left padding with zero.\n     *\n     * For strict parsing, the number of characters allowed by `width` to `maxWidth` are parsed.\n     * For lenient parsing, the number of characters must be at least 1 and less than 10.\n     * If the number of digits parsed is equal to `width` and the value is positive,\n     * the value of the field is computed to be the first number greater than\n     * or equal to the `baseValue` with the same least significant characters,\n     * otherwise the value parsed is the field value.\n     * This allows a reduced value to be entered for values in range of the baseValue\n     * and width and absolute values can be entered for values outside the range.\n     *\n     * For example, a base value of `1980` and a width of `2` will have\n     * valid values from `1980` to `2079`.\n     * During parsing, the text `\"12\"` will result in the value `2012` as that\n     * is the value within the range where the last two characters are \"12\".\n     * By contrast, parsing the text `\"1915\"` will result in the value `1915`.\n     *\n     * @param {TemporalField} field  the field to append, not null\n     * @param {number} width  the field width of the printed and parsed field, from 1 to 10\n     * @param {number} maxWidth  the maximum field width of the printed field, from 1 to 10\n     * @param {number} baseValue  the base value of the range of valid values\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     * @throws IllegalArgumentException if the width or base value is invalid\n     */\n    _appendValueReducedFieldWidthMaxWidthBaseValue(field, width, maxWidth, baseValue) {\n        requireNonNull(field, 'field');\n        const pp = new ReducedPrinterParser(field, width, maxWidth, baseValue, null);\n        this._appendValuePrinterParser(pp);\n        return this;\n    }\n\n    /**\n     * Appends the reduced value of a date-time field to the formatter.\n     *\n     * This is typically used for formatting and parsing a two digit year.\n     *\n     * The base date is used to calculate the full value during parsing.\n     * For example, if the base date is 1950-01-01 then parsed values for\n     * a two digit year parse will be in the range 1950-01-01 to 2049-12-31.\n     * Only the year would be extracted from the date, thus a base date of\n     * 1950-08-25 would also parse to the range 1950-01-01 to 2049-12-31.\n     * This behavior is necessary to support fields such as week-based-year\n     * or other calendar systems where the parsed value does not align with\n     * standard ISO years.\n     *\n     * The exact behavior is as follows. Parse the full set of fields and\n     * determine the effective chronology using the last chronology if\n     * it appears more than once. Then convert the base date to the\n     * effective chronology. Then extract the specified field from the\n     * chronology-specific base date and use it to determine the\n     * `baseValue` used below.\n     *\n     * For formatting, the `width` and `maxWidth` are used to\n     * determine the number of characters to format.\n     * If they are equal then the format is fixed width.\n     * If the value of the field is within the range of the `baseValue` using\n     * `width` characters then the reduced value is formatted otherwise the value is\n     * truncated to fit `maxWidth`.\n     * The rightmost characters are output to match the width, left padding with zero.\n     *\n     * For strict parsing, the number of characters allowed by `width` to `maxWidth` are parsed.\n     * For lenient parsing, the number of characters must be at least 1 and less than 10.\n     * If the number of digits parsed is equal to `width` and the value is positive,\n     * the value of the field is computed to be the first number greater than\n     * or equal to the `baseValue` with the same least significant characters,\n     * otherwise the value parsed is the field value.\n     * This allows a reduced value to be entered for values in range of the baseValue\n     * and width and absolute values can be entered for values outside the range.\n     *\n     * For example, a base value of `1980` and a width of `2` will have\n     * valid values from `1980` to `2079`.\n     * During parsing, the text `\"12\"` will result in the value `2012` as that\n     * is the value within the range where the last two characters are \"12\".\n     * By contrast, parsing the text `\"1915\"` will result in the value `1915`.\n     *\n     * @param {TemporalField} field  the field to append, not null\n     * @param {number} width  the field width of the printed and parsed field, from 1 to 10\n     * @param {number} maxWidth  the maximum field width of the printed field, from 1 to 10\n     * @param {ChronoLocalDate} baseDate  the base date used to calculate the base value for the range\n     *  of valid values in the parsed chronology, not null\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     * @throws IllegalArgumentException if the width or base value is invalid\n     */\n    _appendValueReducedFieldWidthMaxWidthBaseDate(field, width, maxWidth, baseDate) {\n        requireNonNull(field, 'field');\n        requireNonNull(baseDate, 'baseDate');\n        requireInstance(baseDate, ChronoLocalDate, 'baseDate');\n        const pp = new ReducedPrinterParser(field, width, maxWidth, 0, baseDate);\n        this._appendValuePrinterParser(pp);\n        return this;\n    }\n\n    /**\n     * Appends a fixed width printer-parser.\n     *\n     * @param pp  the printer-parser, not null\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    _appendValuePrinterParser(pp) {\n        assert(pp != null);\n        if (this._active._valueParserIndex >= 0 &&\n                this._active._printerParsers[this._active._valueParserIndex] instanceof NumberPrinterParser) {\n            const activeValueParser = this._active._valueParserIndex;\n\n            // adjacent parsing mode, update setting in previous parsers\n            let basePP = this._active._printerParsers[activeValueParser];\n            if (pp.minWidth() === pp.maxWidth() && pp.signStyle() === SignStyle.NOT_NEGATIVE) {\n                // Append the width to the subsequentWidth of the active parser\n                basePP = basePP.withSubsequentWidth(pp.maxWidth());\n                // Append the new parser as a fixed width\n                this._appendInternal(pp.withFixedWidth());\n                // Retain the previous active parser\n                this._active._valueParserIndex = activeValueParser;\n            } else {\n                // Modify the active parser to be fixed width\n                basePP = basePP.withFixedWidth();\n                // The new parser becomes the mew active parser\n                this._active._valueParserIndex = this._appendInternal(pp);\n            }\n            // Replace the modified parser with the updated one\n            this._active._printerParsers[activeValueParser] = basePP;\n        } else {\n            // The new Parser becomes the active parser\n            this._active._valueParserIndex = this._appendInternal(pp);\n        }\n        return this;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Appends the fractional value of a date-time field to the formatter.\n     *\n     * The fractional value of the field will be output including the\n     * preceding decimal point. The preceding value is not output.\n     * For example, the second-of-minute value of 15 would be output as `.25`.\n     *\n     * The width of the printed fraction can be controlled. Setting the\n     * minimum width to zero will cause no output to be generated.\n     * The printed fraction will have the minimum width necessary between\n     * the minimum and maximum widths - trailing zeroes are omitted.\n     * No rounding occurs due to the maximum width - digits are simply dropped.\n     *\n     * When parsing in strict mode, the number of parsed digits must be between\n     * the minimum and maximum width. When parsing in lenient mode, the minimum\n     * width is considered to be zero and the maximum is nine.\n     *\n     * If the value cannot be obtained then an exception will be thrown.\n     * If the value is negative an exception will be thrown.\n     * If the field does not have a fixed set of valid values then an\n     * exception will be thrown.\n     * If the field value in the date-time to be printed is invalid it\n     * cannot be printed and an exception will be thrown.\n     *\n     * @param {TemporalField} field  the field to append, not null\n     * @param {Number} minWidth  the minimum width of the field excluding the decimal point, from 0 to 9\n     * @param {Number} maxWidth  the maximum width of the field excluding the decimal point, from 1 to 9\n     * @param {boolean} decimalPoint  whether to output the localized decimal point symbol\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     * @throws IllegalArgumentException if the field has a variable set of valid values or\n     *  either width is invalid\n     */\n    appendFraction(field, minWidth, maxWidth, decimalPoint) {\n        this._appendInternal(new FractionPrinterParser(field, minWidth, maxWidth, decimalPoint));\n        return this;\n    }\n\n    /**\n     * Appends an instant using ISO-8601 to the formatter with control over\n     * the number of fractional digits.\n     *\n     * Instants have a fixed output format, although this method provides some\n     * control over the fractional digits. They are converted to a date-time\n     * with a zone-offset of UTC and printed using the standard ISO-8601 format.\n     * The localized decimal style is not used.\n     *\n     * The {@link this.fractionalDigits} parameter allows the output of the fractional\n     * second to be controlled. Specifying zero will cause no fractional digits\n     * to be output. From 1 to 9 will output an increasing number of digits, using\n     * zero right-padding if necessary. The special value -1 is used to output as\n     * many digits as necessary to avoid any trailing zeroes.\n     *\n     * When parsing in strict mode, the number of parsed digits must match the\n     * fractional digits. When parsing in lenient mode, any number of fractional\n     * digits from zero to nine are accepted.\n     *\n     * The instant is obtained using {@link ChronoField#INSTANT_SECONDS}\n     * and optionally (@code NANO_OF_SECOND). The value of {@link INSTANT_SECONDS}\n     * may be outside the maximum range of {@link LocalDateTime}.\n     *\n     * The {@link ResolverStyle} has no effect on instant parsing.\n     * The end-of-day time of '24:00' is handled as midnight at the start of the following day.\n     * The leap-second time of '23:59:59' is handled to some degree, see\n     * {@link DateTimeFormatter#parsedLeapSecond} for full details.\n     *\n     * An alternative to this method is to format/parse the instant as a single\n     * epoch-seconds value. That is achieved using `appendValue(INSTANT_SECONDS)`.\n     *\n     * @param {number} [fractionalDigits=-2] - the number of fractional second digits to format with,\n     *  from 0 to 9, or -1 to use as many digits as necessary\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    appendInstant(fractionalDigits=-2) {\n        if (fractionalDigits < -2 || fractionalDigits > 9) {\n            throw new IllegalArgumentException(`Invalid fractional digits: ${fractionalDigits}`);\n        }\n        this._appendInternal(new InstantPrinterParser(fractionalDigits));\n        return this;\n    }\n\n\n    /**\n     * Appends the zone offset, such as '+01:00', to the formatter.\n     *\n     * This appends an instruction to print/parse the offset ID to the builder.\n     * This is equivalent to calling `appendOffset(\"HH:MM:ss\", \"Z\")`.\n     *\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    appendOffsetId() {\n        this._appendInternal(OffsetIdPrinterParser.INSTANCE_ID);\n        return this;\n    }\n\n    /**\n     * Appends the zone offset, such as '+01:00', to the formatter.\n     *\n     * This appends an instruction to print/parse the offset ID to the builder.\n     *\n     * During printing, the offset is obtained using a mechanism equivalent\n     * to querying the temporal with {@link TemporalQueries#offset}.\n     * It will be printed using the format defined below.\n     * If the offset cannot be obtained then an exception is thrown unless the\n     * section of the formatter is optional.\n     *\n     * During parsing, the offset is parsed using the format defined below.\n     * If the offset cannot be parsed then an exception is thrown unless the\n     * section of the formatter is optional.\n     *\n     * The format of the offset is controlled by a pattern which must be one\n     * of the following:\n     *\n     * * `+HH` - hour only, ignoring minute and second\n     * * `+HHmm` - hour, with minute if non-zero, ignoring second, no colon\n     * * `+HH:mm` - hour, with minute if non-zero, ignoring second, with colon\n     * * `+HHMM` - hour and minute, ignoring second, no colon\n     * * `+HH:MM` - hour and minute, ignoring second, with colon\n     * * `+HHMMss` - hour and minute, with second if non-zero, no colon\n     * * `+HH:MM:ss` - hour and minute, with second if non-zero, with colon\n     * * `+HHMMSS` - hour, minute and second, no colon\n     * * `+HH:MM:SS` - hour, minute and second, with colon\n     *\n     * The \"no offset\" text controls what text is printed when the total amount of\n     * the offset fields to be output is zero.\n     * Example values would be 'Z', '+00:00', 'UTC' or 'GMT'.\n     * Three formats are accepted for parsing UTC - the \"no offset\" text, and the\n     * plus and minus versions of zero defined by the pattern.\n     *\n     * @param {String} pattern  the pattern to use, not null\n     * @param {String} noOffsetText  the text to use when the offset is zero, not null\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    appendOffset(pattern, noOffsetText) {\n        this._appendInternalPrinterParser(new OffsetIdPrinterParser(noOffsetText, pattern));\n        return this;\n    }\n\n    /**\n      * Appends the time-zone ID, such as 'Europe/Paris' or '+02:00', to the formatter.\n      *\n      * This appends an instruction to print/parse the zone ID to the builder.\n      * The zone ID is obtained in a strict manner suitable for {@link ZonedDateTime}.\n      * By contrast, {@link OffsetDateTime} does not have a zone ID suitable\n      * for use with this method, see {@link appendZoneOrOffsetId}.\n      *\n      * During printing, the zone is obtained using a mechanism equivalent\n      * to querying the temporal with {@link TemporalQueries#zoneId}.\n      * It will be printed using the result of {@link ZoneId#getId}.\n      * If the zone cannot be obtained then an exception is thrown unless the\n      * section of the formatter is optional.\n      *\n      * During parsing, the zone is parsed and must match a known zone or offset.\n      * If the zone cannot be parsed then an exception is thrown unless the\n      * section of the formatter is optional.\n      *\n      * @return {DateTimeFormatterBuilder} this, for chaining, not null\n      * @see #appendZoneRegionId()\n      */\n    appendZoneId() {\n        this._appendInternal(new ZoneIdPrinterParser(TemporalQueries.zoneId(), 'ZoneId()'));\n        return this;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Appends the elements defined by the specified pattern to the builder.\n     *\n     * All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters.\n     * The characters '{' and '}' are reserved for future use.\n     * The characters '[' and ']' indicate optional patterns.\n     * The following pattern letters are defined:\n     * <pre>\n     *  |Symbol  |Meaning                     |Presentation      |Examples\n     *  |--------|----------------------------|------------------|----------------------------------------------------\n     *  | G      | era                        | number/text      | 1; 01; AD; Anno Domini\n     *  | u      | year                       | year             | 2004; 04\n     *  | y      | year-of-era                | year             | 2004; 04\n     *  | D      | day-of-year                | number           | 189\n     *  | M      | month-of-year              | number/text      | 7; 07; Jul; July; J\n     *  | d      | day-of-month               | number           | 10\n     *  |        |                            |                  |\n     *  | Q      | quarter-of-year            | number/text      | 3; 03; Q3\n     *  | Y      | week-based-year            | year             | 1996; 96\n     *  | w      | week-of-year               | number           | 27\n     *  | W      | week-of-month              | number           | 27\n     *  | e      | localized day-of-week      | number           | 2; Tue; Tuesday; T\n     *  | E      | day-of-week                | number/text      | 2; Tue; Tuesday; T\n     *  | F      | week-of-month              | number           | 3\n     *  |        |                            |                  |\n     *  | a      | am-pm-of-day               | text             | PM\n     *  | h      | clock-hour-of-am-pm (1-12) | number           | 12\n     *  | K      | hour-of-am-pm (0-11)       | number           | 0\n     *  | k      | clock-hour-of-am-pm (1-24) | number           | 0\n     *  |        |                            |                  |\n     *  | H      | hour-of-day (0-23)         | number           | 0\n     *  | m      | minute-of-hour             | number           | 30\n     *  | s      | second-of-minute           | number           | 55\n     *  | S      | fraction-of-second         | fraction         | 978\n     *  | A      | milli-of-day               | number           | 1234\n     *  | n      | nano-of-second             | number           | 987654321\n     *  | N      | nano-of-day                | number           | 1234000000\n     *  |        |                            |                  |\n     *  | V      | time-zone ID               | zone-id          | America/Los_Angeles; Z; -08:30\n     *  | z      | time-zone name             | zone-name        | Pacific Standard Time; PST\n     *  | X      | zone-offset 'Z' for zero   | offset-X         | Z; -08; -0830; -08:30; -083015; -08:30:15;\n     *  | x      | zone-offset                | offset-x         | +0000; -08; -0830; -08:30; -083015; -08:30:15;\n     *  | Z      | zone-offset                | offset-Z         | +0000; -0800; -08:00;\n     *  |        |                            |                  |\n     *  | p      | pad next                   | pad modifier     | 1\n     *  |        |                            |                  |\n     *  | '      | escape for text            | delimiter        |\n     *  | ''     | single quote               | literal          | '\n     *  | [      | optional section start     |                  |\n     *  | ]      | optional section end       |                  |\n     *  | {}     | reserved for future use    |                  |\n     * </pre>\n     *\n     * The count of pattern letters determine the format.\n     *\n     * **Text**: The text style is determined based on the number of pattern letters used.\n     * Less than 4 pattern letters will use the short form (see {@link TextStyle#SHORT}).\n     * Exactly 4 pattern letters will use the full form (see {@link TextStyle#FULL}).\n     * Exactly 5 pattern letters will use the narrow form (see {@link TextStyle#NARROW}).\n     *\n     * **Number**: If the count of letters is one, then the value is printed using the minimum number\n     * of digits and without padding as per {@link appendValue}. Otherwise, the\n     * count of digits is used as the width of the output field as per {@link appendValue}.\n     *\n     * **Number/Text**: If the count of pattern letters is 3 or greater, use the Text rules above.\n     * Otherwise use the Number rules above.\n     *\n     * **Fraction**: Outputs the nano-of-second field as a fraction-of-second.\n     * The nano-of-second value has nine digits, thus the count of pattern letters is from 1 to 9.\n     * If it is less than 9, then the nano-of-second value is truncated, with only the most\n     * significant digits being output.\n     * When parsing in strict mode, the number of parsed digits must match the count of pattern letters.\n     * When parsing in lenient mode, the number of parsed digits must be at least the count of pattern\n     * letters, up to 9 digits.\n     *\n     * **Year**: The count of letters determines the minimum field width below which padding is used.\n     * If the count of letters is two, then a reduced (see {@link appendValueReduced}) two digit form is used.\n     * For printing, this outputs the rightmost two digits. For parsing, this will parse using the\n     * base value of 2000, resulting in a year within the range 2000 to 2099 inclusive.\n     * If the count of letters is less than four (but not two), then the sign is only output for negative\n     * years as per {@link SignStyle#NORMAL}.\n     * Otherwise, the sign is output if the pad width is exceeded, as per {@link SignStyle#EXCEEDS_PAD}\n     *\n     * **ZoneId**: This outputs the time-zone ID, such as 'Europe/Paris'.\n     * If the count of letters is two, then the time-zone ID is output.\n     * Any other count of letters throws {@link IllegalArgumentException}.\n     * <pre>\n     *  Pattern     Equivalent builder methods\n     *   VV          appendZoneId()\n     * </pre>\n     *\n     * **Zone names**: This outputs the display name of the time-zone ID.\n     * If the count of letters is one, two or three, then the short name is output.\n     * If the count of letters is four, then the full name is output.\n     * Five or more letters throws {@link IllegalArgumentException}.\n     * <pre>\n     *  Pattern     Equivalent builder methods\n     *   z           appendZoneText(TextStyle.SHORT)\n     *   zz          appendZoneText(TextStyle.SHORT)\n     *   zzz         appendZoneText(TextStyle.SHORT)\n     *   zzzz        appendZoneText(TextStyle.FULL)\n     * </pre>\n     *\n     * **Offset X and x**: This formats the offset based on the number of pattern letters.\n     * One letter outputs just the hour', such as '+01', unless the minute is non-zero\n     * in which case the minute is also output, such as '+0130'.\n     * Two letters outputs the hour and minute, without a colon, such as '+0130'.\n     * Three letters outputs the hour and minute, with a colon, such as '+01:30'.\n     * Four letters outputs the hour and minute and optional second, without a colon, such as '+013015'.\n     * Five letters outputs the hour and minute and optional second, with a colon, such as '+01:30:15'.\n     * Six or more letters throws {@link IllegalArgumentException}.\n     * Pattern letter 'X' (upper case) will output 'Z' when the offset to be output would be zero,\n     * whereas pattern letter 'x' (lower case) will output '+00', '+0000', or '+00:00'.\n     * <pre>\n     *  Pattern     Equivalent builder methods\n     *   X           appendOffset(\"+HHmm\",\"Z\")\n     *   XX          appendOffset(\"+HHMM\",\"Z\")\n     *   XXX         appendOffset(\"+HH:MM\",\"Z\")\n     *   XXXX        appendOffset(\"+HHMMss\",\"Z\")\n     *   XXXXX       appendOffset(\"+HH:MM:ss\",\"Z\")\n     *   x           appendOffset(\"+HHmm\",\"+00\")\n     *   xx          appendOffset(\"+HHMM\",\"+0000\")\n     *   xxx         appendOffset(\"+HH:MM\",\"+00:00\")\n     *   xxxx        appendOffset(\"+HHMMss\",\"+0000\")\n     *   xxxxx       appendOffset(\"+HH:MM:ss\",\"+00:00\")\n     * </pre>\n     *\n     * **Offset Z**: This formats the offset based on the number of pattern letters.\n     * One, two or three letters outputs the hour and minute, without a colon, such as '+0130'.\n     * Four or more letters throws {@link IllegalArgumentException}.\n     * The output will be '+0000' when the offset is zero.\n     * <pre>\n     *  Pattern     Equivalent builder methods\n     *   Z           appendOffset(\"+HHMM\",\"+0000\")\n     *   ZZ          appendOffset(\"+HHMM\",\"+0000\")\n     *   ZZZ         appendOffset(\"+HHMM\",\"+0000\")\n     * </pre>\n     *\n     * **Optional section**: The optional section markers work exactly like calling {@link optionalStart}\n     * and {@link optionalEnd}.\n     *\n     * **Pad modifier**: Modifies the pattern that immediately follows to be padded with spaces.\n     * The pad width is determined by the number of pattern letters.\n     * This is the same as calling {@link padNext}.\n     *\n     * For example, 'ppH' outputs the hour-of-day padded on the left with spaces to a width of 2.\n     *\n     * Any unrecognized letter is an error.\n     * Any non-letter character, other than '[', ']', '{', '}' and the single quote will be output directly.\n     * Despite this, it is recommended to use single quotes around all characters that you want to\n     * output directly to ensure that future changes do not break your application.\n     *\n     * Note that the pattern string is similar, but not identical, to\n     * {@link java.text.SimpleDateFormat}.\n     * The pattern string is also similar, but not identical, to that defined by the\n     * Unicode Common Locale Data Repository (CLDR/LDML).\n     * Pattern letters 'E' and 'u' are merged, which changes the meaning of \"E\" and \"EE\" to be numeric.\n     * Pattern letters 'X' is aligned with Unicode CLDR/LDML, which affects pattern 'X'.\n     * Pattern letter 'y' and 'Y' parse years of two digits and more than 4 digits differently.\n     * Pattern letters 'n', 'A', 'N', 'I' and 'p' are added.\n     * Number types will reject large numbers.\n     *\n     * @param {String} pattern  the pattern to add, not null\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     * @throws IllegalArgumentException if the pattern is invalid\n     */\n    appendPattern(pattern) {\n        requireNonNull(pattern, 'pattern');\n        this._parsePattern(pattern);\n        return this;\n    }\n\n\n    //-----------------------------------------------------------------------\n    // empty implementations of locale functionality, be implemented/overridden by js-joda-locale\n\n    appendZoneText() {\n        throw new IllegalArgumentException('Pattern using (localized) text not implemented, use @js-joda/locale plugin!');\n    }\n\n    appendText() {\n        throw new IllegalArgumentException('Pattern using (localized) text not implemented, use @js-joda/locale plugin!');\n    }\n\n    appendLocalizedOffset() {\n        throw new IllegalArgumentException('Pattern using (localized) text not implemented, use @js-joda/locale plugin!');\n    }\n\n    appendWeekField() {\n        throw new IllegalArgumentException('Pattern using (localized) text not implemented, use @js-joda/locale plugin!');\n    }\n\n    //-----------------------------------------------------------------------\n\n    _parsePattern(pattern) {\n        /** Map of letters to fields. */\n        const FIELD_MAP = {\n            'G': ChronoField.ERA,\n            'y': ChronoField.YEAR_OF_ERA,\n            'u': ChronoField.YEAR,\n            'Q': IsoFields.QUARTER_OF_YEAR,\n            'q': IsoFields.QUARTER_OF_YEAR,\n            'M': ChronoField.MONTH_OF_YEAR,\n            'L': ChronoField.MONTH_OF_YEAR,\n            'D': ChronoField.DAY_OF_YEAR,\n            'd': ChronoField.DAY_OF_MONTH,\n            'F': ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH,\n            'E': ChronoField.DAY_OF_WEEK,\n            'c': ChronoField.DAY_OF_WEEK,\n            'e': ChronoField.DAY_OF_WEEK,\n            'a': ChronoField.AMPM_OF_DAY,\n            'H': ChronoField.HOUR_OF_DAY,\n            'k': ChronoField.CLOCK_HOUR_OF_DAY,\n            'K': ChronoField.HOUR_OF_AMPM,\n            'h': ChronoField.CLOCK_HOUR_OF_AMPM,\n            'm': ChronoField.MINUTE_OF_HOUR,\n            's': ChronoField.SECOND_OF_MINUTE,\n            'S': ChronoField.NANO_OF_SECOND,\n            'A': ChronoField.MILLI_OF_DAY,\n            'n': ChronoField.NANO_OF_SECOND,\n            'N': ChronoField.NANO_OF_DAY\n        };\n\n        for (let pos = 0; pos < pattern.length; pos++) {\n            let cur = pattern.charAt(pos);\n            if ((cur >= 'A' && cur <= 'Z') || (cur >= 'a' && cur <= 'z')) {\n                let start = pos++;\n                for (; pos < pattern.length && pattern.charAt(pos) === cur; pos++);  // short loop\n                let count = pos - start;\n                // padding\n                if (cur === 'p') {\n                    let pad = 0;\n                    if (pos < pattern.length) {\n                        cur = pattern.charAt(pos);\n                        if ((cur >= 'A' && cur <= 'Z') || (cur >= 'a' && cur <= 'z')) {\n                            pad = count;\n                            start = pos++;\n                            for (; pos < pattern.length && pattern.charAt(pos) === cur; pos++);  // short loop\n                            count = pos - start;\n                        }\n                    }\n                    if (pad === 0) {\n                        throw new IllegalArgumentException(\n                            `Pad letter 'p' must be followed by valid pad pattern: ${pattern}`);\n                    }\n                    this.padNext(pad); // pad and continue parsing\n                }\n                // main rules\n                const field = FIELD_MAP[cur];\n                if (field != null) {\n                    this._parseField(cur, count, field);\n                } else if (cur === 'z') {\n                    if (count > 4) {\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                    } else if (count === 4) {\n                        this.appendZoneText(TextStyle.FULL);\n                    } else {\n                        this.appendZoneText(TextStyle.SHORT);\n                    }\n                } else if (cur === 'V') {\n                    if (count !== 2) {\n                        throw new IllegalArgumentException(`Pattern letter count must be 2: ${cur}`);\n                    }\n                    this.appendZoneId();\n                } else if (cur === 'Z') {\n                    if (count < 4) {\n                        this.appendOffset('+HHMM', '+0000');\n                    } else if (count === 4) {\n                        this.appendLocalizedOffset(TextStyle.FULL);\n                    } else if (count === 5) {\n                        this.appendOffset('+HH:MM:ss', 'Z');\n                    } else {\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                    }\n                } else if (cur === 'O') {\n                    if (count === 1) {\n                        this.appendLocalizedOffset(TextStyle.SHORT);\n                    } else if (count === 4) {\n                        this.appendLocalizedOffset(TextStyle.FULL);\n                    } else {\n                        throw new IllegalArgumentException(`Pattern letter count must be 1 or 4: ${cur}`);\n                    }\n                } else if (cur === 'X') {\n                    if (count > 5) {\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                    }\n                    this.appendOffset(OffsetIdPrinterParser.PATTERNS[count + (count === 1 ? 0 : 1)], 'Z');\n                } else if (cur === 'x') {\n                    if (count > 5) {\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                    }\n                    const zero = (count === 1 ? '+00' : (count % 2 === 0 ? '+0000' : '+00:00'));\n                    this.appendOffset(OffsetIdPrinterParser.PATTERNS[count + (count === 1 ? 0 : 1)], zero);\n                } else if (cur === 'W') {\n                    if (count > 1) {\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                    }\n                    this.appendWeekField('W', count);\n                } else if (cur === 'w') {\n                    if (count > 2) {\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                    }\n                    this.appendWeekField('w', count);\n                } else if (cur === 'Y') {\n                    this.appendWeekField('Y', count);\n                } else {\n                    throw new IllegalArgumentException(`Unknown pattern letter: ${cur}`);\n                }\n                pos--;\n\n            } else if (cur === '\\'') {\n                // parse literals\n                const start = pos++;\n                for (; pos < pattern.length; pos++) {\n                    if (pattern.charAt(pos) === '\\'') {\n                        if (pos + 1 < pattern.length && pattern.charAt(pos + 1) === '\\'') {\n                            pos++;\n                        } else {\n                            break;  // end of literal\n                        }\n                    }\n                }\n                if (pos >= pattern.length) {\n                    throw new IllegalArgumentException(`Pattern ends with an incomplete string literal: ${pattern}`);\n                }\n                const str = pattern.substring(start + 1, pos);\n                if (str.length === 0) {\n                    this.appendLiteral('\\'');\n                } else {\n                    this.appendLiteral(str.replace('\\'\\'', '\\''));\n                }\n\n            } else if (cur === '[') {\n                this.optionalStart();\n\n            } else if (cur === ']') {\n                if (this._active._parent === null) {\n                    throw new IllegalArgumentException('Pattern invalid as it contains ] without previous [');\n                }\n                this.optionalEnd();\n\n            } else if (cur === '{' || cur === '}' || cur === '#') {\n                throw new IllegalArgumentException(`Pattern includes reserved character: '${cur}'`);\n            } else {\n                this.appendLiteral(cur);\n            }\n        }\n    }\n\n    _parseField(cur, count, field) {\n        switch (cur) {\n            case 'u':\n            case 'y':\n                if (count === 2) {\n                    this.appendValueReduced(field, 2, 2, ReducedPrinterParser.BASE_DATE);\n                } else if (count < 4) {\n                    this.appendValue(field, count, MAX_WIDTH, SignStyle.NORMAL);\n                } else {\n                    this.appendValue(field, count, MAX_WIDTH, SignStyle.EXCEEDS_PAD);\n                }\n                break;\n            case 'M':\n            case 'Q':\n                switch (count) {\n                    case 1:\n                        this.appendValue(field);\n                        break;\n                    case 2:\n                        this.appendValue(field, 2);\n                        break;\n                    case 3:\n                        this.appendText(field, TextStyle.SHORT);\n                        break;\n                    case 4:\n                        this.appendText(field, TextStyle.FULL);\n                        break;\n                    case 5:\n                        this.appendText(field, TextStyle.NARROW);\n                        break;\n                    default:\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                }\n                break;\n            case 'L':\n            case 'q':\n                switch (count) {\n                    case 1:\n                        this.appendValue(field);\n                        break;\n                    case 2:\n                        this.appendValue(field, 2);\n                        break;\n                    case 3:\n                        this.appendText(field, TextStyle.SHORT_STANDALONE);\n                        break;\n                    case 4:\n                        this.appendText(field, TextStyle.FULL_STANDALONE);\n                        break;\n                    case 5:\n                        this.appendText(field, TextStyle.NARROW_STANDALONE);\n                        break;\n                    default:\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                }\n                break;\n            case 'e':\n                switch (count) {\n                    case 1:\n                    case 2:\n                        this.appendWeekField('e', count);\n                        break;\n                    case 3:\n                        this.appendText(field, TextStyle.SHORT);\n                        break;\n                    case 4:\n                        this.appendText(field, TextStyle.FULL);\n                        break;\n                    case 5:\n                        this.appendText(field, TextStyle.NARROW);\n                        break;\n                    default:\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                }\n                // eslint-disable-next-line no-unreachable\n                break;\n            case 'c':\n                switch (count) {\n                    case 1:\n                        this.appendWeekField('c', count);\n                        break;\n                    case 2:\n                        throw new IllegalArgumentException(`Invalid number of pattern letters: ${cur}`);\n                    case 3:\n                        this.appendText(field, TextStyle.SHORT_STANDALONE);\n                        break;\n                    case 4:\n                        this.appendText(field, TextStyle.FULL_STANDALONE);\n                        break;\n                    case 5:\n                        this.appendText(field, TextStyle.NARROW_STANDALONE);\n                        break;\n                    default:\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                }\n                // eslint-disable-next-line no-unreachable\n                break;\n            case 'a':\n                if (count === 1) {\n                    this.appendText(field, TextStyle.SHORT);\n                } else {\n                    throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                }\n                // eslint-disable-next-line no-unreachable\n                break;\n            case 'E':\n            case 'G':\n                switch (count) {\n                    case 1:\n                    case 2:\n                    case 3:\n                        this.appendText(field, TextStyle.SHORT);\n                        break;\n                    case 4:\n                        this.appendText(field, TextStyle.FULL);\n                        break;\n                    case 5:\n                        this.appendText(field, TextStyle.NARROW);\n                        break;\n                    default:\n                        throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                }\n                // eslint-disable-next-line no-unreachable\n                break;\n            case 'S':\n                this.appendFraction(ChronoField.NANO_OF_SECOND, count, count, false);\n                break;\n            case 'F':\n                if (count === 1) {\n                    this.appendValue(field);\n                } else {\n                    throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                }\n                break;\n            case 'd':\n            case 'h':\n            case 'H':\n            case 'k':\n            case 'K':\n            case 'm':\n            case 's':\n                if (count === 1) {\n                    this.appendValue(field);\n                } else if (count === 2) {\n                    this.appendValue(field, count);\n                } else {\n                    throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                }\n                break;\n            case 'D':\n                if (count === 1) {\n                    this.appendValue(field);\n                } else if (count <= 3) {\n                    this.appendValue(field, count);\n                } else {\n                    throw new IllegalArgumentException(`Too many pattern letters: ${cur}`);\n                }\n                break;\n            default:\n                if (count === 1) {\n                    this.appendValue(field);\n                } else {\n                    this.appendValue(field, count);\n                }\n                break;\n        }\n    }\n\n    /**\n     * padNext function overloading\n     */\n    padNext() {\n        if (arguments.length === 1) {\n            return this._padNext1.apply(this, arguments);\n        } else {\n            return this._padNext2.apply(this, arguments);\n        }\n    }\n\n    /**\n     * Causes the next added printer/parser to pad to a fixed width using a space.\n     *\n     * This padding will pad to a fixed width using spaces.\n     *\n     * During formatting, the decorated element will be output and then padded\n     * to the specified width. An exception will be thrown during printing if\n     * the pad width is exceeded.\n     *\n     * During parsing, the padding and decorated element are parsed.\n     * If parsing is lenient, then the pad width is treated as a maximum.\n     * If parsing is case insensitive, then the pad character is matched ignoring case.\n     * The padding is parsed greedily. Thus, if the decorated element starts with\n     * the pad character, it will not be parsed.\n     *\n     * @param {number} padWidth  the pad width, 1 or greater\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     * @throws IllegalArgumentException if pad width is too small\n     */\n    _padNext1(padWidth) {\n        return this._padNext2(padWidth, ' ');\n    }\n\n    /**\n     * Causes the next added printer/parser to pad to a fixed width.\n     *\n     * This padding is intended for padding other than zero-padding.\n     * Zero-padding should be achieved using the appendValue methods.\n     *\n     * During formatting, the decorated element will be output and then padded\n     * to the specified width. An exception will be thrown during printing if\n     * the pad width is exceeded.\n     *\n     * During parsing, the padding and decorated element are parsed.\n     * If parsing is lenient, then the pad width is treated as a maximum.\n     * If parsing is case insensitive, then the pad character is matched ignoring case.\n     * The padding is parsed greedily. Thus, if the decorated element starts with\n     * the pad character, it will not be parsed.\n     *\n     * @param {number} padWidth  the pad width, 1 or greater\n     * @param {String} padChar  the pad character\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     * @throws IllegalArgumentException if pad width is too small\n     */\n    _padNext2(padWidth, padChar) {\n        if (padWidth < 1) {\n            throw new IllegalArgumentException(`The pad width must be at least one but was ${padWidth}`);\n        }\n        this._active._padNextWidth = padWidth;\n        this._active._padNextChar = padChar;\n        this._active._valueParserIndex = -1;\n        return this;\n    }\n\n\n    //-----------------------------------------------------------------------\n    /**\n     * Mark the start of an optional section.\n     *\n     * The output of printing can include optional sections, which may be nested.\n     * An optional section is started by calling this method and ended by calling\n     * {@link optionalEnd} or by ending the build process.\n     *\n     * All elements in the optional section are treated as optional.\n     * During printing, the section is only output if data is available in the\n     * {@link TemporalAccessor} for all the elements in the section.\n     * During parsing, the whole section may be missing from the parsed string.\n     *\n     * For example, consider a builder setup as\n     * `builder.appendValue(HOUR_OF_DAY,2).optionalStart().appendValue(MINUTE_OF_HOUR,2)`.\n     * The optional section ends automatically at the end of the builder.\n     * During printing, the minute will only be output if its value can be obtained from the date-time.\n     * During parsing, the input will be successfully parsed whether the minute is present or not.\n     *\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    optionalStart() {\n        this._active._valueParserIndex = -1;\n        this._active = DateTimeFormatterBuilder._of(this._active, true);\n        return this;\n    }\n\n    /**\n     * Ends an optional section.\n     *\n     * The output of printing can include optional sections, which may be nested.\n     * An optional section is started by calling {@link optionalStart} and ended\n     * using this method (or at the end of the builder).\n     *\n     * Calling this method without having previously called `optionalStart`\n     * will throw an exception.\n     * Calling this method immediately after calling `optionalStart` has no effect\n     * on the formatter other than ending the (empty) optional section.\n     *\n     * All elements in the optional section are treated as optional.\n     * During printing, the section is only output if data is available in the\n     * {@link TemporalAccessor} for all the elements in the section.\n     * During parsing, the whole section may be missing from the parsed string.\n     *\n     * For example, consider a builder setup as\n     * `builder.appendValue(HOUR_OF_DAY,2).optionalStart().appendValue(MINUTE_OF_HOUR,2).optionalEnd()`.\n     * During printing, the minute will only be output if its value can be obtained from the date-time.\n     * During parsing, the input will be successfully parsed whether the minute is present or not.\n     *\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     * @throws IllegalStateException if there was no previous call to `optionalStart`\n     */\n    optionalEnd() {\n        if (this._active._parent == null) {\n            throw new IllegalStateException('Cannot call optionalEnd() as there was no previous call to optionalStart()');\n        }\n        if (this._active._printerParsers.length > 0) {\n            const cpp = new CompositePrinterParser(this._active._printerParsers, this._active._optional);\n            this._active = this._active._parent;\n            this._appendInternal(cpp);\n        } else {\n            this._active = this._active._parent;\n        }\n        return this;\n    }\n\n    /**\n     * Appends a printer and/or parser to the internal list handling padding.\n     *\n     * @param pp  the printer-parser to add, not null\n     * @return the index into the active parsers list\n     */\n    _appendInternal(pp) {\n        assert(pp != null);\n        if (this._active._padNextWidth > 0) {\n            if (pp != null) {\n                pp = new PadPrinterParserDecorator(pp, this._active._padNextWidth, this._active._padNextChar);\n            }\n            this._active._padNextWidth = 0;\n            this._active._padNextChar = 0;\n        }\n        this._active._printerParsers.push(pp);\n        this._active._valueParserIndex = -1;\n        return this._active._printerParsers.length - 1;\n    }\n\n    /**\n     * Appends a string literal to the formatter.\n     *\n     * This string will be output during a print.\n     *\n     * If the literal is empty, nothing is added to the formatter.\n     *\n     * @param literal  the literal to append, not null\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    appendLiteral(literal) {\n        assert(literal != null);\n        if (literal.length > 0) {\n            if (literal.length === 1) {\n                this._appendInternalPrinterParser(new CharLiteralPrinterParser(literal.charAt(0)));\n            } else {\n                this._appendInternalPrinterParser(new StringLiteralPrinterParser(literal));\n            }\n        }\n        return this;\n    }\n\n    /**\n     * Appends a printer and/or parser to the internal list handling padding.\n     *\n     * @param pp  the printer-parser to add, not null\n     * @return the index into the active parsers list\n     */\n    _appendInternalPrinterParser(pp) {\n        assert(pp != null);\n        if (this._active._padNextWidth > 0) {\n            if (pp != null) {\n                pp = new PadPrinterParserDecorator(pp, this._active._padNextWidth, this._active._padNextChar);\n            }\n            this._active._padNextWidth = 0;\n            this._active._padNextChar = 0;\n        }\n        this._active._printerParsers.push(pp);\n        this._active._valueParserIndex = -1;\n        return this._active._printerParsers.length - 1;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Appends all the elements of a formatter to the builder.\n     *\n     * This method has the same effect as appending each of the constituent\n     * parts of the formatter directly to this builder.\n     *\n     * @param {DateTimeFormatter} formatter  the formatter to add, not null\n     * @return {DateTimeFormatterBuilder} this, for chaining, not null\n     */\n    append(formatter) {\n        requireNonNull(formatter, 'formatter');\n        this._appendInternal(formatter._toPrinterParser(false));\n        return this;\n    }\n\n    /**\n     * Completes this builder by creating the DateTimeFormatter.\n     *\n     * This will create a formatter with the specified locale.\n     * Numbers will be printed and parsed using the standard non-localized set of symbols.\n     *\n     * Calling this method will end any open optional sections by repeatedly\n     * calling {@link optionalEnd} before creating the formatter.\n     *\n     * This builder can still be used after creating the formatter if desired,\n     * although the state may have been changed by calls to `optionalEnd`.\n     *\n     * @param resolverStyle  the new resolver style\n     * @return the created formatter, not null\n     */\n    toFormatter(resolverStyle=ResolverStyle.SMART) {\n        while (this._active._parent != null) {\n            this.optionalEnd();\n        }\n        const pp = new CompositePrinterParser(this._printerParsers, false);\n        return new DateTimeFormatter(pp, null, DecimalStyle.STANDARD, resolverStyle, null, null, null);\n    }\n\n}\n\n// days in a 400 year cycle = 146097\n// days in a 10,000 year cycle = 146097 * 25\n// seconds per day = 86400\nconst SECONDS_PER_10000_YEARS = 146097 * 25 * 86400;\nconst SECONDS_0000_TO_1970 = ((146097 * 5) - (30 * 365 + 7)) * 86400;\n\n/**\n * Prints or parses an ISO-8601 instant.\n */\nclass InstantPrinterParser  {\n\n    constructor(fractionalDigits) {\n        this.fractionalDigits = fractionalDigits;\n    }\n\n    print(context, buf) {\n        // use INSTANT_SECONDS, thus this code is not bound by Instant.MAX\n        const inSecs = context.getValue(ChronoField.INSTANT_SECONDS);\n        let inNanos = 0;\n        if (context.temporal().isSupported(ChronoField.NANO_OF_SECOND)) {\n            inNanos = context.temporal().getLong(ChronoField.NANO_OF_SECOND);\n        }\n        if (inSecs == null) {\n            return false;\n        }\n        const inSec = inSecs;\n        let inNano = ChronoField.NANO_OF_SECOND.checkValidIntValue(inNanos);\n        if (inSec >= -SECONDS_0000_TO_1970) {\n            // current era\n            const zeroSecs = inSec - SECONDS_PER_10000_YEARS + SECONDS_0000_TO_1970;\n            const hi = MathUtil.floorDiv(zeroSecs, SECONDS_PER_10000_YEARS) + 1;\n            const lo = MathUtil.floorMod(zeroSecs, SECONDS_PER_10000_YEARS);\n            const ldt = LocalDateTime.ofEpochSecond(lo - SECONDS_0000_TO_1970, 0, ZoneOffset.UTC);\n            if (hi > 0) {\n                buf.append('+').append(hi);\n            }\n            buf.append(ldt.toString());\n            if (ldt.second() === 0) {\n                buf.append(':00');\n            }\n        } else {\n            // before current era\n            const zeroSecs = inSec + SECONDS_0000_TO_1970;\n            const hi = MathUtil.intDiv(zeroSecs, SECONDS_PER_10000_YEARS);\n            const lo = MathUtil.intMod(zeroSecs, SECONDS_PER_10000_YEARS);\n            const ldt = LocalDateTime.ofEpochSecond(lo - SECONDS_0000_TO_1970, 0, ZoneOffset.UTC);\n            const pos = buf.length();\n            buf.append(ldt.toString());\n            if (ldt.second() === 0) {\n                buf.append(':00');\n            }\n            if (hi < 0) {\n                if (ldt.year() === -10000) {\n                    buf.replace(pos, pos + 2, `${hi - 1}`);\n                } else if (lo === 0) {\n                    buf.insert(pos, hi);\n                } else {\n                    buf.insert(pos + 1, Math.abs(hi));\n                }\n            }\n        }\n        //fraction\n        if (this.fractionalDigits === -2) {\n            if (inNano !== 0) {\n                buf.append('.');\n                if (MathUtil.intMod(inNano, 1000000) === 0) {\n                    buf.append((`${MathUtil.intDiv(inNano, 1000000) + 1000}`).substring(1));\n                } else if (MathUtil.intMod(inNano, 1000) === 0) {\n                    buf.append((`${MathUtil.intDiv(inNano, 1000) + 1000000}`).substring(1));\n                } else {\n                    buf.append((`${(inNano) + 1000000000}`).substring(1));\n                }\n            }\n        } else if (this.fractionalDigits > 0 || (this.fractionalDigits === -1 && inNano > 0)) {\n            buf.append('.');\n            let div = 100000000;\n            for (let i = 0; ((this.fractionalDigits === -1 && inNano > 0) || i < this.fractionalDigits); i++) {\n                const digit = MathUtil.intDiv(inNano, div);\n                buf.append(digit);\n                inNano = inNano - (digit * div);\n                div = MathUtil.intDiv(div, 10);\n            }\n        }\n        buf.append('Z');\n        return true;\n    }\n\n    parse(context, text, position) {\n        // new context to avoid overwriting fields like year/month/day\n        const newContext = context.copy();\n        const minDigits = (this.fractionalDigits < 0 ? 0 : this.fractionalDigits);\n        const maxDigits = (this.fractionalDigits < 0 ? 9 : this.fractionalDigits);\n        const parser = new DateTimeFormatterBuilder()\n            .append(DateTimeFormatter.ISO_LOCAL_DATE).appendLiteral('T')\n            .appendValue(ChronoField.HOUR_OF_DAY, 2).appendLiteral(':').appendValue(ChronoField.MINUTE_OF_HOUR, 2).appendLiteral(':')\n            .appendValue(ChronoField.SECOND_OF_MINUTE, 2).appendFraction(ChronoField.NANO_OF_SECOND, minDigits, maxDigits, true).appendLiteral('Z')\n            .toFormatter()._toPrinterParser(false);\n        const pos = parser.parse(newContext, text, position);\n        if (pos < 0) {\n            return pos;\n        }\n        // parser restricts most fields to 2 digits, so definitely int\n        // correctly parsed nano is also guaranteed to be valid\n        const yearParsed = newContext.getParsed(ChronoField.YEAR);\n        const month = newContext.getParsed(ChronoField.MONTH_OF_YEAR);\n        const day = newContext.getParsed(ChronoField.DAY_OF_MONTH);\n        let hour = newContext.getParsed(ChronoField.HOUR_OF_DAY);\n        const min = newContext.getParsed(ChronoField.MINUTE_OF_HOUR);\n        const secVal = newContext.getParsed(ChronoField.SECOND_OF_MINUTE);\n        const nanoVal = newContext.getParsed(ChronoField.NANO_OF_SECOND);\n        let sec = (secVal != null ? secVal : 0);\n        const nano = (nanoVal != null ? nanoVal : 0);\n        const year = MathUtil.intMod(yearParsed, 10000);\n        let days = 0;\n        if (hour === 24 && min === 0 && sec === 0 && nano === 0) {\n            hour = 0;\n            days = 1;\n        } else if (hour === 23 && min === 59 && sec === 60) {\n            context.setParsedLeapSecond();\n            sec = 59;\n        }\n        let instantSecs;\n        try {\n            const ldt = LocalDateTime.of(year, month, day, hour, min, sec, 0).plusDays(days);\n            instantSecs = ldt.toEpochSecond(ZoneOffset.UTC);\n            instantSecs += MathUtil.safeMultiply(MathUtil.intDiv(yearParsed, 10000), SECONDS_PER_10000_YEARS);\n        } catch (ex) {\n            return ~position;\n        }\n        let successPos = pos;\n        successPos = context.setParsedField(ChronoField.INSTANT_SECONDS, instantSecs, position, successPos);\n        return context.setParsedField(ChronoField.NANO_OF_SECOND, nano, position, successPos);\n    }\n\n    toString() {\n        return 'Instant()';\n    }\n}\n\n\nexport function _init() {\n    ReducedPrinterParser.BASE_DATE = LocalDate.of(2000, 1, 1);\n\n    DateTimeFormatterBuilder.CompositePrinterParser = CompositePrinterParser;\n    DateTimeFormatterBuilder.PadPrinterParserDecorator = PadPrinterParserDecorator;\n    DateTimeFormatterBuilder.SettingsParser = SettingsParser;\n    DateTimeFormatterBuilder.CharLiteralPrinterParser = StringLiteralPrinterParser;\n    DateTimeFormatterBuilder.StringLiteralPrinterParser = StringLiteralPrinterParser;\n    DateTimeFormatterBuilder.CharLiteralPrinterParser = CharLiteralPrinterParser;\n    DateTimeFormatterBuilder.NumberPrinterParser = NumberPrinterParser;\n    DateTimeFormatterBuilder.ReducedPrinterParser = ReducedPrinterParser;\n    DateTimeFormatterBuilder.FractionPrinterParser = FractionPrinterParser;\n    DateTimeFormatterBuilder.OffsetIdPrinterParser = OffsetIdPrinterParser;\n    DateTimeFormatterBuilder.ZoneIdPrinterParser = ZoneIdPrinterParser;\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n/**\n * @private\n */\nexport class StringBuilder {\n    constructor(){\n        this._str = '';\n    }\n\n    append(str){\n        this._str += str;\n        return this;\n    }\n\n    appendChar(str){\n        this._str += str[0];\n        return this;\n    }\n\n    insert(offset, str){\n        this._str = this._str.slice(0, offset) + str + this._str.slice(offset);\n        return this;\n    }\n\n    replace(start, end, str){\n        this._str = this._str.slice(0, start) + str + this._str.slice(end);\n        return this;\n    }\n\n    length(){\n        return this._str.length;\n    }\n\n    setLength(length){\n        this._str = this._str.slice(0, length);\n        return this;\n    }\n\n\n    toString() {\n        return this._str;\n    }\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert, requireNonNull } from '../assert';\n\nimport { DateTimeParseException, NullPointerException } from '../errors';\n\nimport { Period } from '../Period';\n\nimport { ParsePosition } from './ParsePosition';\nimport { DateTimeBuilder } from './DateTimeBuilder';\nimport { DateTimeParseContext } from './DateTimeParseContext';\nimport { DateTimePrintContext } from './DateTimePrintContext';\nimport { DateTimeFormatterBuilder } from './DateTimeFormatterBuilder';\nimport { SignStyle } from './SignStyle';\nimport { StringBuilder } from './StringBuilder';\nimport { ResolverStyle } from './ResolverStyle';\n\nimport { IsoChronology } from '../chrono/IsoChronology';\nimport { ChronoField } from '../temporal/ChronoField';\nimport { createTemporalQuery } from '../temporal/TemporalQuery';\n\n/**\n *\n * ### Static properties of Class {@link DateTimeFormatter}\n *\n * DateTimeFormatter.ISO_LOCAL_DATE\n *\n * DateTimeFormatter.ISO_LOCAL_TIME\n *\n * DateTimeFormatter.ISO_LOCAL_DATE_TIME\n *\n */\nexport class DateTimeFormatter {\n\n    //-----------------------------------------------------------------------\n    /**\n     * A query that provides access to the excess days that were parsed.\n     *\n     * This returns a singleton {@link TemporalQuery} that provides\n     * access to additional information from the parse. The query always returns\n     * a non-null period, with a zero period returned instead of null.\n     *\n     * There are two situations where this query may return a non-zero period.\n     *\n     * * If the {@link ResolverStyle} is {@link LENIENT} and a time is parsed\n     *   without a date, then the complete result of the parse consists of a\n     *   {@link LocalTime} and an excess {@link Period} in days.\n     * * If the {@link ResolverStyle} is {@link SMART} and a time is parsed\n     *   without a date where the time is 24:00:00, then the complete result of\n     *   the parse consists of a {@link LocalTime} of 00:00:00 and an excess\n     *   {@link Period} of one day.\n     *\n     * In both cases, if a complete {@link ChronoLocalDateTime} or {@link Instant}\n     * is parsed, then the excess days are added to the date part.\n     * As a result, this query will return a zero period.\n     *\n     * The {@link SMART} behaviour handles the common \"end of day\" 24:00 value.\n     * Processing in {@link LENIENT} mode also produces the same result:\n     * <pre>\n     *  Text to parse        Parsed object                         Excess days\n     *  \"2012-12-03T00:00\"   LocalDateTime.of(2012, 12, 3, 0, 0)   ZERO\n     *  \"2012-12-03T24:00\"   LocalDateTime.of(2012, 12, 4, 0, 0)   ZERO\n     *  \"00:00\"              LocalTime.of(0, 0)                    ZERO\n     *  \"24:00\"              LocalTime.of(0, 0)                    Period.ofDays(1)\n     * </pre>\n     * The query can be used as follows:\n     * <pre>\n     *  TemporalAccessor parsed = formatter.parse(str);\n     *  LocalTime time = parsed.query(LocalTime.FROM);\n     *  Period extraDays = parsed.query(DateTimeFormatter.parsedExcessDays());\n     * </pre>\n     * @return {TemporalQuery} a query that provides access to the excess days that were parsed\n     */\n    static parsedExcessDays() {\n        return DateTimeFormatter.PARSED_EXCESS_DAYS;\n    }\n\n    /**\n     * A query that provides access to whether a leap-second was parsed.\n     *\n     * This returns a singleton {@link TemporalQuery} that provides\n     * access to additional information from the parse. The query always returns\n     * a non-null boolean, true if parsing saw a leap-second, false if not.\n     *\n     * Instant parsing handles the special \"leap second\" time of '23:59:60'.\n     * Leap seconds occur at '23:59:60' in the UTC time-zone, but at other\n     * local times in different time-zones. To avoid this potential ambiguity,\n     * the handling of leap-seconds is limited to\n     * {@link DateTimeFormatterBuilder#appendInstant}, as that method\n     * always parses the instant with the UTC zone offset.\n     *\n     * If the time '23:59:60' is received, then a simple conversion is applied,\n     * replacing the second-of-minute of 60 with 59. This query can be used\n     * on the parse result to determine if the leap-second adjustment was made.\n     * The query will return one second of excess if it did adjust to remove\n     * the leap-second, and zero if not. Note that applying a leap-second\n     * smoothing mechanism, such as UTC-SLS, is the responsibility of the\n     * application, as follows:\n     * <pre>\n     *  TemporalAccessor parsed = formatter.parse(str);\n     *  Instant instant = parsed.query(Instant::from);\n     *  if (parsed.query(DateTimeFormatter.parsedLeapSecond())) {\n     *    // validate leap-second is correct and apply correct smoothing\n     *  }\n     * </pre>\n     * @return a query that provides access to whether a leap-second was parsed\n     */\n    static parsedLeapSecond() {\n        return DateTimeFormatter.PARSED_LEAP_SECOND;\n    }\n\n    /**\n     * Creates a formatter using the specified pattern.\n     *\n     * This method will create a formatter based on a simple pattern of letters and symbols.\n     *\n     * The returned formatter will use the default locale, but this can be changed\n     * using {@link DateTimeFormatter.withLocale}.\n     *\n     * All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters.\n     * The following pattern letters are defined:\n     * <pre>\n     *  |Symbol  |Meaning                     |Presentation      |Examples\n     *  |--------|----------------------------|------------------|----------------------------------------------------\n     *  | G      | era                        | number/text      | 1; 01; AD; Anno Domini\n     *  | u      | year                       | year             | 2004; 04\n     *  | y      | year-of-era                | year             | 2004; 04\n     *  | D      | day-of-year                | number           | 189\n     *  | M      | month-of-year              | number/text      | 7; 07; Jul; July; J\n     *  | d      | day-of-month               | number           | 10\n     *  |        |                            |                  |\n     *  | Q      | quarter-of-year            | number/text      | 3; 03; Q3\n     *  | Y      | week-based-year            | year             | 1996; 96\n     *  | w      | week-of-year               | number           | 27\n     *  | W      | week-of-month              | number           | 27\n     *  | e      | localized day-of-week      | number           | 2; Tue; Tuesday; T\n     *  | E      | day-of-week                | number/text      | 2; Tue; Tuesday; T\n     *  | F      | week-of-month              | number           | 3\n     *  |        |                            |                  |\n     *  | a      | am-pm-of-day               | text             | PM\n     *  | h      | clock-hour-of-am-pm (1-12) | number           | 12\n     *  | K      | hour-of-am-pm (0-11)       | number           | 0\n     *  | k      | clock-hour-of-am-pm (1-24) | number           | 0\n     *  |        |                            |                  |\n     *  | H      | hour-of-day (0-23)         | number           | 0\n     *  | m      | minute-of-hour             | number           | 30\n     *  | s      | second-of-minute           | number           | 55\n     *  | S      | fraction-of-second         | fraction         | 978\n     *  | A      | milli-of-day               | number           | 1234\n     *  | n      | nano-of-second             | number           | 987654321\n     *  | N      | nano-of-day                | number           | 1234000000\n     *  |        |                            |                  |\n     *  | V      | time-zone ID               | zone-id          | America/Los_Angeles; Z; -08:30\n     *  | z      | time-zone name             | zone-name        | Pacific Standard Time; PST\n     *  | X      | zone-offset 'Z' for zero   | offset-X         | Z; -08; -0830; -08:30; -083015; -08:30:15;\n     *  | x      | zone-offset                | offset-x         | +0000; -08; -0830; -08:30; -083015; -08:30:15;\n     *  | Z      | zone-offset                | offset-Z         | +0000; -0800; -08:00;\n     *  |        |                            |                  |\n     *  | p      | pad next                   | pad modifier     | 1\n     *  |        |                            |                  |\n     *  | '      | escape for text            | delimiter        |\n     *  | ''     | single quote               | literal          | '\n     *  | [      | optional section start     |                  |\n     *  | ]      | optional section end       |                  |\n     *  | {}     | reserved for future use    |                  |\n     * </pre>\n     *\n     * The count of pattern letters determine the format.\n     *\n     * **Text**: The text style is determined based on the number of pattern letters used.\n     * Less than 4 pattern letters will use the short form `TextStyle.SHORT`.\n     * Exactly 4 pattern letters will use the full form `TextStyle.FULL`.\n     * Exactly 5 pattern letters will use the narrow form `TextStyle.NARROW`.\n     *\n     * **NOTE**: since text styles require locale support, they are currently not supported in js-joda!\n     *\n     * **Number**: If the count of letters is one, then the value is printed using the minimum number\n     * of digits and without padding as per {@link DateTimeFormatterBuilder.appendValue}.\n     * Otherwise, the count of digits is used as the width of the output field as per\n     * {@link DateTimeFormatterBuilder.appendValue}.\n     *\n     * **Number/Text**: If the count of pattern letters is 3 or greater, use the Text rules above.\n     * Otherwise use the Number rules above.\n     *\n     * **Fraction**: Outputs the nano-of-second field as a fraction-of-second.\n     * The nano-of-second value has nine digits, thus the count of pattern letters is from 1 to 9.\n     * If it is less than 9, then the nano-of-second value is truncated, with only the most\n     * significant digits being output.\n     * When parsing in strict mode, the number of parsed digits must match the count of pattern letters.\n     * When parsing in lenient mode, the number of parsed digits must be at least the count of pattern\n     * letters, up to 9 digits.\n     *\n     * **Year**: The count of letters determines the minimum field width below which padding is used.\n     * If the count of letters is two, then a {@link DateTimeFormatterBuilder.appendValueReduced}\n     * two digit form is used.\n     * For printing, this outputs the rightmost two digits. For parsing, this will parse using the\n     * base value of 2000, resulting in a year within the range 2000 to 2099 inclusive.\n     * If the count of letters is less than four (but not two), then the sign is only output for negative\n     * years as per `SignStyle.NORMAL`.\n     * Otherwise, the sign is output if the pad width is exceeded, as per `SignStyle.EXCEEDS_PAD`\n     *\n     * **ZoneId**: This outputs the time-zone ID, such as 'Europe/Paris'.\n     * If the count of letters is two, then the time-zone ID is output.\n     * Any other count of letters throws `IllegalArgumentException`.\n     *\n     * **Zone names**: This outputs the display name of the time-zone ID.\n     * If the count of letters is one, two or three, then the short name is output.\n     * If the count of letters is four, then the full name is output.\n     * Five or more letters throws `IllegalArgumentException`.\n     *\n     * **NOTE**: since zone ids and name require the iana tzdb, they are currently not supported in js-joda!\n     *\n     * **Offset X and x**: This formats the offset based on the number of pattern letters.\n     * One letter outputs just the hour', such as '+01', unless the minute is non-zero\n     * in which case the minute is also output, such as '+0130'.\n     * Two letters outputs the hour and minute, without a colon, such as '+0130'.\n     * Three letters outputs the hour and minute, with a colon, such as '+01:30'.\n     * Four letters outputs the hour and minute and optional second, without a colon, such as '+013015'.\n     * Five letters outputs the hour and minute and optional second, with a colon, such as '+01:30:15'.\n     * Six or more letters throws `IllegalArgumentException`.\n     * Pattern letter 'X' (upper case) will output 'Z' when the offset to be output would be zero,\n     * whereas pattern letter 'x' (lower case) will output '+00', '+0000', or '+00:00'.\n     *\n     * **Offset Z**: This formats the offset based on the number of pattern letters.\n     * One, two or three letters outputs the hour and minute, without a colon, such as '+0130'.\n     * Four or more letters throws `IllegalArgumentException`.\n     * The output will be '+0000' when the offset is zero.\n     *\n     * **Optional section**: The optional section markers work exactly like calling\n     * {@link DateTimeFormatterBuilder.optionalStart} and {@link DateTimeFormatterBuilder.optionalEnd}.\n     *\n     * **Pad modifier**: Modifies the pattern that immediately follows to be padded with spaces.\n     * The pad width is determined by the number of pattern letters.\n     * This is the same as calling {@link DateTimeFormatterBuilder.padNext}.\n     *\n     * For example, 'ppH' outputs the hour-of-day padded on the left with spaces to a width of 2.\n     *\n     * Any unrecognized letter is an error.\n     * Any non-letter character, other than '[', ']', '{', '}' and the single quote will be output directly.\n     * Despite this, it is recommended to use single quotes around all characters that you want to\n     * output directly to ensure that future changes do not break your application.\n     *\n     * @param {String} pattern  the pattern to use, not null\n     * @return {DateTimeFormatter} the formatter based on the pattern, not null\n     * @throws IllegalArgumentException if the pattern is invalid\n     * @see DateTimeFormatterBuilder#appendPattern(String)\n     * @example\n     * var s = LocalDate.parse('2016-04-01').format(DateTimeFormatter.ofPattern('d MM yyyy'));\n     * console.log(s); // '1 04 2016'\n     *\n     */\n    static ofPattern(pattern) {\n        return new DateTimeFormatterBuilder().appendPattern(pattern).toFormatter();\n    }\n\n\n    //-----------------------------------------------------------------------\n    /**\n     * Constructor.\n     *\n     * @param printerParser  the printer/parser to use, not null\n     * @param locale  the locale to use, not null\n     * @param decimalStyle  the decimal style to use, not null\n     * @param resolverStyle  the resolver style to use, not null\n     * @param resolverFields  the fields to use during resolving, null for all fields\n     * @param chrono  the chronology to use, null for no override\n     * @param zone  the zone to use, null for no override\n     * @private\n     */\n    constructor(printerParser, locale, decimalStyle, resolverStyle, resolverFields, chrono=IsoChronology.INSTANCE, zone) {\n        assert(printerParser != null);\n        assert(decimalStyle != null);\n        assert(resolverStyle != null);\n        /**\n         * The printer and/or parser to use, not null.\n         */\n        this._printerParser = printerParser;\n        /**\n         * The locale to use for formatting. // nyi\n         */\n        this._locale = locale;\n        /**\n         * The symbols to use for formatting, not null.\n         */\n        this._decimalStyle = decimalStyle;\n        /**\n         * The resolver style to use, not null.\n         */\n        this._resolverStyle = resolverStyle;\n        /**\n         * The fields to use in resolving, null for all fields.\n         */\n        this._resolverFields = resolverFields;\n        /**\n         * The chronology to use for formatting, null for no override.\n         */\n        this._chrono = chrono;\n        /**\n         * The zone to use for formatting, null for no override. // nyi\n         */\n        this._zone = zone;\n    }\n\n    locale() {\n        return this._locale;\n    }\n\n    decimalStyle() {\n        return this._decimalStyle;\n    }\n\n    chronology() {\n        return this._chrono;\n    }\n\n    /**\n     * Returns a copy of this formatter with a new override chronology.\n     *\n     * This returns a formatter with similar state to this formatter but\n     * with the override chronology set.\n     * By default, a formatter has no override chronology, returning null.\n     *\n     * If an override is added, then any date that is printed or parsed will be affected.\n     *\n     * When printing, if the {@link Temporal} object contains a date then it will\n     * be converted to a date in the override chronology.\n     * Any time or zone will be retained unless overridden.\n     * The converted result will behave in a manner equivalent to an implementation\n     * of {@link ChronoLocalDate},{@link ChronoLocalDateTime} or {@link ChronoZonedDateTime}.\n     *\n     * When parsing, the override chronology will be used to interpret the\n     * {@link ChronoField} into a date unless the\n     * formatter directly parses a valid chronology.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param chrono  the new chronology, not null\n     * @return a formatter based on this formatter with the requested override chronology, not null\n     */\n    withChronology(chrono) {\n        if (this._chrono != null && this._chrono.equals(chrono)) {\n            return this;\n        }\n        return new DateTimeFormatter(this._printerParser, this._locale, this._decimalStyle,\n            this._resolverStyle, this._resolverFields, chrono, this._zone);\n    }\n\n    /**\n     * not yet supported\n     * @returns {DateTimeFormatter}\n     */\n    withLocale(){\n        return this;\n    }\n\n    /**\n     * Returns a copy of this formatter with a new resolver style.\n     * <p>\n     * This returns a formatter with similar state to this formatter but\n     * with the resolver style set. By default, a formatter has the\n     * {@link ResolverStyle#SMART SMART} resolver style.\n     * <p>\n     * Changing the resolver style only has an effect during parsing.\n     * Parsing a text string occurs in two phases.\n     * Phase 1 is a basic text parse according to the fields added to the builder.\n     * Phase 2 resolves the parsed field-value pairs into date and/or time objects.\n     * The resolver style is used to control how phase 2, resolving, happens.\n     * See {@link ResolverStyle} for more information on the options available.\n     * <p>\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {ResolverStyle} resolverStyle  the new resolver style, not null\n     * @return {DateTimeFormatter} a formatter based on this formatter with the requested resolver style, not null\n     */\n    withResolverStyle(resolverStyle) {\n        requireNonNull(resolverStyle, 'resolverStyle');\n        if (resolverStyle.equals(this._resolverStyle)) {\n            return this;\n        }\n        return new DateTimeFormatter(this._printerParser, this._locale, this._decimalStyle, resolverStyle, this._resolverFields, this._chrono, this._zone);\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * Formats a date-time object using this formatter.\n     *\n     * This formats the date-time to a String using the rules of the formatter.\n     *\n     * @param {TemporalAccessor} temporal  the temporal object to print, not null\n     * @return {String} the printed string, not null\n     * @throws DateTimeException if an error occurs during formatting\n     */\n    format(temporal) {\n        const buf = new StringBuilder(32);\n        this._formatTo(temporal, buf);\n        return buf.toString();\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Formats a date-time object to an {@link Appendable} using this formatter.\n     *\n     * This formats the date-time to the specified destination.\n     * {@link Appendable} is a general purpose interface that is implemented by all\n     * key character output classes including {@link StringBuffer}, {@link StringBuilder},\n     * {@link PrintStream} and {@link Writer}.\n     *\n     * Although {@link Appendable} methods throw an {@link IOException}, this method does not.\n     * Instead, any {@link IOException} is wrapped in a runtime exception.\n     *\n     * @param {TemporalAccessor} temporal - the temporal object to print, not null\n     * @param {StringBuilder} appendable - the appendable to print to, not null\n     * @throws DateTimeException if an error occurs during formatting\n     */\n    _formatTo(temporal, appendable) {\n        requireNonNull(temporal, 'temporal');\n        requireNonNull(appendable, 'appendable');\n        const context = new DateTimePrintContext(temporal, this);\n        this._printerParser.print(context, appendable);\n    }\n\n    /**\n     * function overloading for {@link DateTimeFormatter.parse}\n     *\n     * if called with one arg {@link DateTimeFormatter.parse1} is called\n     * otherwise {@link DateTimeFormatter.parse2}\n     *\n     * @param {string} text\n     * @param {TemporalQuery} type\n     * @return {TemporalAccessor}\n     */\n    parse(text, type){\n        if(arguments.length === 1){\n            return this.parse1(text);\n        } else {\n            return this.parse2(text, type);\n        }\n    }\n\n    /**\n     * Fully parses the text producing a temporal object.\n     *\n     * This parses the entire text producing a temporal object.\n     * It is typically more useful to use {@link parse}.\n     * The result of this method is {@link TemporalAccessor} which has been resolved,\n     * applying basic validation checks to help ensure a valid date-time.\n     *\n     * If the parse completes without reading the entire length of the text,\n     * or a problem occurs during parsing or merging, then an exception is thrown.\n     *\n     * @param {String} text  the text to parse, not null\n     * @return {TemporalAccessor} the parsed temporal object, not null\n     * @throws DateTimeParseException if unable to parse the requested result\n     */\n    parse1(text) {\n        requireNonNull(text, 'text');\n        try {\n            return this._parseToBuilder(text, null).resolve(this._resolverStyle, this._resolverFields);\n        } catch (ex) {\n            if(ex instanceof DateTimeParseException){\n                throw ex;\n            } else {\n                throw this._createError(text, ex);\n            }\n        }\n    }\n\n    /**\n     * Fully parses the text producing a temporal object.\n     *\n     * This parses the entire text producing a temporal object.\n     * It is typically more useful to use {@link parse}.\n     * The result of this method is {@link TemporalAccessor} which has been resolved,\n     * applying basic validation checks to help ensure a valid date-time.\n     *\n     * If the parse completes without reading the entire length of the text,\n     * or a problem occurs during parsing or merging, then an exception is thrown.\n     *\n     * @param text  the text to parse, not null\n     * @param type the type to extract, not null\n * @return the parsed temporal object, not null\n     * @throws DateTimeParseException if unable to parse the requested result\n     */\n    parse2(text, type) {\n        requireNonNull(text, 'text');\n        requireNonNull(type, 'type');\n        try {\n            const builder = this._parseToBuilder(text, null).resolve(this._resolverStyle, this._resolverFields);\n            return builder.build(type);\n        } catch (ex) {\n            if(ex instanceof DateTimeParseException){\n                throw ex;\n            } else {\n                throw this._createError(text, ex);\n            }\n        }\n    }\n\n    _createError(text, ex) {\n        let abbr = '';\n        if (text.length > 64) {\n            abbr = `${text.substring(0, 64)}...`;\n        } else {\n            abbr = text;\n        }\n        return new DateTimeParseException(`Text '${abbr}' could not be parsed: ${ex.message}`, text, 0, ex);\n    }\n\n\n    /**\n     * Parses the text to a builder.\n     *\n     * This parses to a {@link DateTimeBuilder} ensuring that the text is fully parsed.\n     * This method throws {@link DateTimeParseException} if unable to parse, or\n     * some other {@link DateTimeException} if another date/time problem occurs.\n     *\n     * @param text  the text to parse, not null\n     * @param position  the position to parse from, updated with length parsed\n     *  and the index of any error, null if parsing whole string\n     * @return the engine representing the result of the parse, not null\n     * @throws DateTimeParseException if the parse fails\n     */\n    _parseToBuilder(text, position) {\n        const pos = (position != null ? position : new ParsePosition(0));\n        const result = this._parseUnresolved0(text, pos);\n        if (result == null || pos.getErrorIndex() >= 0 || (position == null && pos.getIndex() < text.length)) {\n            let abbr = '';\n            if (text.length > 64) {\n                abbr = `${text.substr(0, 64).toString()}...`;\n            } else {\n                abbr = text;\n            }\n            if (pos.getErrorIndex() >= 0) {\n                throw new DateTimeParseException(`Text '${abbr}' could not be parsed at index ${ \n                    pos.getErrorIndex()}`, text, pos.getErrorIndex());\n            } else {\n                throw new DateTimeParseException(`Text '${abbr}' could not be parsed, unparsed text found at index ${ \n                    pos.getIndex()}`, text, pos.getIndex());\n            }\n        }\n        return result.toBuilder();\n    }\n\n    /**\n     * Parses the text using this formatter, without resolving the result, intended\n     * for advanced use cases.\n     *\n     * Parsing is implemented as a two-phase operation.\n     * First, the text is parsed using the layout defined by the formatter, producing\n     * a {@link Map} of field to value, a {@link ZoneId} and a {@link Chronology}.\n     * Second, the parsed data is *resolved*, by validating, combining and\n     * simplifying the various fields into more useful ones.\n     * This method performs the parsing stage but not the resolving stage.\n     *\n     * The result of this method is {@link TemporalAccessor} which represents the\n     * data as seen in the input. Values are not validated, thus parsing a date string\n     * of '2012-00-65' would result in a temporal with three fields - year of '2012',\n     * month of '0' and day-of-month of '65'.\n     *\n     * The text will be parsed from the specified start {@link ParsePosition}.\n     * The entire length of the text does not have to be parsed, the {@link ParsePosition}\n     * will be updated with the index at the end of parsing.\n     *\n     * Errors are returned using the error index field of the {@link ParsePosition}\n     * instead of {@link DateTimeParseException}.\n     * The returned error index will be set to an index indicative of the error.\n     * Callers must check for errors before using the context.\n     *\n     * If the formatter parses the same field more than once with different values,\n     * the result will be an error.\n     *\n     * This method is intended for advanced use cases that need access to the\n     * internal state during parsing. Typical application code should use\n     * {@link parse} or the parse method on the target type.\n     *\n     * @param text  the text to parse, not null\n     * @param position  the position to parse from, updated with length parsed\n     *  and the index of any error, not null\n     * @return the parsed text, null if the parse results in an error\n     * @throws DateTimeException if some problem occurs during parsing\n     * @throws IndexOutOfBoundsException if the position is invalid\n     */\n    parseUnresolved(text, position) {\n        return this._parseUnresolved0(text, position);\n    }\n\n    _parseUnresolved0(text, position) {\n        assert(text != null, 'text', NullPointerException);\n        assert(position != null, 'position', NullPointerException);\n        const context = new DateTimeParseContext(this);\n        let pos = position.getIndex();\n        pos = this._printerParser.parse(context, text, pos);\n        if (pos < 0) {\n            position.setErrorIndex(~pos);  // index not updated from input\n            return null;\n        }\n        position.setIndex(pos);  // errorIndex not updated from input\n        return context.toParsed();\n    }\n\n    /**\n     * Returns the formatter as a composite printer parser.\n     *\n     * @param {boolean} optional  whether the printer/parser should be optional\n     * @return {CompositePrinterParser} the printer/parser, not null\n     */\n    _toPrinterParser(optional) {\n        return this._printerParser.withOptional(optional);\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        const pattern = this._printerParser.toString();\n        return pattern.indexOf('[') === 0 ? pattern : pattern.substring(1, pattern.length - 1);\n    }\n\n}\n\nexport function _init() {\n\n    DateTimeFormatter.ISO_LOCAL_DATE = new DateTimeFormatterBuilder()\n        .appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD)\n        .appendLiteral('-')\n        .appendValue(ChronoField.MONTH_OF_YEAR, 2)\n        .appendLiteral('-')\n        .appendValue(ChronoField.DAY_OF_MONTH, 2)\n        .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n    DateTimeFormatter.ISO_LOCAL_TIME = new DateTimeFormatterBuilder()\n        .appendValue(ChronoField.HOUR_OF_DAY, 2)\n        .appendLiteral(':')\n        .appendValue(ChronoField.MINUTE_OF_HOUR, 2)\n        .optionalStart()\n        .appendLiteral(':')\n        .appendValue(ChronoField.SECOND_OF_MINUTE, 2)\n        .optionalStart()\n        .appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)\n        .toFormatter(ResolverStyle.STRICT);\n\n    DateTimeFormatter.ISO_LOCAL_DATE_TIME = new DateTimeFormatterBuilder()\n        .parseCaseInsensitive()\n        .append(DateTimeFormatter.ISO_LOCAL_DATE)\n        .appendLiteral('T')\n        .append(DateTimeFormatter.ISO_LOCAL_TIME)\n        .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n    DateTimeFormatter.ISO_INSTANT = new DateTimeFormatterBuilder()\n        .parseCaseInsensitive()\n        .appendInstant()\n        .toFormatter(ResolverStyle.STRICT);\n\n    DateTimeFormatter.ISO_OFFSET_DATE_TIME = new DateTimeFormatterBuilder()\n        .parseCaseInsensitive()\n        .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)\n        .appendOffsetId()\n        .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n    DateTimeFormatter.ISO_ZONED_DATE_TIME = new DateTimeFormatterBuilder()\n        .append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)\n        .optionalStart()\n        .appendLiteral('[')\n        .parseCaseSensitive()\n        .appendZoneId()\n        // .appendZoneRegionId()\n        .appendLiteral(']')\n        .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n    DateTimeFormatter.BASIC_ISO_DATE = new DateTimeFormatterBuilder()\n        .appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD)\n        .appendValue(ChronoField.MONTH_OF_YEAR, 2)\n        .appendValue(ChronoField.DAY_OF_MONTH, 2)\n        .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n    DateTimeFormatter.ISO_OFFSET_DATE = new DateTimeFormatterBuilder()\n        .parseCaseInsensitive()\n        .append(DateTimeFormatter.ISO_LOCAL_DATE)\n        .appendOffsetId()\n        .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n    DateTimeFormatter.ISO_OFFSET_TIME = new DateTimeFormatterBuilder()\n        .parseCaseInsensitive()\n        .append(DateTimeFormatter.ISO_LOCAL_TIME)\n        .appendOffsetId()\n        .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n    DateTimeFormatter.ISO_ORDINAL_DATE = new DateTimeFormatterBuilder()\n        .appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD)\n        .appendLiteral('-')\n        .appendValue(ChronoField.DAY_OF_YEAR)\n        .toFormatter(ResolverStyle.STRICT);\n\n    DateTimeFormatter.ISO_WEEK_DATE = new DateTimeFormatterBuilder()\n        .appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD)\n        .appendLiteral('-W')\n        .appendValue(ChronoField.ALIGNED_WEEK_OF_YEAR)\n        .appendLiteral('-')\n        .appendValue(ChronoField.DAY_OF_WEEK)\n        .toFormatter(ResolverStyle.STRICT);\n\n    DateTimeFormatter.ISO_DATE = new DateTimeFormatterBuilder()\n        .parseCaseInsensitive()\n        .append(DateTimeFormatter.ISO_LOCAL_DATE)\n        .optionalStart()\n        .appendOffsetId()\n        .optionalEnd()\n        .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n    DateTimeFormatter.ISO_TIME = new DateTimeFormatterBuilder()\n        .parseCaseInsensitive()\n        .append(DateTimeFormatter.ISO_LOCAL_TIME)\n        .optionalStart()\n        .appendOffsetId()\n        .optionalEnd()\n        .toFormatter(ResolverStyle.STRICT);\n\n    DateTimeFormatter.ISO_DATE_TIME = new DateTimeFormatterBuilder()\n        .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)\n        .optionalStart()\n        .appendOffsetId()\n        .optionalEnd()\n        .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n    // TODO:\n    //  RFC_1123_DATE_TIME - https://www.threeten.org/threetenbp/apidocs/org/threeten/bp/format/DateTimeFormatter.html#RFC_1123_DATE_TIME\n\n    DateTimeFormatter.PARSED_EXCESS_DAYS = createTemporalQuery('PARSED_EXCESS_DAYS', (temporal) => {\n        if (temporal instanceof DateTimeBuilder) {\n            return temporal.excessDays;\n        } else {\n            return Period.ZERO;\n        }\n    });\n\n    DateTimeFormatter.PARSED_LEAP_SECOND = createTemporalQuery('PARSED_LEAP_SECOND', (temporal) => {\n        if (temporal instanceof DateTimeBuilder) {\n            return temporal.leapSecond;\n        } else {\n            return false;\n        }\n    });\n\n\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { abstractMethodFail } from '../assert';\n\n/**\n * Strategy for adjusting a temporal object.\n *\n * Adjusters are a key tool for modifying temporal objects.\n * They exist to externalize the process of adjustment, permitting different\n * approaches, as per the strategy design pattern.\n * Examples might be an adjuster that sets the date avoiding weekends, or one that\n * sets the date to the last day of the month.\n *\n * There are two equivalent ways of using a {@link TemporalAdjuster}.\n * The first is to invoke the method on this interface directly.\n * The second is to use {@link Temporal#with}:\n * <pre>\n *   // these two lines are equivalent, but the second approach is recommended\n *   temporal = thisAdjuster.adjustInto(temporal);\n *   temporal = temporal.with(thisAdjuster);\n * </pre>\n * It is recommended to use the second approach, {@link with},\n * as it is a lot clearer to read in code.\n *\n * See {@link TemporalAdjusters} for a standard set of adjusters, including finding the\n * last day of the month.\n * Adjusters may also be defined by applications.\n *\n * ### Specification for implementors\n *\n * This interface places no restrictions on the mutability of implementations,\n * however immutability is strongly recommended.\n *\n * @interface\n */\nexport class TemporalAdjuster {\n\n    /**\n     * Adjusts the specified temporal object.\n     *\n     * This adjusts the specified temporal object using the logic\n     * encapsulated in the implementing class.\n     * Examples might be an adjuster that sets the date avoiding weekends, or one that\n     * sets the date to the last day of the month.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method directly.\n     * The second is to use {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisAdjuster.adjustInto(temporal);\n     *   temporal = temporal.with(thisAdjuster);\n     * </pre>\n     * It is recommended to use the second approach, {@link with},\n     * as it is a lot clearer to read in code.\n     *\n     * ### Specification for implementors\n     *\n     * The implementation must take the input object and adjust it.\n     * The implementation defines the logic of the adjustment and is responsible for\n     * documenting that logic. It may use any method on {@link Temporal} to\n     * query the temporal object and perform the adjustment.\n     * The returned object must have the same observable type as the input object\n     *\n     * The input object must not be altered.\n     * Instead, an adjusted copy of the original must be returned.\n     * This provides equivalent, safe behavior for immutable and mutable temporal objects.\n     *\n     * The input temporal object may be in a calendar system other than ISO.\n     * Implementations may choose to document compatibility with other calendar systems,\n     * or reject non-ISO temporal objects by querying the chronology (see {@link TemporalQueries#chronology}).\n     *\n     * This method may be called from multiple threads in parallel.\n     * It must be thread-safe when invoked.\n     *\n     * @param {Temporal} temporal  the temporal object to adjust, not null\n     * @return {Temporal} an object of the same observable type with the adjustment made, not null\n     * @throws DateTimeException if unable to make the adjustment\n     * @throws ArithmeticException if numeric overflow occurs\n     *\n     * @abstract\n     */\n    // eslint-disable-next-line no-unused-vars\n    adjustInto(temporal){\n        abstractMethodFail('adjustInto');\n    }\n\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from '../assert';\nimport { IllegalStateException } from '../errors';\n\nimport { TemporalAdjuster } from './TemporalAdjuster';\nimport { ChronoField } from '../temporal/ChronoField';\nimport { ChronoUnit } from '../temporal/ChronoUnit';\nimport { MathUtil } from '../MathUtil';\n\n/**\n * Common implementations of {@link TemporalAdjuster}.\n *\n * This class provides common implementations of {@link TemporalAdjuster}.\n * They are especially useful to document the intent of business logic and\n * often link well to requirements.\n * For example, these two pieces of code do the same thing, but the second\n * one is clearer (assuming that there is a static import of this class):\n * <pre>\n *  // direct manipulation\n *  date.withDayOfMonth(1).plusMonths(1).minusDays(1);\n *  // use of an adjuster from this class\n *  date.with(lastDayOfMonth());\n * </pre>\n * There are two equivalent ways of using a {@link TemporalAdjuster}.\n * The first is to invoke the method on the interface directly.\n * The second is to use {@link Temporal#with}:\n * <pre>\n *   // these two lines are equivalent, but the second approach is recommended\n *   dateTime = adjuster.adjustInto(dateTime);\n *   dateTime = dateTime.with(adjuster);\n * </pre>\n * It is recommended to use the second approach, {@link with},\n * as it is a lot clearer to read in code.\n *\n * ### Specification for implementors\n *\n * This is a thread-safe utility class.\n * All returned adjusters are immutable and thread-safe.\n *\n * The JDK 8 ofDateAdjuster(UnaryOperator) method is not backported.\n */\nexport class TemporalAdjusters {\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns the 'first day of month' adjuster, which returns a new date set to\n     * the first day of the current month.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 will return 2011-01-01.\n     * * The input 2011-02-15 will return 2011-02-01.\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It is equivalent to:\n     * <pre>\n     *  temporal.with(DAY_OF_MONTH, 1);\n     * </pre>\n     *\n     * @return {TemporalAdjuster} the first day-of-month adjuster, not null\n     */\n    static firstDayOfMonth() {\n        return Impl.FIRST_DAY_OF_MONTH;\n    }\n\n    /**\n     * Returns the 'last day of month' adjuster, which returns a new date set to\n     * the last day of the current month.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 will return 2011-01-31.\n     * * The input 2011-02-15 will return 2011-02-28.\n     * * The input 2012-02-15 will return 2012-02-29 (leap year).\n     * * The input 2011-04-15 will return 2011-04-30.\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It is equivalent to:\n     * <pre>\n     *  long lastDay = temporal.range(DAY_OF_MONTH).getMaximum();\n     *  temporal.with(DAY_OF_MONTH, lastDay);\n     * </pre>\n     *\n     * @return {TemporalAdjuster} the last day-of-month adjuster, not null\n     */\n    static lastDayOfMonth() {\n        return Impl.LAST_DAY_OF_MONTH;\n    }\n\n    /**\n     * Returns the 'first day of next month' adjuster, which returns a new date set to\n     * the first day of the next month.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 will return 2011-02-01.\n     * * The input 2011-02-15 will return 2011-03-01.\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It is equivalent to:\n     * <pre>\n     *  temporal.with(DAY_OF_MONTH, 1).plus(1, MONTHS);\n     * </pre>\n     *\n     * @return {TemporalAdjuster} the first day of next month adjuster, not null\n     */\n    static firstDayOfNextMonth() {\n        return Impl.FIRST_DAY_OF_NEXT_MONTH;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns the 'first day of year' adjuster, which returns a new date set to\n     * the first day of the current year.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 will return 2011-01-01.\n     * * The input 2011-02-15 will return 2011-01-01.\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It is equivalent to:\n     * <pre>\n     *  temporal.with(DAY_OF_YEAR, 1);\n     * </pre>\n     *\n     * @return {TemporalAdjuster} the first day-of-year adjuster, not null\n     */\n    static firstDayOfYear() {\n        return Impl.FIRST_DAY_OF_YEAR;\n    }\n\n    /**\n     * Returns the 'last day of year' adjuster, which returns a new date set to\n     * the last day of the current year.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 will return 2011-12-31.\n     * * The input 2011-02-15 will return 2011-12-31.\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It is equivalent to:\n     * <pre>\n     *  long lastDay = temporal.range(DAY_OF_YEAR).getMaximum();\n     *  temporal.with(DAY_OF_YEAR, lastDay);\n     * </pre>\n     *\n     * @return {TemporalAdjuster} the last day-of-year adjuster, not null\n     */\n    static lastDayOfYear() {\n        return Impl.LAST_DAY_OF_YEAR;\n    }\n\n    /**\n     * Returns the 'first day of next year' adjuster, which returns a new date set to\n     * the first day of the next year.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 will return 2012-01-01.\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It is equivalent to:\n     * <pre>\n     *  temporal.with(DAY_OF_YEAR, 1).plus(1, YEARS);\n     * </pre>\n     *\n     * @return {TemporalAdjuster} the first day of next month adjuster, not null\n     */\n    static firstDayOfNextYear() {\n        return Impl.FIRST_DAY_OF_NEXT_YEAR;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns the first in month adjuster, which returns a new date\n     * in the same month with the first matching day-of-week.\n     * This is used for expressions like 'first Tuesday in March'.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-12-15 for (MONDAY) will return 2011-12-05.\n     * * The input 2011-12-15 for (FRIDAY) will return 2011-12-02.\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It uses the {@link DAY_OF_WEEK} and {@link DAY_OF_MONTH} fields\n     * and the {@link DAYS} unit, and assumes a seven day week.\n     *\n     * @param {DayOfWeek} dayOfWeek  the day-of-week, not null\n     * @return {TemporalAdjuster} the first in month adjuster, not null\n     */\n    static firstInMonth(dayOfWeek) {\n        requireNonNull(dayOfWeek, 'dayOfWeek');\n        return new DayOfWeekInMonth(1, dayOfWeek);\n    }\n\n    /**\n     * Returns the last in month adjuster, which returns a new date\n     * in the same month with the last matching day-of-week.\n     * This is used for expressions like 'last Tuesday in March'.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-12-15 for (MONDAY) will return 2011-12-26.\n     * * The input 2011-12-15 for (FRIDAY) will return 2011-12-30.\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It uses the {@link DAY_OF_WEEK} and {@link DAY_OF_MONTH} fields\n     * and the {@link DAYS} unit, and assumes a seven day week.\n     *\n     * @param {DayOfWeek} dayOfWeek  the day-of-week, not null\n     * @return {TemporalAdjuster} the first in month adjuster, not null\n     */\n    static lastInMonth(dayOfWeek) {\n        requireNonNull(dayOfWeek, 'dayOfWeek');\n        return new DayOfWeekInMonth(-1, dayOfWeek);\n    }\n\n    /**\n     * Returns the day-of-week in month adjuster, which returns a new date\n     * in the same month with the ordinal day-of-week.\n     * This is used for expressions like the 'second Tuesday in March'.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-12-15 for (1,TUESDAY) will return 2011-12-06.\n     * * The input 2011-12-15 for (2,TUESDAY) will return 2011-12-13.\n     * * The input 2011-12-15 for (3,TUESDAY) will return 2011-12-20.\n     * * The input 2011-12-15 for (4,TUESDAY) will return 2011-12-27.\n     * * The input 2011-12-15 for (5,TUESDAY) will return 2012-01-03.\n     * * The input 2011-12-15 for (-1,TUESDAY) will return 2011-12-27 (last in month).\n     * * The input 2011-12-15 for (-4,TUESDAY) will return 2011-12-06 (3 weeks before last in month).\n     * * The input 2011-12-15 for (-5,TUESDAY) will return 2011-11-29 (4 weeks before last in month).\n     * * The input 2011-12-15 for (0,TUESDAY) will return 2011-11-29 (last in previous month).\n     *\n     * For a positive or zero ordinal, the algorithm is equivalent to finding the first\n     * day-of-week that matches within the month and then adding a number of weeks to it.\n     * For a negative ordinal, the algorithm is equivalent to finding the last\n     * day-of-week that matches within the month and then subtracting a number of weeks to it.\n     * The ordinal number of weeks is not validated and is interpreted leniently\n     * according to this algorithm. This definition means that an ordinal of zero finds\n     * the last matching day-of-week in the previous month.\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It uses the {@link DAY_OF_WEEK} and {@link DAY_OF_MONTH} fields\n     * and the {@link DAYS} unit, and assumes a seven day week.\n     *\n     * @param {Number} ordinal  the week within the month, unbounded but typically from -5 to 5\n     * @param {DayOfWeek} dayOfWeek  the day-of-week, not null\n     * @return {TemporalAdjuster} the day-of-week in month adjuster, not null\n     */\n    static dayOfWeekInMonth(ordinal, dayOfWeek) {\n        requireNonNull(dayOfWeek, 'dayOfWeek');\n        return new DayOfWeekInMonth(ordinal, dayOfWeek);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns the next day-of-week adjuster, which adjusts the date to the\n     * first occurrence of the specified day-of-week after the date being adjusted.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 (a Saturday) for parameter (MONDAY) will return 2011-01-17 (two days later).\n     * * The input 2011-01-15 (a Saturday) for parameter (WEDNESDAY) will return 2011-01-19 (four days later).\n     * * The input 2011-01-15 (a Saturday) for parameter (SATURDAY) will return 2011-01-22 (seven days later).\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It uses the {@link DAY_OF_WEEK} field and the {@link DAYS} unit,\n     * and assumes a seven day week.\n     *\n     * @param {DayOfWeek} dayOfWeek  the day-of-week to move the date to, not null\n     * @return {TemporalAdjuster} the next day-of-week adjuster, not null\n     */\n    static next(dayOfWeek) {\n        return new RelativeDayOfWeek(2, dayOfWeek);\n    }\n\n    /**\n     * Returns the next-or-same day-of-week adjuster, which adjusts the date to the\n     * first occurrence of the specified day-of-week after the date being adjusted\n     * unless it is already on that day in which case the same object is returned.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 (a Saturday) for parameter (MONDAY) will return 2011-01-17 (two days later).\n     * * The input 2011-01-15 (a Saturday) for parameter (WEDNESDAY) will return 2011-01-19 (four days later).\n     * * The input 2011-01-15 (a Saturday) for parameter (SATURDAY) will return 2011-01-15 (same as input).\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It uses the {@link DAY_OF_WEEK} field and the {@link DAYS} unit,\n     * and assumes a seven day week.\n     *\n     * @param {DayOfWeek} dayOfWeek  the day-of-week to check for or move the date to, not null\n     * @return {TemporalAdjuster} the next-or-same day-of-week adjuster, not null\n     */\n    static nextOrSame(dayOfWeek) {\n        return new RelativeDayOfWeek(0, dayOfWeek);\n    }\n\n    /**\n     * Returns the previous day-of-week adjuster, which adjusts the date to the\n     * first occurrence of the specified day-of-week before the date being adjusted.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 (a Saturday) for parameter (MONDAY) will return 2011-01-10 (five days earlier).\n     * * The input 2011-01-15 (a Saturday) for parameter (WEDNESDAY) will return 2011-01-12 (three days earlier).\n     * * The input 2011-01-15 (a Saturday) for parameter (SATURDAY) will return 2011-01-08 (seven days earlier).\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It uses the {@link DAY_OF_WEEK} field and the {@link DAYS} unit,\n     * and assumes a seven day week.\n     *\n     * @param {DayOfWeek} dayOfWeek  the day-of-week to move the date to, not null\n     * @return {TemporalAdjuster} the previous day-of-week adjuster, not null\n     */\n    static previous(dayOfWeek) {\n        return new RelativeDayOfWeek(3, dayOfWeek);\n    }\n\n    /**\n     * Returns the previous-or-same day-of-week adjuster, which adjusts the date to the\n     * first occurrence of the specified day-of-week before the date being adjusted\n     * unless it is already on that day in which case the same object is returned.\n     *\n     * The ISO calendar system behaves as follows:\n     *\n     * * The input 2011-01-15 (a Saturday) for parameter (MONDAY) will return 2011-01-10 (five days earlier).\n     * * The input 2011-01-15 (a Saturday) for parameter (WEDNESDAY) will return 2011-01-12 (three days earlier).\n     * * The input 2011-01-15 (a Saturday) for parameter (SATURDAY) will return 2011-01-15 (same as input).\n     *\n     * The behavior is suitable for use with most calendar systems.\n     * It uses the {@link DAY_OF_WEEK} field and the {@link DAYS} unit,\n     * and assumes a seven day week.\n     *\n     * @param {DayOfWeek} dayOfWeek the day-of-week to check for or move the date to, not null\n     * @return {TemporalAdjuster} the previous-or-same day-of-week adjuster, not null\n     */\n    static previousOrSame(dayOfWeek) {\n        return new RelativeDayOfWeek(1, dayOfWeek);\n    }\n\n}\n\n//-----------------------------------------------------------------------\n/**\n * Enum implementing the adjusters.\n */\nclass Impl extends TemporalAdjuster {\n\n    /**\n     *\n     * @param ordinal\n     * @private\n     */\n    constructor(ordinal) {\n        super();\n        this._ordinal = ordinal;\n    }\n\n    adjustInto(temporal) {\n        switch (this._ordinal) {\n            case 0: return temporal.with(ChronoField.DAY_OF_MONTH, 1);\n            case 1: return temporal.with(ChronoField.DAY_OF_MONTH, temporal.range(ChronoField.DAY_OF_MONTH).maximum());\n            case 2: return temporal.with(ChronoField.DAY_OF_MONTH, 1).plus(1, ChronoUnit.MONTHS);\n            case 3: return temporal.with(ChronoField.DAY_OF_YEAR, 1);\n            case 4: return temporal.with(ChronoField.DAY_OF_YEAR, temporal.range(ChronoField.DAY_OF_YEAR).maximum());\n            case 5: return temporal.with(ChronoField.DAY_OF_YEAR, 1).plus(1, ChronoUnit.YEARS);\n        }\n        throw new IllegalStateException('Unreachable');\n    }\n\n}\n\n/** First day of month adjuster. */\nImpl.FIRST_DAY_OF_MONTH = new Impl(0);\n/** Last day of month adjuster. */\nImpl.LAST_DAY_OF_MONTH = new Impl(1);\n/** First day of next month adjuster. */\nImpl.FIRST_DAY_OF_NEXT_MONTH = new Impl(2);\n/** First day of year adjuster. */\nImpl.FIRST_DAY_OF_YEAR = new Impl(3);\n/** Last day of year adjuster. */\nImpl.LAST_DAY_OF_YEAR = new Impl(4);\n/** First day of next month adjuster. */\nImpl.FIRST_DAY_OF_NEXT_YEAR = new Impl(5);\n\n\n/**\n * Class implementing day-of-week in month adjuster.\n */\nclass DayOfWeekInMonth extends TemporalAdjuster {\n\n    /**\n     *\n     * @param ordinal\n     * @param dow\n     * @private\n     */\n    constructor(ordinal, dow) {\n        super();\n        this._ordinal = ordinal;\n        this._dowValue = dow.value();\n    }\n\n    adjustInto(temporal) {\n        if (this._ordinal >= 0) {\n            const temp = temporal.with(ChronoField.DAY_OF_MONTH, 1);\n            const curDow = temp.get(ChronoField.DAY_OF_WEEK);\n            let dowDiff = MathUtil.intMod((this._dowValue - curDow + 7), 7);\n            dowDiff += (this._ordinal - 1) * 7;  // safe from overflow\n            return temp.plus(dowDiff, ChronoUnit.DAYS);\n        } else {\n            const temp = temporal.with(ChronoField.DAY_OF_MONTH, temporal.range(ChronoField.DAY_OF_MONTH).maximum());\n            const curDow = temp.get(ChronoField.DAY_OF_WEEK);\n            let daysDiff = this._dowValue - curDow;\n            daysDiff = (daysDiff === 0 ? 0 : (daysDiff > 0 ? daysDiff - 7 : daysDiff));\n            daysDiff -= (-this._ordinal - 1) * 7;  // safe from overflow\n            return temp.plus(daysDiff, ChronoUnit.DAYS);\n        }\n    }\n}\n\n/**\n * Implementation of next, previous or current day-of-week.\n */\nclass RelativeDayOfWeek extends TemporalAdjuster {\n\n    /**\n     *\n     * @param relative\n     * @param dayOfWeek\n     * @private\n     */\n    constructor(relative, dayOfWeek) {\n        super();\n        requireNonNull(dayOfWeek, 'dayOfWeek');\n        /** Whether the current date is a valid answer. */\n        this._relative = relative;\n        /** The day-of-week value, from 1 to 7. */\n        this._dowValue = dayOfWeek.value();\n    }\n\n    adjustInto(temporal) {\n        const calDow = temporal.get(ChronoField.DAY_OF_WEEK);\n        if (this._relative < 2 && calDow === this._dowValue) {\n            return temporal;\n        }\n        if ((this._relative & 1) === 0) {\n            const daysDiff = calDow - this._dowValue;\n            return temporal.plus(daysDiff >= 0 ? 7 - daysDiff : -daysDiff, ChronoUnit.DAYS);\n        } else {\n            const daysDiff = this._dowValue - calDow;\n            return temporal.minus(daysDiff >= 0 ? 7 - daysDiff : -daysDiff, ChronoUnit.DAYS);\n        }\n    }\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { Enum } from '../Enum';\nimport { requireNonNull } from '../assert';\nimport { DateTimeException } from '../errors';\nimport { MathUtil } from '../MathUtil';\n\nimport { DayOfWeek } from '../DayOfWeek';\nimport { LocalDate } from '../LocalDate';\nimport { Month } from '../Month';\nimport { Year } from '../Year';\n\nimport { ChronoField } from '../temporal/ChronoField';\nimport { ResolverStyle } from '../format/ResolverStyle';\nimport { TemporalAdjusters } from '../temporal/TemporalAdjusters';\n\nexport class IsoChronology extends Enum{\n    /**\n     * Checks if the year is a leap year, according to the ISO proleptic\n     * calendar system rules.\n     *\n     * This method applies the current rules for leap years across the whole time-line.\n     * In general, a year is a leap year if it is divisible by four without\n     * remainder. However, years divisible by 100, are not leap years, with\n     * the exception of years divisible by 400 which are.\n     *\n     * For example, 1904 is a leap year it is divisible by 4.\n     * 1900 was not a leap year as it is divisible by 100, however 2000 was a\n     * leap year as it is divisible by 400.\n     *\n     * The calculation is proleptic - applying the same rules into the far future and far past.\n     * This is historically inaccurate, but is correct for the ISO-8601 standard.\n     *\n     * @param {number} prolepticYear - the ISO proleptic year to check\n     * @return {boolean} true if the year is leap, false otherwise\n     */\n    static isLeapYear(prolepticYear) {\n        return ((prolepticYear & 3) === 0) && ((prolepticYear % 100) !== 0 || (prolepticYear % 400) === 0);\n    }\n\n    /**\n     * Updates the map of field-values during resolution.\n     *\n     * @param {EnumMap} fieldValues  the fieldValues map to update, not null\n     * @param {ChronoField} field  the field to update, not null\n     * @param {number} value  the value to update, not null\n     * @throws DateTimeException if a conflict occurs\n     */\n    _updateResolveMap(fieldValues, field, value) {\n        // TODO: this function is in Chronology in threetenbp, maybe needs to be moved?\n        requireNonNull(fieldValues, 'fieldValues');\n        requireNonNull(field, 'field');\n        const current = fieldValues.get(field);\n        if (current != null && current !== value) {\n            throw new DateTimeException(`Invalid state, field: ${field} ${current} conflicts with ${field} ${value}`);\n        }\n        fieldValues.put(field, value);\n    }\n\n    resolveDate(fieldValues, resolverStyle) {\n        if (fieldValues.containsKey(ChronoField.EPOCH_DAY)) {\n            return LocalDate.ofEpochDay(fieldValues.remove(ChronoField.EPOCH_DAY));\n        }\n\n        // normalize fields\n        const prolepticMonth = fieldValues.remove(ChronoField.PROLEPTIC_MONTH);\n        if (prolepticMonth != null) {\n            if (resolverStyle !== ResolverStyle.LENIENT) {\n                ChronoField.PROLEPTIC_MONTH.checkValidValue(prolepticMonth);\n            }\n            this._updateResolveMap(fieldValues, ChronoField.MONTH_OF_YEAR, MathUtil.floorMod(prolepticMonth, 12) + 1);\n            this._updateResolveMap(fieldValues, ChronoField.YEAR, MathUtil.floorDiv(prolepticMonth, 12));\n        }\n\n        // eras\n        const yoeLong = fieldValues.remove(ChronoField.YEAR_OF_ERA);\n        if (yoeLong != null) {\n            if (resolverStyle !== ResolverStyle.LENIENT) {\n                ChronoField.YEAR_OF_ERA.checkValidValue(yoeLong);\n            }\n            const era = fieldValues.remove(ChronoField.ERA);\n            if (era == null) {\n                const year = fieldValues.get(ChronoField.YEAR);\n                if (resolverStyle === ResolverStyle.STRICT) {\n                    // do not invent era if strict, but do cross-check with year\n                    if (year != null) {\n                        this._updateResolveMap(fieldValues, ChronoField.YEAR, (year > 0 ? yoeLong: MathUtil.safeSubtract(1, yoeLong)));\n                    } else {\n                        // reinstate the field removed earlier, no cross-check issues\n                        fieldValues.put(ChronoField.YEAR_OF_ERA, yoeLong);\n                    }\n                } else {\n                    // invent era\n                    this._updateResolveMap(fieldValues, ChronoField.YEAR, (year == null || year > 0 ? yoeLong: MathUtil.safeSubtract(1, yoeLong)));\n                }\n            } else if (era === 1) {\n                this._updateResolveMap(fieldValues, ChronoField.YEAR, yoeLong);\n            } else if (era === 0) {\n                this._updateResolveMap(fieldValues, ChronoField.YEAR, MathUtil.safeSubtract(1, yoeLong));\n            } else {\n                throw new DateTimeException(`Invalid value for era: ${era}`);\n            }\n        } else if (fieldValues.containsKey(ChronoField.ERA)) {\n            ChronoField.ERA.checkValidValue(fieldValues.get(ChronoField.ERA));  // always validated\n        }\n\n        // build date\n        if (fieldValues.containsKey(ChronoField.YEAR)) {\n            if (fieldValues.containsKey(ChronoField.MONTH_OF_YEAR)) {\n                if (fieldValues.containsKey(ChronoField.DAY_OF_MONTH)) {\n                    const y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n                    const moy = fieldValues.remove(ChronoField.MONTH_OF_YEAR);\n                    let dom = fieldValues.remove(ChronoField.DAY_OF_MONTH);\n                    if (resolverStyle === ResolverStyle.LENIENT) {\n                        const months = moy - 1;\n                        const days = dom - 1;\n                        return LocalDate.of(y, 1, 1).plusMonths(months).plusDays(days);\n                    } else if (resolverStyle === ResolverStyle.SMART){\n                        ChronoField.DAY_OF_MONTH.checkValidValue(dom);\n                        if (moy === 4 || moy === 6 || moy === 9 || moy === 11) {\n                            dom = Math.min(dom, 30);\n                        } else if (moy === 2) {\n                            dom = Math.min(dom, Month.FEBRUARY.length(Year.isLeap(y)));\n                        }\n                        return LocalDate.of(y, moy, dom);\n                    } else {\n                        return LocalDate.of(y, moy, dom);\n                    }\n                }\n                /*\n                if (fieldValues.containsKey(ALIGNED_WEEK_OF_MONTH)) {\n                    if (fieldValues.containsKey(ALIGNED_DAY_OF_WEEK_IN_MONTH)) {\n                        int y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n                        if (resolverStyle == ResolverStyle.LENIENT) {\n                            long months = Jdk8Methods.safeSubtract(fieldValues.remove(ChronoField.MONTH_OF_YEAR), 1);\n                            long weeks = Jdk8Methods.safeSubtract(fieldValues.remove(ALIGNED_WEEK_OF_MONTH), 1);\n                            long days = Jdk8Methods.safeSubtract(fieldValues.remove(ALIGNED_DAY_OF_WEEK_IN_MONTH), 1);\n                            return LocalDate.of(y, 1, 1).plusMonths(months).plusWeeks(weeks).plusDays(days);\n                        }\n                        int moy = ChronoField.MONTH_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.MONTH_OF_YEAR));\n                        int aw = ALIGNED_WEEK_OF_MONTH.checkValidIntValue(fieldValues.remove(ALIGNED_WEEK_OF_MONTH));\n                        int ad = ALIGNED_DAY_OF_WEEK_IN_MONTH.checkValidIntValue(fieldValues.remove(ALIGNED_DAY_OF_WEEK_IN_MONTH));\n                        LocalDate date = LocalDate.of(y, moy, 1).plusDays((aw - 1) * 7 + (ad - 1));\n                        if (resolverStyle == ResolverStyle.STRICT && date.get(ChronoField.MONTH_OF_YEAR) != moy) {\n                            throw new DateTimeException(\"Strict mode rejected date parsed to a different month\");\n                        }\n                        return date;\n                    }\n                    if (fieldValues.containsKey(DAY_OF_WEEK)) {\n                        int y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n                        if (resolverStyle == ResolverStyle.LENIENT) {\n                            long months = Jdk8Methods.safeSubtract(fieldValues.remove(ChronoField.MONTH_OF_YEAR), 1);\n                            long weeks = Jdk8Methods.safeSubtract(fieldValues.remove(ALIGNED_WEEK_OF_MONTH), 1);\n                            long days = Jdk8Methods.safeSubtract(fieldValues.remove(DAY_OF_WEEK), 1);\n                            return LocalDate.of(y, 1, 1).plusMonths(months).plusWeeks(weeks).plusDays(days);\n                        }\n                        int moy = ChronoField.MONTH_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.MONTH_OF_YEAR));\n                        int aw = ALIGNED_WEEK_OF_MONTH.checkValidIntValue(fieldValues.remove(ALIGNED_WEEK_OF_MONTH));\n                        int dow = DAY_OF_WEEK.checkValidIntValue(fieldValues.remove(DAY_OF_WEEK));\n                        LocalDate date = LocalDate.of(y, moy, 1).plusWeeks(aw - 1).with(nextOrSame(DayOfWeek.of(dow)));\n                        if (resolverStyle == ResolverStyle.STRICT && date.get(ChronoField.MONTH_OF_YEAR) != moy) {\n                            throw new DateTimeException(\"Strict mode rejected date parsed to a different month\");\n                        }\n                        return date;\n                    }\n                }\n*/\n            }\n            if (fieldValues.containsKey(ChronoField.DAY_OF_YEAR)) {\n                const y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n                if (resolverStyle === ResolverStyle.LENIENT) {\n                    const days = MathUtil.safeSubtract(fieldValues.remove(ChronoField.DAY_OF_YEAR), 1);\n                    return LocalDate.ofYearDay(y, 1).plusDays(days);\n                }\n                const doy = ChronoField.DAY_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.DAY_OF_YEAR));\n                return LocalDate.ofYearDay(y, doy);\n            }\n            if (fieldValues.containsKey(ChronoField.ALIGNED_WEEK_OF_YEAR)) {\n                if (fieldValues.containsKey(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR)) {\n                    const y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n                    if (resolverStyle === ResolverStyle.LENIENT) {\n                        const weeks = MathUtil.safeSubtract(fieldValues.remove(ChronoField.ALIGNED_WEEK_OF_YEAR), 1);\n                        const days = MathUtil.safeSubtract(fieldValues.remove(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR), 1);\n                        return LocalDate.of(y, 1, 1).plusWeeks(weeks).plusDays(days);\n                    }\n                    const aw = ChronoField.ALIGNED_WEEK_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.ALIGNED_WEEK_OF_YEAR));\n                    const ad = ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR));\n                    const date = LocalDate.of(y, 1, 1).plusDays((aw - 1) * 7 + (ad - 1));\n                    if (resolverStyle === ResolverStyle.STRICT && date.get(ChronoField.YEAR) !== y) {\n                        throw new DateTimeException('Strict mode rejected date parsed to a different year');\n                    }\n                    return date;\n                }\n                if (fieldValues.containsKey(ChronoField.DAY_OF_WEEK)) {\n                    const y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n                    if (resolverStyle === ResolverStyle.LENIENT) {\n                        const weeks = MathUtil.safeSubtract(fieldValues.remove(ChronoField.ALIGNED_WEEK_OF_YEAR), 1);\n                        const days = MathUtil.safeSubtract(fieldValues.remove(ChronoField.DAY_OF_WEEK), 1);\n                        return LocalDate.of(y, 1, 1).plusWeeks(weeks).plusDays(days);\n                    }\n                    const aw = ChronoField.ALIGNED_WEEK_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.ALIGNED_WEEK_OF_YEAR));\n                    const dow = ChronoField.DAY_OF_WEEK.checkValidIntValue(fieldValues.remove(ChronoField.DAY_OF_WEEK));\n                    const date = LocalDate.of(y, 1, 1).plusWeeks(aw - 1).with(TemporalAdjusters.nextOrSame(DayOfWeek.of(dow)));\n                    if (resolverStyle === ResolverStyle.STRICT && date.get(ChronoField.YEAR) !== y) {\n                        throw new DateTimeException('Strict mode rejected date parsed to a different month');\n                    }\n                    return date;\n                }\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Obtains an ISO local date from another date-time object.\n     * <p>\n     * This is equivalent to {@link LocalDate#from(TemporalAccessor)}.\n     *\n     * @param temporal  the date-time object to convert, not null\n     * @return the ISO local date, not null\n     * @throws DateTimeException if unable to create the date\n     */\n    date(temporal) {\n        return LocalDate.from(temporal);\n    }\n\n}\n\nexport function _init() {\n    IsoChronology.INSTANCE = new IsoChronology('IsoChronology');\n}\n","/**\n * @copyright (c) 2016-present, Philipp Thürwächter & Pattrick Hüper  & js-joda contributors\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { Temporal } from './temporal/Temporal';\nimport { Clock } from './Clock';\nimport { DateTimeException, UnsupportedTemporalTypeException } from './errors';\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\nimport { Instant, LocalTime } from './js-joda';\nimport { MathUtil } from './MathUtil';\nimport { OffsetDateTime } from './OffsetDateTime';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { ZoneId } from './ZoneId';\nimport { ZoneOffset } from './ZoneOffset';\n\nimport { createTemporalQuery } from './temporal/TemporalQuery';\nimport { requireInstance, requireNonNull } from './assert';\n\n/**\n * A time with an offset from UTC/Greenwich in the ISO-8601 calendar system, such as 10:15:30+01:00.\n */\nexport class OffsetTime extends Temporal {\n    /**\n     * @param {!TemporalAccessor} temporal\n     * @return {OffsetTime}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        if (temporal instanceof OffsetTime) {\n            return temporal;\n        } else if (temporal instanceof OffsetDateTime) {\n            return temporal.toOffsetTime();\n        }\n        try {\n            const time = LocalTime.from(temporal);\n            const offset = ZoneOffset.from(temporal);\n            return new OffsetTime(time, offset);\n        } catch(ex) {\n            throw new DateTimeException(`Unable to obtain OffsetTime TemporalAccessor: ${temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`);\n        }\n    }\n\n    /**\n     * @param {Clock|ZoneId} clockOrZone\n     * @return {OffsetTime}\n     */\n    static now(clockOrZone) {\n        if (arguments.length === 0){\n            return OffsetTime._now(Clock.systemDefaultZone());\n        } else if (clockOrZone instanceof Clock){\n            return OffsetTime._now(clockOrZone);\n        } else {\n            return OffsetTime._now(Clock.system(clockOrZone));\n        }\n    }\n\n    /**\n     * @param {Clock} clock - the clock to use, defaults to Clock.systemDefaultZone()\n     * @return {OffsetTime} the current offset date-time, not null\n     */\n    static _now(clock) {\n        requireNonNull(clock, 'clock');\n        const now = clock.instant();\n        return OffsetTime.ofInstant(now, clock.zone().rules().offset(now));\n    }\n\n    /**\n     * @return {OffsetTime}\n     */\n    static of(){\n        if (arguments.length <= 2) {\n            return OffsetTime.ofTimeAndOffset.apply(this, arguments);\n        } else {\n            return OffsetTime.ofNumbers.apply(this, arguments);\n        }\n    }\n\n    /**\n     * @param {int} hour\n     * @param {int} minute\n     * @param {int} second\n     * @param {int} nanoOfSecond\n     * @param {ZoneOffset} offset\n     * @return {OffsetTime}\n     */\n    static ofNumbers(hour, minute, second, nanoOfSecond, offset) {\n        const time = LocalTime.of(hour, minute, second, nanoOfSecond);\n        return new OffsetTime(time, offset);\n    }\n\n    /**\n     * @param {LocalTime} time\n     * @param {ZoneOffset} offset\n     * @return {OffsetTime}\n     */\n    static ofTimeAndOffset(time, offset) {\n        return new OffsetTime(time, offset);\n    }\n\n    /**\n     * @param {!Instant} instant\n     * @param {!ZoneId} zone\n     * @return {!OffsetTime}\n     */\n    static ofInstant( instant,  zone){\n        requireNonNull(instant, 'instant');\n        requireInstance(instant, Instant, 'instant');\n        requireNonNull(zone, 'zone');\n        requireInstance(zone, ZoneId, 'zone');\n\n        const rules = zone.rules();\n        const offset = rules.offset(instant);\n        let secsOfDay = instant.epochSecond() % LocalTime.SECONDS_PER_DAY;\n        secsOfDay = (secsOfDay + offset.totalSeconds()) % LocalTime.SECONDS_PER_DAY;\n        if (secsOfDay < 0) {\n            secsOfDay += LocalTime.SECONDS_PER_DAY;\n        }\n        const time = LocalTime.ofSecondOfDay(secsOfDay, instant.nano());\n        return new OffsetTime(time, offset);\n    }\n\n    /**\n     * @param {string} text\n     * @param {DateTimeFormatter} formatter\n     * @return {OffsetTime}\n     */\n    static parse(text, formatter= DateTimeFormatter.ISO_OFFSET_TIME) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.parse(text, OffsetTime.FROM);\n    }\n    //-----------------------------------------------------------------------\n\n    /**\n     * @param {LocalTime} time\n     * @param {ZoneOffset} offset\n     * @private\n     */\n    constructor(time, offset) {\n        super();\n        requireNonNull(time, 'time');\n        requireInstance(time, LocalTime, 'time');\n        requireNonNull(offset, 'offset');\n        requireInstance(offset, ZoneOffset, 'offset');\n        this._time = time;\n        this._offset = offset;\n    }\n\n\n    /**\n     * @param {TemporalAdjuster} temporal - the target object to be adjusted, not null\n     * @return {Temporal} the adjusted object, not null\n     * @throws {DateTimeException} if unable to make the adjustment\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        return temporal\n            .with(ChronoField.NANO_OF_DAY, this._time.toNanoOfDay())\n            .with(ChronoField.OFFSET_SECONDS, this.offset().totalSeconds());\n    }\n\n    /**\n     * @param {LocalDate} date - the date to combine with, not null\n     * @return {OffsetDateTime} the offset date-time formed from this time and the specified date, not null\n     */\n    atDate(date) {\n        return OffsetDateTime.of(date, this._time, this._offset);\n    }\n\n    /**\n     * @param {DateTimeFormatter} formatter - the formatter to use, not null\n     * @return {string} the formatted time string, not null\n     * @throws {DateTimeException} if an error occurs during printing\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.format(this, OffsetTime.FROM);\n    }\n\n\n    /**\n     * @param {TemporalField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws {DateTimeException} if a value for the field cannot be obtained\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    get(field) {\n        return super.get(field);\n    }\n\n    /**\n     * @param {TemporalField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws {DateTimeException} if a value for the field cannot be obtained\n     * @trhows {UnsupportedTemporalTypeException}\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    getLong(field) {\n        if (field instanceof ChronoField) {\n            if (field === ChronoField.OFFSET_SECONDS) {\n                return this._offset.totalSeconds();\n            }\n            return this._time.getLong(field);\n        }\n        return field.getFrom(this);\n    }\n\n    /**\n     * @return {int}\n     */\n    hour() {\n        return this._time.hour();\n    }\n\n    /**\n     * @return {int}\n     */\n    minute() {\n        return this._time.minute();\n    }\n\n    /**\n     * @return {int}\n     */\n    second() {\n        return this._time.second();\n    }\n\n    /**\n     * @return {int}\n     */\n    nano() {\n        return this._time.nano();\n    }\n\n    /**\n     * @return {ZoneOffset}\n     */\n    offset() {\n        return this._offset;\n    }\n\n    /**\n     * @param {OffsetTime} other - the other time to compare to, not null\n     * @return {boolean} true if this is after the specified time\n     * @throws {NullPointerException} if `other` is null\n     */\n    isAfter(other) {\n        requireNonNull(other, 'other');\n        return this._toEpochNano() > other._toEpochNano();\n    }\n\n    /**\n     * @param {OffsetTime} other - the other time to compare to, not null\n     * @return {boolean} true if this point is before the specified time\n     * @throws {NullPointerException} if `other` is null\n     */\n    isBefore(other) {\n        requireNonNull(other, 'other');\n        return this._toEpochNano() < other._toEpochNano();\n    }\n\n    /**\n     * @param {OffsetTime} other - the other time to compare to, not null\n     * @return {boolean}\n     * @throws {NullPointerException} if `other` is null\n     */\n    isEqual(other) {\n        requireNonNull(other, 'other');\n        return this._toEpochNano() === other._toEpochNano();\n    }\n\n    /**\n     * @param {TemporalField|TemporalUnit} fieldOrUnit - the field to check, null returns false\n     * @return {boolean} true if the field is supported on this time, false if not\n     */\n    isSupported(fieldOrUnit) {\n        if (fieldOrUnit instanceof ChronoField) {\n            return fieldOrUnit.isTimeBased() || fieldOrUnit === ChronoField.OFFSET_SECONDS;\n        } else if (fieldOrUnit instanceof ChronoUnit) {\n            return fieldOrUnit.isTimeBased();\n        }\n        return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n    }\n\n    /**\n     * @param {number} hours\n     * @return {OffsetTime}\n     */\n    minusHours(hours) {\n        return this._withLocalTimeOffset(this._time.minusHours(hours), this._offset);\n    }\n\n    /**\n     * @param {number} minutes\n     * @return {OffsetTime}\n     */\n    minusMinutes(minutes) {\n        return this._withLocalTimeOffset(this._time.minusMinutes(minutes), this._offset);\n    }\n\n    /**\n     * @param {number} seconds\n     * @return {OffsetTime}\n     */\n    minusSeconds(seconds) {\n        return this._withLocalTimeOffset(this._time.minusSeconds(seconds), this._offset);\n    }\n\n    /**\n     * @param {number} nanos\n     * @return {OffsetTime}\n     */\n    minusNanos(nanos) {\n        return this._withLocalTimeOffset(this._time.minusNanos(nanos), this._offset);\n    }\n\n    _minusAmount(amount) {\n        requireNonNull(amount);\n        return amount.subtractFrom(this);\n    }\n\n    _minusUnit(amountToSubtract, unit) {\n        return this.plus(-1 * amountToSubtract, unit);\n    }\n\n    _plusAmount(amount) {\n        requireNonNull(amount);\n        return amount.addTo(this);\n    }\n\n    /**\n     *\n     * @param amountToAdd\n     * @param unit\n     * @return {Temporal}\n     */\n    _plusUnit(amountToAdd, unit) {\n        if (unit instanceof ChronoUnit) {\n            return this._withLocalTimeOffset(this._time.plus(amountToAdd, unit), this._offset);\n        }\n        return unit.addTo(this, amountToAdd);\n    }\n\n    /**\n     * @param {int} hours\n     * @return {OffsetTime}\n     */\n    plusHours(hours) {\n        return this._withLocalTimeOffset(this._time.plusHours(hours), this._offset);\n    }\n\n    /**\n     * @param {int} minutes\n     * @return {OffsetTime}\n     */\n    plusMinutes(minutes) {\n        return this._withLocalTimeOffset(this._time.plusMinutes(minutes), this._offset);\n    }\n\n    /**\n     * @param {int} seconds\n     * @return {OffsetTime}\n     */\n    plusSeconds(seconds) {\n        return this._withLocalTimeOffset(this._time.plusSeconds(seconds), this._offset);\n    }\n\n    /**\n     * @param {int} nanos\n     * @return {OffsetTime}\n     */\n    plusNanos(nanos) {\n        return this._withLocalTimeOffset(this._time.plusNanos(nanos), this._offset);\n    }\n\n    /**\n     * @param {TemporalQuery} query - the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws {DateTimeException} if unable to query (defined by the query)\n     * @throws {ArithmeticException} if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        requireNonNull(query, 'query');\n        if (query === TemporalQueries.precision()) {\n            return ChronoUnit.NANOS;\n        } else if (query === TemporalQueries.offset() || query === TemporalQueries.zone()) {\n            return this.offset();\n        } else if (query === TemporalQueries.localTime()) {\n            return this._time;\n        } else if (query === TemporalQueries.chronology() || query === TemporalQueries.localDate() || query === TemporalQueries.zoneId()) {\n            return null;\n        }\n        return super.query(query);\n    }\n\n    /**\n     * @param {TemporalField} field - the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws {DateTimeException} if the range for the field cannot be obtained\n     */\n    range(field) {\n        if (field instanceof ChronoField) {\n            if (field === ChronoField.OFFSET_SECONDS) {\n                return field.range();\n            }\n            return this._time.range(field);\n        }\n        return field.rangeRefinedBy(this);\n    }\n\n    /**\n     * @return {LocalTime}\n     */\n    toLocalTime() {\n        return this._time;\n    }\n\n    /**\n     * @param {TemporalUnit} unit - the unit to truncate to, not null\n     * @return {OffsetTime} a {@link LocalTime} based on this time with the time truncated, not null\n     * @throws {DateTimeException} if unable to truncate\n     */\n    truncatedTo(unit) {\n        return this._withLocalTimeOffset(this._time.truncatedTo(unit), this._offset);\n    }\n\n    /**\n    * @param {Temporal} endExclusive - the end time, which is converted to a {@link LocalTime}, not null\n    * @param {TemporalUnit} unit - the unit to measure the period in, not null\n    * @return {number} the amount of the period between this time and the end time\n    * @throws {DateTimeException} if the period cannot be calculated\n    * @throws {ArithmeticException} if numeric overflow occurs\n    */\n    until(endExclusive, unit) {\n        requireNonNull(endExclusive, 'endExclusive');\n        requireNonNull(unit, 'unit');\n        const end = OffsetTime.from(endExclusive);\n        if (unit instanceof ChronoUnit) {\n            const nanosUntil = end._toEpochNano() - this._toEpochNano(); // no overflow\n            switch (unit) {\n                case ChronoUnit.NANOS: return nanosUntil;\n                case ChronoUnit.MICROS: return MathUtil.intDiv(nanosUntil, 1000);\n                case ChronoUnit.MILLIS: return MathUtil.intDiv(nanosUntil, 1000000);\n                case ChronoUnit.SECONDS: return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_SECOND);\n                case ChronoUnit.MINUTES: return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_MINUTE);\n                case ChronoUnit.HOURS: return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_HOUR);\n                case ChronoUnit.HALF_DAYS: return MathUtil.intDiv(nanosUntil, (12 * LocalTime.NANOS_PER_HOUR));\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.between(this, end);\n    }\n\n    /**\n     * @param {int} hour\n     * @return {OffsetTime}\n     */\n    withHour(hour) {\n        return this._withLocalTimeOffset(this._time.withHour(hour), this._offset);\n    }\n\n    /**\n     * @param {int} minute\n     * @return {OffsetTime}\n     */\n    withMinute(minute) {\n        return this._withLocalTimeOffset(this._time.withMinute(minute), this._offset);\n    }\n\n    /**\n     * @param {int} second\n     * @return {OffsetTime}\n     */\n    withSecond(second) {\n        return this._withLocalTimeOffset(this._time.withSecond(second), this._offset);\n    }\n\n    /**\n     * @param {int} nano\n     * @return {OffsetTime}\n     */\n    withNano(nano) {\n        return this._withLocalTimeOffset(this._time.withNano(nano), this._offset);\n    }\n\n    /**\n     * @param {ZoneOffset} offset\n     * @return {OffsetTime}\n     */\n    withOffsetSameInstant(offset) {\n        requireNonNull(offset, 'offset');\n        if (offset.equals(this._offset)) {\n            return this;\n        }\n        const difference = offset.totalSeconds() - this._offset.totalSeconds();\n        const adjusted = this._time.plusSeconds(difference);\n        return new OffsetTime(adjusted, offset);\n    }\n\n    /**\n     * @param {ZoneOffset} offset\n     * @return {OffsetTime}\n     */\n    withOffsetSameLocal(offset) {\n        return offset != null && offset.equals(this._offset) ? this : new OffsetTime(this._time, offset);\n    }\n\n    _toEpochNano() {\n        const nod = this._time.toNanoOfDay();\n        const offsetNanos = this._offset.totalSeconds() * LocalTime.NANOS_PER_SECOND;\n        return nod - offsetNanos;\n    }\n\n    _withAdjuster(adjuster) {\n        requireNonNull(adjuster, 'adjuster');\n        // optimizations\n        if (adjuster instanceof LocalTime) {\n            return this._withLocalTimeOffset(adjuster, this._offset);\n        } else if (adjuster instanceof ZoneOffset) {\n            return this._withLocalTimeOffset(this._time, adjuster);\n        } else if (adjuster instanceof OffsetTime) {\n            return adjuster;\n        }\n        return adjuster.adjustInto(this);\n    }\n\n    _withField(field, newValue) {\n        requireNonNull(field, 'field');\n        if (field instanceof ChronoField) {\n            if (field === ChronoField.OFFSET_SECONDS) {\n                return this._withLocalTimeOffset(this._time, ZoneOffset.ofTotalSeconds(field.checkValidIntValue(newValue)));\n            }\n            return this._withLocalTimeOffset(this._time.with(field, newValue), this._offset);\n        }\n        return field.adjustInto(this, newValue);\n    }\n\n    /**\n     * @private\n     * @param {LocalTime} time\n     * @param {ZoneOffset} offset\n     * @return {OffsetTime}\n     */\n    _withLocalTimeOffset(time, offset) {\n        if (this._time === time && this._offset.equals(offset)) {\n            return this;\n        }\n        return new OffsetTime(time, offset);\n    }\n\n    //---------------------------------\n\n    /**\n     * @param {OffsetTime} other - the other time to compare to, not null\n     * @return {int} the comparator value, negative if less, positive if greater\n     * @throws {NullPointerException} if `other` is null\n     */\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, OffsetTime, 'other');\n        if (this._offset.equals(other._offset)) {\n            return this._time.compareTo(other._time);\n        }\n        const compare = MathUtil.compareNumbers(this._toEpochNano(), other._toEpochNano());\n        if (compare === 0) {\n            return this._time.compareTo(other._time);\n        }\n        return compare;\n    }\n\n    /**\n     * @param {*} other - the object to check, null returns false\n     * @return {boolean} true if this is equal to the other time\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof OffsetTime) {\n            return this._time.equals(other._time) && this._offset.equals(other._offset);\n        }\n        return false;\n    }\n\n    /**\n     * @return {number}\n     */\n    hashCode() {\n        return this._time.hashCode() ^ this._offset.hashCode();\n    }\n\n    /**\n     * @return {string}\n     */\n    toString() {\n        return this._time.toString() + this._offset.toString();\n    }\n\n    /**\n     *\n     * @return {string} same as {@link LocalDateTime.toString}\n     */\n    toJSON() {\n        return this.toString();\n    }\n}\n\n\nexport function _init() {\n    OffsetTime.MIN = OffsetTime.ofNumbers(0, 0, 0,0, ZoneOffset.MAX);\n\n    OffsetTime.MAX = OffsetTime.ofNumbers(23, 59, 59,999999999, ZoneOffset.MIN);\n\n    OffsetTime.FROM = createTemporalQuery('OffsetTime.FROM', (temporal) => {\n        return OffsetTime.from(temporal);\n    });\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from '../assert';\nimport { Instant } from '../Instant';\nimport { LocalDate } from '../LocalDate';\nimport { MathUtil } from '../MathUtil';\n\nimport { ChronoUnit } from '../temporal/ChronoUnit';\nimport { Temporal } from '../temporal/Temporal';\nimport { TemporalQueries } from '../temporal/TemporalQueries';\n\nexport class ChronoZonedDateTime extends Temporal {\n    query(query) {\n        if (query === TemporalQueries.zoneId() || query === TemporalQueries.zone()) {\n            return this.zone();\n        } else if (query === TemporalQueries.chronology()) {\n            return this.toLocalDate().chronology();\n        } else if (query === TemporalQueries.precision()) {\n            return ChronoUnit.NANOS;\n        } else if (query === TemporalQueries.offset()) {\n            return this.offset();\n        } else if (query === TemporalQueries.localDate()) {\n            return LocalDate.ofEpochDay(this.toLocalDate().toEpochDay());\n        } else if (query === TemporalQueries.localTime()) {\n            return this.toLocalTime();\n        }\n        return super.query(query);\n    }\n\n    /**\n     * Outputs this date-time as a string using the formatter.\n     *\n     * @param {DateTimeFormatter} formatter - the formatter to use, not null\n     * @return {string} the formatted date-time string, not null\n     * @throws DateTimeException if an error occurs during printing\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.format(this);\n    }\n\n    /**\n     * Converts this date-time to an {@link Instant}.\n     *\n     * This returns an {@link Instant} representing the same point on the\n     * time-line as this date-time. The calculation combines the\n     * local date-time (see {@link toLocalDateTime}) and\n     * offset (see {@link getOffset}).\n     *\n     * @return {Instant} an {@link Instant} representing the same instant, not null\n     */\n    toInstant() {\n        return Instant.ofEpochSecond(this.toEpochSecond(), this.toLocalTime().nano());\n    }\n\n    /**\n     * Converts this date-time to the number of seconds from the epoch\n     * of 1970-01-01T00:00:00Z.\n     *\n     * This uses the local date-time (see {@link toLocalDateTime}) and\n     * offset (see {@link getOffset}) to calculate the epoch-second value,\n     * which is the number of elapsed seconds from 1970-01-01T00:00:00Z.\n     * Instants on the time-line after the epoch are positive, earlier are negative.\n     *\n     * @return {number} the number of seconds from the epoch of 1970-01-01T00:00:00Z\n     */\n    toEpochSecond() {\n        const epochDay = this.toLocalDate().toEpochDay();\n        let secs = epochDay * 86400 + this.toLocalTime().toSecondOfDay();\n        secs -= this.offset().totalSeconds();\n        return secs;\n    }\n\n    /**\n      * Compares this date-time to another date-time, including the chronology.\n      *\n      * The comparison is based first on the instant, then on the local date-time,\n      * then on the zone ID, then on the chronology.\n      * It is \"consistent with equals\", as defined by {@link Comparable}.\n      *\n      * If all the date-time objects being compared are in the same chronology, then the\n      * additional chronology stage is not required.\n      *\n      * @param {ChronoZonedDateTime} other - the other date-time to compare to, not null\n      * @return {number} the comparator value, negative if less, positive if greater\n      */\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        let cmp = MathUtil.compareNumbers(this.toEpochSecond(), other.toEpochSecond());\n        if (cmp === 0) {\n            cmp = this.toLocalTime().nano() - other.toLocalTime().nano();\n            if (cmp === 0) {\n                cmp = this.toLocalDateTime().compareTo(other.toLocalDateTime());\n                if (cmp === 0) {\n                    cmp = strcmp(this.zone().id(), other.zone().id());\n                    // we only support iso for now\n                    //if (cmp === 0) {\n                    //    cmp = toLocalDate().getChronology().compareTo(other.toLocalDate().getChronology());\n                    //}\n                }\n            }\n        }\n        return cmp;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if the instant of this date-time is after that of the specified date-time.\n     *\n     * This method differs from the comparison in {@link compareTo} in that it\n     * only compares the instant of the date-time. This is equivalent to using\n     * `dateTime1.toInstant().isAfter(dateTime2.toInstant())`.\n     *\n     * @param {!ChronoZonedDateTime} other - the other date-time to compare to, not null\n     * @return {boolean} true if this is after the specified date-time\n     */\n    isAfter(other) {\n        requireNonNull(other, 'other');\n        const thisEpochSec = this.toEpochSecond();\n        const otherEpochSec = other.toEpochSecond();\n        return thisEpochSec > otherEpochSec ||\n            (thisEpochSec === otherEpochSec && this.toLocalTime().nano() > other.toLocalTime().nano());\n    }\n\n    /**\n     * Checks if the instant of this date-time is before that of the specified date-time.\n     *\n     * This method differs from the comparison in {@link compareTo} in that it\n     * only compares the instant of the date-time. This is equivalent to using\n     * `dateTime1.toInstant().isBefore(dateTime2.toInstant())`.\n     *\n     * @param {!ChronoZonedDateTime} other - the other date-time to compare to, not null\n     * @return {boolean} true if this point is before the specified date-time\n     */\n    isBefore(other) {\n        requireNonNull(other, 'other');\n        const thisEpochSec = this.toEpochSecond();\n        const otherEpochSec = other.toEpochSecond();\n        return thisEpochSec < otherEpochSec ||\n            (thisEpochSec === otherEpochSec && this.toLocalTime().nano() < other.toLocalTime().nano());\n    }\n\n    /**\n     * Checks if the instant of this date-time is equal to that of the specified date-time.\n     *\n     * This method differs from the comparison in {@link compareTo} and {@link equals}\n     * in that it only compares the instant of the date-time. This is equivalent to using\n     * `dateTime1.toInstant().equals(dateTime2.toInstant())`.\n     *\n     * @param {!ChronoZonedDateTime} other - the other date-time to compare to, not null\n     * @return {boolean} true if the instant equals the instant of the specified date-time\n     */\n    isEqual(other) {\n        requireNonNull(other, 'other');\n        return this.toEpochSecond() === other.toEpochSecond() &&\n                this.toLocalTime().nano() === other.toLocalTime().nano();\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this date-time is equal to another date-time.\n     *\n     * The comparison is based on the offset date-time and the zone.\n     * To compare for the same instant on the time-line, use {@link compareTo}.\n     * Only objects of type {@link ChronoZoneDateTime} are compared, other types return false.\n     *\n     * @param {*} other  the object to check, null returns false\n     * @return {boolean} true if this is equal to the other date-time\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof ChronoZonedDateTime) {\n            return this.compareTo(other) === 0;\n        }\n        return false;\n    }\n\n}\n\nfunction strcmp(a, b){\n    if (a < b) {\n        return -1;\n    }\n    if (a > b) {\n        return 1;\n    }\n    return 0;\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from './assert';\nimport { DateTimeException, IllegalArgumentException } from './errors';\nimport { MathUtil } from './MathUtil';\n\nimport { Clock } from './Clock';\nimport { Instant } from './Instant';\nimport { LocalDate } from './LocalDate';\nimport { LocalDateTime } from './LocalDateTime';\nimport { LocalTime } from './LocalTime';\nimport { OffsetDateTime } from './OffsetDateTime';\nimport { ZoneId } from './ZoneId';\nimport { ZoneOffset } from './ZoneOffset';\n\nimport { ChronoZonedDateTime } from './chrono/ChronoZonedDateTime';\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { createTemporalQuery } from './temporal/TemporalQuery';\nimport { TemporalQueries } from './temporal/TemporalQueries';\n\n/**\n * A date-time with a time-zone in the ISO-8601 calendar system,\n * such as `2007-12-03T10:15:30+01:00 Europe/Paris`.\n *\n * `ZonedDateTime` is an immutable representation of a date-time with a time-zone.\n * This class stores all date and time fields, to a precision of nanoseconds,\n * and a time-zone, with a zone offset used to handle ambiguous local date-times.\n * For example, the value\n * '2nd October 2007 at 13:45.30.123456789 +02:00 in the Europe/Paris time-zone'\n * can be stored in a {@link ZonedDateTime}.\n *\n * This class handles conversion from the local time-line of {@link LocalDateTime}\n * to the instant time-line of {@link Instant}.\n * The difference between the two time-lines is the offset from UTC/Greenwich,\n * represented by a {@link ZoneOffset}.\n *\n * Converting between the two time-lines involves calculating the offset using the\n * {@link ZoneRules} rules accessed from the {@link ZoneId}.\n * Obtaining the offset for an instant is simple, as there is exactly one valid\n * offset for each instant. By contrast, obtaining the offset for a local date-time\n * is not straightforward. There are three cases:\n *\n * * Normal, with one valid offset. For the vast majority of the year, the normal\n *   case applies, where there is a single valid offset for the local date-time.\n * * Gap, with zero valid offsets. This is when clocks jump forward typically\n *   due to the spring daylight savings change from 'winter' to 'summer'.\n *   In a gap there are local date-time values with no valid offset.\n * * Overlap, with two valid offsets. This is when clocks are set back typically\n *   due to the autumn daylight savings change from 'summer' to 'winter'.\n *   In an overlap there are local date-time values with two valid offsets.\n *\n * Any method that converts directly or implicitly from a local date-time to an\n * instant by obtaining the offset has the potential to be complicated.\n *\n * For Gaps, the general strategy is that if the local date-time falls in the\n * middle of a Gap, then the resulting zoned date-time will have a local date-time\n * shifted forwards by the length of the Gap, resulting in a date-time in the later\n * offset, typically 'summer' time.\n *\n * For Overlaps, the general strategy is that if the local date-time falls in the\n * middle of an Overlap, then the previous offset will be retained. If there is no\n * previous offset, or the previous offset is invalid, then the earlier offset is\n * used, typically 'summer' time. Two additional methods,\n * {@link withEarlierOffsetAtOverlap} and {@link withLaterOffsetAtOverlap},\n * help manage the case of an overlap.\n *\n * ### Specification for implementors\n *\n * A {@link ZonedDateTime} holds state equivalent to three separate objects,\n * a {@link LocalDateTime}, a {@link ZoneId} and the resolved {@link ZoneOffset}.\n * The offset and local date-time are used to define an instant when necessary.\n * The zone ID is used to obtain the rules for how and when the offset changes.\n * The offset cannot be freely set, as the zone controls which offsets are valid.\n */\nexport class ZonedDateTime extends ChronoZonedDateTime {\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains the current date-time from the system clock in the specified time-zone or clock\n     * or default time zone.\n     *\n     * This will query the system clock (see {@link Clock#systemDefaultZone}) in the default\n     * time-zone to obtain the current date-time.\n     * The zone and offset will be set based on the time-zone in the clock.\n     *\n     * Using this method will prevent the ability to use an alternate clock for testing\n     * because the clock is hard-coded.\n     *\n     * @param {Clock|ZoneId} [clockOrZone=Clock.systemDefaultZone()]\n     * @return {ZonedDateTime} the current date-time using the system clock, not null\n     */\n    static now(clockOrZone) {\n        let clock;\n        if(clockOrZone instanceof ZoneId){\n            clock = Clock.system(clockOrZone);\n        } else {\n            clock = clockOrZone == null ? Clock.systemDefaultZone() : clockOrZone;\n        }\n        return ZonedDateTime.ofInstant(clock.instant(), clock.zone());\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for static {@link ZonedDateTime.of}\n     *\n     * if called with 2 (or less) args {@link ZonedDateTime.of2} is called,\n     * if called with 3 args and the first arg is an instance of LocalDate {@link ZonedDateTime.of3} is called,\n     * otherwise {@link ZonedDateTime.of8} is called.\n     */\n    static of(){\n        if(arguments.length <= 2){\n            return ZonedDateTime.of2.apply(this, arguments);\n        } else if (arguments.length === 3 && arguments[0] instanceof LocalDate){\n            return ZonedDateTime.of3.apply(this, arguments);\n        } else {\n            return ZonedDateTime.of8.apply(this, arguments);\n        }\n    }\n    /**\n     * Obtains an instance of {@link ZonedDateTime} from a local date and time.\n     *\n     * This creates a zoned date-time matching the input local date and time as closely as possible.\n     * Time-zone rules, such as daylight savings, mean that not every local date-time\n     * is valid for the specified zone, thus the local date-time may be adjusted.\n     *\n     * The local date time and first combined to form a local date-time.\n     * The local date-time is then resolved to a single instant on the time-line.\n     * This is achieved by finding a valid offset from UTC/Greenwich for the local\n     * date-time as defined by the {@link ZoneRules} of the zone ID.\n     *\n     * In most cases, there is only one valid offset for a local date-time.\n     * In the case of an overlap, when clocks are set back, there are two valid offsets.\n     * This method uses the earlier offset typically corresponding to 'summer'.\n     *\n     * In the case of a gap, when clocks jump forward, there is no valid offset.\n     * Instead, the local date-time is adjusted to be later by the length of the gap.\n     * For a typical one hour daylight savings change, the local date-time will be\n     * moved one hour later into the offset typically corresponding to 'summer'.\n     *\n     * @param {LocalDate} date - the local date, not null\n     * @param {LocalTime} time - the local time, not null\n     * @param {ZoneId} zone - the time-zone, not null\n     * @return {ZonedDateTime} the offset date-time, not null\n     */\n    static of3(date, time, zone) {\n        return ZonedDateTime.of2(LocalDateTime.of(date, time), zone);\n    }\n\n    /**\n     * Obtains an instance of {@link ZonedDateTime} from a local date-time.\n     *\n     * This creates a zoned date-time matching the input local date-time as closely as possible.\n     * Time-zone rules, such as daylight savings, mean that not every local date-time\n     * is valid for the specified zone, thus the local date-time may be adjusted.\n     *\n     * The local date-time is resolved to a single instant on the time-line.\n     * This is achieved by finding a valid offset from UTC/Greenwich for the local\n     * date-time as defined by the {@link ZoneRules} of the zone ID.\n     *\n     * In most cases, there is only one valid offset for a local date-time.\n     * In the case of an overlap, when clocks are set back, there are two valid offsets.\n     * This method uses the earlier offset typically corresponding to 'summer'.\n     *\n     * In the case of a gap, when clocks jump forward, there is no valid offset.\n     * Instead, the local date-time is adjusted to be later by the length of the gap.\n     * For a typical one hour daylight savings change, the local date-time will be\n     * moved one hour later into the offset typically corresponding to 'summer'.\n     *\n     * @param {!LocalDateTime} localDateTime - the local date-time, not null\n     * @param {!ZoneId} zone - the time-zone, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     */\n    static of2(localDateTime, zone) {\n        return ZonedDateTime.ofLocal(localDateTime, zone, null);\n    }\n\n    /**\n     * Obtains an instance of {@link ZonedDateTime} from a year, month, day,\n     * hour, minute, second, nanosecond and time-zone.\n     *\n     * This creates a zoned date-time matching the local date-time of the seven\n     * specified fields as closely as possible.\n     * Time-zone rules, such as daylight savings, mean that not every local date-time\n     * is valid for the specified zone, thus the local date-time may be adjusted.\n     *\n     * The local date-time is resolved to a single instant on the time-line.\n     * This is achieved by finding a valid offset from UTC/Greenwich for the local\n     * date-time as defined by the {@link ZoneRules} of the zone ID.\n     *\n     * In most cases, there is only one valid offset for a local date-time.\n     * In the case of an overlap, when clocks are set back, there are two valid offsets.\n     * This method uses the earlier offset typically corresponding to 'summer'.\n     *\n     * In the case of a gap, when clocks jump forward, there is no valid offset.\n     * Instead, the local date-time is adjusted to be later by the length of the gap.\n     * For a typical one hour daylight savings change, the local date-time will be\n     * moved one hour later into the offset typically corresponding to 'summer'.\n     *\n     * This method exists primarily for writing test cases.\n     * Non test-code will typically use other methods to create an offset time.\n     * {@link LocalDateTime} has five additional convenience variants of the\n     * equivalent factory method taking fewer arguments.\n     * They are not provided here to reduce the footprint of the API.\n     *\n     * @param {number} year - the year to represent, from MIN_YEAR to MAX_YEAR\n     * @param {number} month - the month-of-year to represent, from 1 (January) to 12 (December)\n     * @param {number} dayOfMonth - the day-of-month to represent, from 1 to 31\n     * @param {number} hour - the hour-of-day to represent, from 0 to 23\n     * @param {number} minute - the minute-of-hour to represent, from 0 to 59\n     * @param {number} second - the second-of-minute to represent, from 0 to 59\n     * @param {number} nanoOfSecond - the nano-of-second to represent, from 0 to 999,999,999\n     * @param {ZoneId} zone - the time-zone, not null\n     * @return {ZonedDateTime } the offset date-time, not null\n     * @throws DateTimeException if the value of any field is out of range, or\n     *  if the day-of-month is invalid for the month-year\n     */\n    static of8(\n        year, month, dayOfMonth,\n        hour, minute, second, nanoOfSecond, zone) {\n        const dt = LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);\n        return ZonedDateTime.ofLocal(dt, zone, null);\n    }\n\n    /**\n     * Obtains an instance of {@link ZonedDateTime} from a local date-time\n     * using the preferred offset if possible.\n     *\n     * The local date-time is resolved to a single instant on the time-line.\n     * This is achieved by finding a valid offset from UTC/Greenwich for the local\n     * date-time as defined by the {@link ZoneRules} of the zone ID.\n     *\n     * In most cases, there is only one valid offset for a local date-time.\n     * In the case of an overlap, where clocks are set back, there are two valid offsets.\n     * If the preferred offset is one of the valid offsets then it is used.\n     * Otherwise the earlier valid offset is used, typically corresponding to 'summer'.\n     *\n     * In the case of a gap, where clocks jump forward, there is no valid offset.\n     * Instead, the local date-time is adjusted to be later by the length of the gap.\n     * For a typical one hour daylight savings change, the local date-time will be\n     * moved one hour later into the offset typically corresponding to 'summer'.\n     *\n     * @param {!LocalDateTime} localDateTime - the local date-time, not null\n     * @param {!ZoneId} zone - the time-zone, not null\n     * @param {ZoneOffset} preferredOffset - the zone offset, null if no preference\n     * @return {ZonedDateTime} the zoned date-time, not null\n     */\n    static ofLocal(localDateTime, zone, preferredOffset) {\n        requireNonNull(localDateTime, 'localDateTime');\n        requireNonNull(zone, 'zone');\n        if (zone instanceof ZoneOffset) {\n            return new ZonedDateTime(localDateTime, zone, zone);\n        }\n        let offset = null;\n        const rules = zone.rules();\n        const validOffsets = rules.validOffsets(localDateTime);\n        if (validOffsets.length === 1) {\n            offset = validOffsets[0];\n        } else if (validOffsets.length === 0) {\n            const trans = rules.transition(localDateTime);\n            localDateTime = localDateTime.plusSeconds(trans.duration().seconds());\n            offset = trans.offsetAfter();\n        } else {\n            if (preferredOffset != null &&\n                    validOffsets.some((validOffset) => {return validOffset.equals(preferredOffset);})) {\n                offset = preferredOffset;\n            } else {\n                offset = requireNonNull(validOffsets[0], 'offset');  // protect against bad ZoneRules\n            }\n        }\n\n        return new ZonedDateTime(localDateTime, offset, zone);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link ZonedDateTime.ofInstant}.\n     * if called with 2 args {@link ZonedDateTime.ofInstant2} is called\n     * otherwise {@link ZonedDateTime.ofInstant3}.\n     */\n    static ofInstant(){\n        if (arguments.length === 2){\n            return ZonedDateTime.ofInstant2.apply(this, arguments);\n        } else {\n            return ZonedDateTime.ofInstant3.apply(this, arguments);\n        }\n    }\n    /**\n     * Obtains an instance of {@link ZonedDateTime} from an {@link Instant}.\n     *\n     * This creates a zoned date-time with the same instant as that specified.\n     * Calling {@link toInstant} will return an instant equal to the one used here.\n     *\n     * Converting an instant to a zoned date-time is simple as there is only one valid\n     * offset for each instant.\n     *\n     * @param {!Instant} instant - the instant to create the date-time from, not null\n     * @param {!ZoneId} zone - the time-zone, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     * @throws DateTimeException if the result exceeds the supported range\n     */\n    static ofInstant2(instant, zone) {\n        requireNonNull(instant, 'instant');\n        requireNonNull(zone, 'zone');\n        return ZonedDateTime._create(instant.epochSecond(), instant.nano(), zone);\n    }\n\n    /**\n     * Obtains an instance of {@link ZonedDateTime} from the instant formed by combining\n     * the local date-time and offset.\n     *\n     * This creates a zoned date-time by combining the {@link LocalDateTime} and {@link ZoneOffset}.\n     * This combination uniquely specifies an instant without ambiguity.\n     *\n     * Converting an instant to a zoned date-time is simple as there is only one valid\n     * offset for each instant. If the valid offset is different to the offset specified,\n     * the the date-time and offset of the zoned date-time will differ from those specified.\n     *\n     * If the {@link ZoneId} to be used is a {@link ZoneOffset}, this method is equivalent\n     * to {@link of}.\n     *\n     * @param {LocalDateTime} localDateTime - the local date-time, not null\n     * @param {ZoneOffset} offset - the zone offset, not null\n     * @param {ZoneId} zone - the time-zone, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     */\n    static ofInstant3(localDateTime, offset, zone) {\n        requireNonNull(localDateTime, 'localDateTime');\n        requireNonNull(offset, 'offset');\n        requireNonNull(zone, 'zone');\n        return ZonedDateTime._create(localDateTime.toEpochSecond(offset), localDateTime.nano(), zone);\n    }\n\n    /**\n     * Obtains an instance of {@link ZonedDateTime} using seconds from the\n     * epoch of 1970-01-01T00:00:00Z.\n     *\n     * @param {number} epochSecond - the number of seconds from the epoch of 1970-01-01T00:00:00Z\n     * @param {number} nanoOfSecond - the nanosecond within the second, from 0 to 999,999,999\n     * @param {ZoneId} zone - the time-zone, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     * @throws DateTimeException if the result exceeds the supported range\n     */\n    static _create(epochSecond, nanoOfSecond, zone) {\n        const rules = zone.rules();\n        const instant = Instant.ofEpochSecond(epochSecond, nanoOfSecond);  // TODO: rules should be queryable by epochSeconds\n        const offset = rules.offset(instant);\n        const ldt = LocalDateTime.ofEpochSecond(epochSecond, nanoOfSecond, offset);\n        return new ZonedDateTime(ldt, offset, zone);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link ZonedDateTime} strictly validating the\n     * combination of local date-time, offset and zone ID.\n     *\n     * This creates a zoned date-time ensuring that the offset is valid for the\n     * local date-time according to the rules of the specified zone.\n     * If the offset is invalid, an exception is thrown.\n     *\n     * @param {LocalDateTime} localDateTime - the local date-time, not null\n     * @param {ZoneOffset} offset - the zone offset, not null\n     * @param {ZoneId} zone - the time-zone, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     */\n    static ofStrict(localDateTime, offset, zone) {\n        requireNonNull(localDateTime, 'localDateTime');\n        requireNonNull(offset, 'offset');\n        requireNonNull(zone, 'zone');\n        const rules = zone.rules();\n        if (rules.isValidOffset(localDateTime, offset) === false) {\n            const trans = rules.transition(localDateTime);\n            if (trans != null && trans.isGap()) {\n                // error message says daylight savings for simplicity\n                // even though there are other kinds of gaps\n                throw new DateTimeException(`LocalDateTime ${localDateTime \n                } does not exist in zone ${zone \n                } due to a gap in the local time-line, typically caused by daylight savings`);\n            }\n            throw new DateTimeException(`ZoneOffset \"${offset}\" is not valid for LocalDateTime \"${ \n                localDateTime}\" in zone \"${zone}\"`);\n        }\n        return new ZonedDateTime(localDateTime, offset, zone);\n    }\n\n    /**\n     * Obtains an instance of {@link ZonedDateTime} leniently, for advanced use cases,\n     * allowing any combination of local date-time, offset and zone ID.\n     *\n     * This creates a zoned date-time with no checks other than no nulls.\n     * This means that the resulting zoned date-time may have an offset that is in conflict\n     * with the zone ID.\n     *\n     * This method is intended for advanced use cases.\n     * For example, consider the case where a zoned date-time with valid fields is created\n     * and then stored in a database or serialization-based store. At some later point,\n     * the object is then re-loaded. However, between those points in time, the government\n     * that defined the time-zone has changed the rules, such that the originally stored\n     * local date-time now does not occur. This method can be used to create the object\n     * in an 'invalid' state, despite the change in rules.\n     *\n     * @param {LocalDateTime} localDateTime - the local date-time, not null\n     * @param {ZoneOffset} offset - the zone offset, not null\n     * @param {ZoneId} zone - the time-zone, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     */\n    static ofLenient(localDateTime, offset, zone) {\n        requireNonNull(localDateTime, 'localDateTime');\n        requireNonNull(offset, 'offset');\n        requireNonNull(zone, 'zone');\n        if (zone instanceof ZoneOffset && offset.equals(zone) === false) {\n            throw new IllegalArgumentException('ZoneId must match ZoneOffset');\n        }\n        return new ZonedDateTime(localDateTime, offset, zone);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link ZonedDateTime} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link ZonedDateTime}.\n     *\n     * The conversion will first obtain a {@link ZoneId}. It will then try to obtain an instant.\n     * If that fails it will try to obtain a local date-time.\n     * The zoned date time will either be a combination of {@link ZoneId} and instant,\n     * or {@link ZoneId} and local date-time.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used in queries via method reference, {@link ZonedDateTime::from}.\n     *\n     * @param {!TemporalAccessor} temporal - the temporal object to convert, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     * @throws DateTimeException if unable to convert to an {@link ZonedDateTime}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        if (temporal instanceof ZonedDateTime) {\n            return temporal;\n        }\n        const zone = ZoneId.from(temporal);\n        if (temporal.isSupported(ChronoField.INSTANT_SECONDS)) {\n            const zdt = ZonedDateTime._from(temporal, zone);\n            if(zdt != null) return zdt;\n        }\n        const ldt = LocalDateTime.from(temporal);\n        return ZonedDateTime.of2(ldt, zone);\n    }\n\n    static _from(temporal, zone){\n        try {\n            return ZonedDateTime.__from(temporal, zone);\n        } catch (ex) {\n            if(!(ex instanceof DateTimeException)) throw ex;\n            // ignore\n        }\n    }\n\n    static __from(temporal, zone){\n        const epochSecond = temporal.getLong(ChronoField.INSTANT_SECONDS);\n        const nanoOfSecond = temporal.get(ChronoField.NANO_OF_SECOND);\n        return ZonedDateTime._create(epochSecond, nanoOfSecond, zone);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link ZonedDateTime} from a text string such as\n     * `2007-12-03T10:15:30+01:00[Europe/Paris]`.\n     *\n     * The string must represent a valid date-time and is parsed using\n     * {@link org.threeten.bp.format.DateTimeFormatter#ISO_ZONED_DATE_TIME}.\n     *\n     * @param {!string} text - the text to parse such as '2007-12-03T10:15:30+01:00[Europe/Paris]', not null\n     * @param {!DateTimeFormatter} [formatter=DateTimeFormatter.ISO_ZONED_DATE_TIME] - the formatter to use\n     * @return {ZonedDateTime} the parsed zoned date-time, not null\n     * @throws DateTimeParseException if the text cannot be parsed\n     */\n    static parse(text, formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.parse(text, ZonedDateTime.FROM);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Constructor.\n     *\n     * @param {LocalDateTime} dateTime - the date-time, validated as not null\n     * @param {ZoneOffset} offset - the zone offset, validated as not null\n     * @param {ZoneUd} zone - the time-zone, validated as not null\n     * @private\n     */\n    constructor(dateTime, offset, zone) {\n        requireNonNull(dateTime, 'dateTime');\n        requireNonNull(offset, 'offset');\n        requireNonNull(zone, 'zone');\n\n        super();\n\n        /**\n         * The local date-time.\n         */\n        this._dateTime = dateTime;\n        /**\n         * The offset from UTC/Greenwich.\n         */\n        this._offset = offset;\n        /**\n         * The time-zone.\n         */\n        this._zone = zone;\n    }\n\n    /**\n     * Resolves the new local date-time using this zone ID, retaining the offset if possible.\n     *\n     * @param {LocalDateTime} newDateTime - the new local date-time, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     */\n    _resolveLocal(newDateTime) {\n        requireNonNull(newDateTime, 'newDateTime');\n        return ZonedDateTime.ofLocal(newDateTime, this._zone, this._offset);\n    }\n\n    /**\n     * Resolves the new local date-time using the offset to identify the instant.\n     *\n     * @param {LocalDateTime} newDateTime - the new local date-time, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     */\n    _resolveInstant(newDateTime) {\n        return ZonedDateTime.ofInstant3(newDateTime, this._offset, this._zone);\n    }\n\n    /**\n     * Resolves the offset into this zoned date-time.\n     *\n     * This ignores the offset, unless it can be used in an overlap.\n     *\n     * @param {ZoneOffset} offset - the offset, not null\n     * @return {ZonedDateTime} the zoned date-time, not null\n     */\n    _resolveOffset(offset) {\n        if (offset.equals(this._offset) === false && this._zone.rules().isValidOffset(this._dateTime, offset)) {\n            return new ZonedDateTime(this._dateTime, offset, this._zone);\n        }\n        return this;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this date-time can be queried for the specified field.\n     * If false, then calling {@link range} and {@link get} will throw an exception.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields are:\n     *\n     * * {@link NANO_OF_SECOND}\n     * * {@link NANO_OF_DAY}\n     * * {@link MICRO_OF_SECOND}\n     * * {@link MICRO_OF_DAY}\n     * * {@link MILLI_OF_SECOND}\n     * * {@link MILLI_OF_DAY}\n     * * {@link SECOND_OF_MINUTE}\n     * * {@link SECOND_OF_DAY}\n     * * {@link MINUTE_OF_HOUR}\n     * * {@link MINUTE_OF_DAY}\n     * * {@link HOUR_OF_AMPM}\n     * * {@link CLOCK_HOUR_OF_AMPM}\n     * * {@link HOUR_OF_DAY}\n     * * {@link CLOCK_HOUR_OF_DAY}\n     * * {@link AMPM_OF_DAY}\n     * * {@link DAY_OF_WEEK}\n     * * {@link ALIGNED_DAY_OF_WEEK_IN_MONTH}\n     * * {@link ALIGNED_DAY_OF_WEEK_IN_YEAR}\n     * * {@link DAY_OF_MONTH}\n     * * {@link DAY_OF_YEAR}\n     * * {@link EPOCH_DAY}\n     * * {@link ALIGNED_WEEK_OF_MONTH}\n     * * {@link ALIGNED_WEEK_OF_YEAR}\n     * * {@link MONTH_OF_YEAR}\n     * * {@link EPOCH_MONTH}\n     * * {@link YEAR_OF_ERA}\n     * * {@link YEAR}\n     * * {@link ERA}\n     * * {@link INSTANT_SECONDS}\n     * * {@link OFFSET_SECONDS}\n     *\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.isSupportedBy}\n     * passing `this` as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {TemporalField|TemporalUnit} fieldOrUnit - the field to check, null returns false\n     * @return {boolean} true if the field is supported on this date-time, false if not\n     */\n    isSupported(fieldOrUnit) {\n        if(fieldOrUnit instanceof ChronoField){\n            return true;\n        } else if (fieldOrUnit instanceof ChronoUnit) {\n            return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n        }\n        return (fieldOrUnit != null && fieldOrUnit.isSupportedBy(this));\n    }\n\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * The range object expresses the minimum and maximum valid values for a field.\n     * This date-time is used to enhance the accuracy of the returned range.\n     * If it is not possible to return the range, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return\n     * appropriate range instances.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n     * passing `this` as the argument.\n     * Whether the range can be obtained is determined by the field.\n     *\n     * @param {TemporalField} field - the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws DateTimeException if the range for the field cannot be obtained\n     */\n    range(field) {\n        if (field instanceof ChronoField) {\n            if (field === ChronoField.INSTANT_SECONDS || field === ChronoField.OFFSET_SECONDS) {\n                return field.range();\n            }\n            return this._dateTime.range(field);\n        }\n        return field.rangeRefinedBy(this);\n    }\n\n    /**\n     * Gets the value of the specified field from this date-time as an `int`.\n     *\n     * This queries this date-time for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this date-time, except {@link NANO_OF_DAY}, {@link MICRO_OF_DAY},\n     * {@link EPOCH_DAY}, {@link EPOCH_MONTH} and {@link INSTANT_SECONDS} which are too\n     * large to fit in an `int` and throw a {@link DateTimeException}.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {!TemporalField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    get(field) {\n        return this.getLong(field);\n    }\n\n    /**\n     * Gets the value of the specified field from this date-time as a `long`.\n     *\n     * This queries this date-time for the value for the specified field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this date-time.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {!TemporalField} field  the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    getLong(field) {\n        if (field instanceof ChronoField) {\n            switch (field) {\n                case ChronoField.INSTANT_SECONDS: return this.toEpochSecond();\n                case ChronoField.OFFSET_SECONDS: return this._offset.totalSeconds();\n            }\n            return this._dateTime.getLong(field);\n        }\n        requireNonNull(field, 'field');\n        return field.getFrom(this);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the zone offset, such as '+01:00'.\n     *\n     * This is the offset of the local date-time from UTC/Greenwich.\n     *\n     * @return {ZoneOffset}the zone offset, not null\n     */\n    offset() {\n        return this._offset;\n    }\n\n    /**\n     * Returns a copy of this date-time changing the zone offset to the\n     * earlier of the two valid offsets at a local time-line overlap.\n     *\n     * This method only has any effect when the local time-line overlaps, such as\n     * at an autumn daylight savings cutover. In this scenario, there are two\n     * valid offsets for the local date-time. Calling this method will return\n     * a zoned date-time with the earlier of the two selected.\n     *\n     * If this method is called when it is not an overlap, `this`\n     * is returned.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the earlier offset, not null\n     */\n    withEarlierOffsetAtOverlap() {\n        const trans = this._zone.rules().transition(this._dateTime);\n        if (trans != null && trans.isOverlap()) {\n            const earlierOffset = trans.offsetBefore();\n            if (earlierOffset.equals(this._offset) === false) {\n                return new ZonedDateTime(this._dateTime, earlierOffset, this._zone);\n            }\n        }\n        return this;\n    }\n\n    /**\n     * Returns a copy of this date-time changing the zone offset to the\n     * later of the two valid offsets at a local time-line overlap.\n     *\n     * This method only has any effect when the local time-line overlaps, such as\n     * at an autumn daylight savings cutover. In this scenario, there are two\n     * valid offsets for the local date-time. Calling this method will return\n     * a zoned date-time with the later of the two selected.\n     *\n     * If this method is called when it is not an overlap, `this`\n     * is returned.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the later offset, not null\n     */\n    withLaterOffsetAtOverlap() {\n        const trans = this._zone.rules().transition(this.toLocalDateTime());\n        if (trans != null) {\n            const laterOffset = trans.offsetAfter();\n            if (laterOffset.equals(this._offset) === false) {\n                return new ZonedDateTime(this._dateTime, laterOffset, this._zone);\n            }\n        }\n        return this;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the time-zone, such as 'Europe/Paris'.\n     *\n     * This returns the zone ID. This identifies the time-zone {@link ZoneRules}\n     * that determine when and how the offset from UTC/Greenwich changes.\n     *\n     * The zone ID may be same as the offset (see {@link getOffset}).\n     * If this is true, then any future calculations, such as addition or subtraction,\n     * have no complex edge cases due to time-zone rules.\n     * See also {@link withFixedOffsetZone}.\n     *\n     * @return {ZoneId} the time-zone, not null\n     */\n    zone() {\n        return this._zone;\n    }\n\n    /**\n     * Returns a copy of this date-time with a different time-zone,\n     * retaining the local date-time if possible.\n     *\n     * This method changes the time-zone and retains the local date-time.\n     * The local date-time is only changed if it is invalid for the new zone,\n     * determined using the same approach as\n     * {@link ofLocal}.\n     *\n     * To change the zone and adjust the local date-time,\n     * use {@link withZoneSameInstant}.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {ZoneId} zone - the time-zone to change to, not null\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the requested zone, not null\n     */\n    withZoneSameLocal(zone) {\n        requireNonNull(zone, 'zone');\n        return this._zone.equals(zone) ? this : ZonedDateTime.ofLocal(this._dateTime, zone, this._offset);\n    }\n\n    /**\n     * Returns a copy of this date-time with a different time-zone,\n     * retaining the instant.\n     *\n     * This method changes the time-zone and retains the instant.\n     * This normally results in a change to the local date-time.\n     *\n     * This method is based on retaining the same instant, thus gaps and overlaps\n     * in the local time-line have no effect on the result.\n     *\n     * To change the offset while keeping the local time,\n     * use {@link withZoneSameLocal}.\n     *\n     * @param {ZoneId} zone - the time-zone to change to, not null\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the requested zone, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    withZoneSameInstant(zone) {\n        requireNonNull(zone, 'zone');\n        return this._zone.equals(zone) ? this :\n            ZonedDateTime._create(this._dateTime.toEpochSecond(this._offset), this._dateTime.nano(), zone);\n    }\n\n    /**\n     * Returns a copy of this date-time with the zone ID set to the offset.\n     *\n     * This returns a zoned date-time where the zone ID is the same as {@link getOffset}.\n     * The local date-time, offset and instant of the result will be the same as in this date-time.\n     *\n     * Setting the date-time to a fixed single offset means that any future\n     * calculations, such as addition or subtraction, have no complex edge cases\n     * due to time-zone rules.\n     * This might also be useful when sending a zoned date-time across a network,\n     * as most protocols, such as ISO-8601, only handle offsets,\n     * and not region-based zone IDs.\n     *\n     * This is equivalent to {@link ZonedDateTime.of}.\n     *\n     * @return {ZonedDateTime} a {@link ZonedDateTime} with the zone ID set to the offset, not null\n     */\n    withFixedOffsetZone() {\n        return this._zone.equals(this._offset) ? this : new ZonedDateTime(this._dateTime, this._offset, this._offset);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the year field.\n     *\n     * This method returns the primitive `int` value for the year.\n     *\n     * The year returned by this method is proleptic as per {@link get}.\n     * To obtain the year-of-era, use `get(YEAR_OF_ERA)`.\n     *\n     * @return {number} the year, from MIN_YEAR to MAX_YEAR\n     */\n    year() {\n        return this._dateTime.year();\n    }\n\n    /**\n     * Gets the month-of-year field from 1 to 12.\n     *\n     * This method returns the month as an `int` from 1 to 12.\n     * Application code is frequently clearer if the enum {@link Month}\n     * is used by calling {@link getMonth}.\n     *\n     * @return {number} the month-of-year, from 1 to 12\n     * @see #month()\n     */\n    monthValue() {\n        return this._dateTime.monthValue();\n    }\n\n    /**\n     * Gets the month-of-year field using the {@link Month} enum.\n     *\n     * This method returns the enum {@link Month} for the month.\n     * This avoids confusion as to what `int` values mean.\n     * If you need access to the primitive `int` value, use {@link Month#getValue}.\n     *\n     * @return {Month} the month-of-year, not null\n     * @see #getMonthValue()\n     */\n    month() {\n        return this._dateTime.month();\n    }\n\n    /**\n     * Gets the day-of-month field.\n     *\n     * This method returns the primitive `int` value for the day-of-month.\n     *\n     * @return {number} the day-of-month, from 1 to 31\n     */\n    dayOfMonth() {\n        return this._dateTime.dayOfMonth();\n    }\n\n    /**\n     * Gets the day-of-year field.\n     *\n     * This method returns the primitive `int` value for the day-of-year.\n     *\n     * @return {number} the day-of-year, from 1 to 365, or 366 in a leap year\n     */\n    dayOfYear() {\n        return this._dateTime.dayOfYear();\n    }\n\n    /**\n     * Gets the day-of-week field, which is an enum {@link DayOfWeek}.\n     *\n     * This method returns the enum {@link DayOfWeek} for the day-of-week.\n     * This avoids confusion as to what `int` values mean.\n     * If you need access to the primitive `int` value, use {@link DayOfWeek#getValue}.\n     *\n     * Additional information can be obtained from the {@link DayOfWeek}.\n     * This includes textual names of the values.\n     *\n     * @return {DayOfWeek} the day-of-week, not null\n     */\n    dayOfWeek() {\n        return this._dateTime.dayOfWeek();\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the hour-of-day field.\n     *\n     * @return {number} the hour-of-day, from 0 to 23\n     */\n    hour() {\n        return this._dateTime.hour();\n    }\n\n    /**\n     * Gets the minute-of-hour field.\n     *\n     * @return {number} the minute-of-hour, from 0 to 59\n     */\n    minute() {\n        return this._dateTime.minute();\n    }\n\n    /**\n     * Gets the second-of-minute field.\n     *\n     * @return {number} the second-of-minute, from 0 to 59\n     */\n    second() {\n        return this._dateTime.second();\n    }\n\n    /**\n     * Gets the nano-of-second field.\n     *\n     * @return {number} the nano-of-second, from 0 to 999,999,999\n     */\n    nano() {\n        return this._dateTime.nano();\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns an adjusted copy of this date-time.\n     *\n     * This returns a new {@link ZonedDateTime}, based on this one, with the date-time adjusted.\n     * The adjustment takes place using the specified adjuster strategy object.\n     * Read the documentation of the adjuster to understand what adjustment will be made.\n     *\n     * A simple adjuster might simply set the one of the fields, such as the year field.\n     * A more complex adjuster might set the date to the last day of the month.\n     * A selection of common adjustments is provided in {@link TemporalAdjusters}.\n     * These include finding the 'last day of the month' and 'next Wednesday'.\n     * Key date-time classes also implement the {@link TemporalAdjuster} interface,\n     * such as {@link Month} and {@link MonthDay}.\n     * The adjuster is responsible for handling special cases, such as the varying\n     * lengths of month and leap years.\n     *\n     * For example this code returns a date on the last day of July:\n     * <pre>\n     *  import static org.threeten.bp.Month.*;\n     *  import static org.threeten.bp.temporal.Adjusters.*;\n     *\n     *  result = zonedDateTime.with(JULY).with(lastDayOfMonth());\n     * </pre>\n     *\n     * The classes {@link LocalDate} and {@link LocalTime} implement {@link TemporalAdjuster},\n     * thus this method can be used to change the date, time or offset:\n     * <pre>\n     *  result = zonedDateTime.with(date);\n     *  result = zonedDateTime.with(time);\n     * </pre>\n     *\n     * {@link ZoneOffset} also implements {@link TemporalAdjuster} however it is less likely\n     * that setting the offset will have the effect you expect. When an offset is passed in,\n     * the local date-time is combined with the new offset to form an {@link Instant}.\n     * The instant and original zone are then used to create the result.\n     * This algorithm means that it is quite likely that the output has a different offset\n     * to the specified offset. It will however work correctly when passing in the offset\n     * applicable for the instant of the zoned date-time, and will work correctly if passing\n     * one of the two valid offsets during a daylight savings overlap when the same local time\n     * occurs twice.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalAdjuster#adjustInto} method on the\n     * specified adjuster passing `this` as the argument.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalAdjuster} adjuster - the adjuster to use, not null\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on `this` with the adjustment made, not null\n     * @throws DateTimeException if the adjustment cannot be made\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    _withAdjuster(adjuster) {\n        // optimizations\n        if (adjuster instanceof LocalDate) {\n            return this._resolveLocal(LocalDateTime.of(adjuster, this._dateTime.toLocalTime()));\n        } else if (adjuster instanceof LocalTime) {\n            return this._resolveLocal(LocalDateTime.of(this._dateTime.toLocalDate(), adjuster));\n        } else if (adjuster instanceof LocalDateTime) {\n            return this._resolveLocal(adjuster);\n        } else if (adjuster instanceof Instant) {\n            const instant = adjuster;\n            return ZonedDateTime._create(instant.epochSecond(), instant.nano(), this._zone);\n        } else if (adjuster instanceof ZoneOffset) {\n            return this._resolveOffset(adjuster);\n        }\n        return super._withAdjuster(adjuster);\n    }\n\n    /**\n     * Returns a copy of this date-time with the specified field set to a new value.\n     *\n     * This returns a {@link ZonedDateTime}, based on this one, with the value\n     * for the specified field changed.\n     * This can be used to change any supported field, such as the year, month or day-of-month.\n     * If it is not possible to set the value, because the field is not supported or for\n     * some other reason, an exception is thrown.\n     *\n     * In some cases, changing the specified field can cause the resulting date-time to become invalid,\n     * such as changing the month from 31st January to February would make the day-of-month invalid.\n     * In cases like this, the field is responsible for resolving the date. Typically it will choose\n     * the previous valid date, which would be the last valid day of February in this example.\n     *\n     * If the field is a {@link ChronoField} then the adjustment is implemented here.\n     *\n     * The {@link INSTANT_SECONDS} field will return a date-time with the specified instant.\n     * The zone and nano-of-second are unchanged.\n     * The result will have an offset derived from the new instant and original zone.\n     * If the new instant value is outside the valid range then a {@link DateTimeException} will be thrown.\n     *\n     * The {@link OFFSET_SECONDS} field will typically be ignored.\n     * The offset of a {@link ZonedDateTime} is controlled primarily by the time-zone.\n     * As such, changing the offset does not generally make sense, because there is only\n     * one valid offset for the local date-time and zone.\n     * If the zoned date-time is in a daylight savings overlap, then the offset is used\n     * to switch between the two valid offsets. In all other cases, the offset is ignored.\n     * If the new offset value is outside the valid range then a {@link DateTimeException} will be thrown.\n     *\n     * The other supported fields (see {@link isSupported}) will behave as in {@link LocalDateTime#with}.\n     * The zone is not part of the calculation and will be unchanged.\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * All other {@link ChronoField} instances will throw an {@link UnsupportedTemporalTypeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.adjustInto}\n     * passing `this` as the argument. In this case, the field determines\n     * whether and how to adjust the instant.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalField} field - the field to set in the result, not null\n     * @param {number} newValue - the new value of the field in the result\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on `this` with the specified field set, not null\n     * @throws DateTimeException if the field cannot be set\n     * @throws UnsupportedTemporalTypeException if the field is not supported\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    _withField(field, newValue) {\n        if (field instanceof ChronoField) {\n            switch (field) {\n                case ChronoField.INSTANT_SECONDS: return ZonedDateTime._create(newValue, this.nano(), this._zone);\n                case ChronoField.OFFSET_SECONDS: {\n                    const offset = ZoneOffset.ofTotalSeconds(field.checkValidIntValue(newValue));\n                    return this._resolveOffset(offset);\n                }\n            }\n            return this._resolveLocal(this._dateTime.with(field, newValue));\n        }\n        return field.adjustInto(this, newValue);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the year value altered.\n     *\n     * This operates on the local time-line,\n     * changing the year (see {@link LocalDateTime#withYear}) of the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} year - the year to set in the result, from MIN_YEAR to MAX_YEAR\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the requested year, not null\n     * @throws DateTimeException if the year value is invalid\n     */\n    withYear(year) {\n        return this._resolveLocal(this._dateTime.withYear(year));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the month-of-year value altered.\n     *\n     * This operates on the local time-line,\n     * changing the month (see {@link LocalDateTime#withMonth}) of the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} month - the month-of-year to set in the result, from 1 (January) to 12 (December)\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the requested month, not null\n     * @throws DateTimeException if the month-of-year value is invalid\n     */\n    withMonth(month) {\n        return this._resolveLocal(this._dateTime.withMonth(month));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the day-of-month value altered.\n     *\n     * This operates on the local time-line,\n     * changing the day-of-month (see {@link LocalDateTime#withDayOfMonth}) of the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} dayOfMonth - the day-of-month to set in the result, from 1 to 28-31\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the requested day, not null\n     * @throws DateTimeException if the day-of-month value is invalid\n     * @throws DateTimeException if the day-of-month is invalid for the month-year\n     */\n    withDayOfMonth(dayOfMonth) {\n        return this._resolveLocal(this._dateTime.withDayOfMonth(dayOfMonth));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the day-of-year altered.\n     *\n     * This operates on the local time-line,\n     * changing the day-of-year (see {@link LocalDateTime#withDayOfYear}) of the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} dayOfYear - the day-of-year to set in the result, from 1 to 365-366\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date with the requested day, not null\n     * @throws DateTimeException if the day-of-year value is invalid\n     * @throws DateTimeException if the day-of-year is invalid for the year\n     */\n    withDayOfYear(dayOfYear) {\n        return this._resolveLocal(this._dateTime.withDayOfYear(dayOfYear));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the hour-of-day value altered.\n     *\n     * This operates on the local time-line,\n     * changing the time (see {@link LocalDateTime#withHour}) of the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} hour - the hour-of-day to set in the result, from 0 to 23\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the requested hour, not null\n     * @throws DateTimeException if the hour value is invalid\n     */\n    withHour(hour) {\n        return this._resolveLocal(this._dateTime.withHour(hour));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the minute-of-hour value altered.\n     *\n     * This operates on the local time-line,\n     * changing the time (see {@link LocalDateTime#withMinute}) of the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} minute - the minute-of-hour to set in the result, from 0 to 59\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the requested minute, not null\n     * @throws DateTimeException if the minute value is invalid\n     */\n    withMinute(minute) {\n        return this._resolveLocal(this._dateTime.withMinute(minute));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the second-of-minute value altered.\n     *\n     * This operates on the local time-line,\n     * changing the time (see {@link LocalDateTime#withSecond}) of the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} second - the second-of-minute to set in the result, from 0 to 59\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the requested second, not null\n     * @throws DateTimeException if the second value is invalid\n     */\n    withSecond(second) {\n        return this._resolveLocal(this._dateTime.withSecond(second));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the nano-of-second value altered.\n     *\n     * This operates on the local time-line,\n     * changing the time (see {@link LocalDateTime#withNano}) of the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} nanoOfSecond - the nano-of-second to set in the result, from 0 to 999,999,999\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the requested nanosecond, not null\n     * @throws DateTimeException if the nano value is invalid\n     */\n    withNano(nanoOfSecond) {\n        return this._resolveLocal(this._dateTime.withNano(nanoOfSecond));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the time truncated.\n     *\n     * Truncation returns a copy of the original date-time with fields\n     * smaller than the specified unit set to zero.\n     * For example, truncating with {@link ChronoUnit#MINUTES}\n     * will set the second-of-minute and nano-of-second field to zero.\n     *\n     * The unit must have a duration (see {@link TemporalUnit#getDuration})\n     * that divides into the length of a standard day without remainder.\n     * This includes all supplied time units on {@link ChronoUnit} and\n     * {@link ChronoUnit#DAYS}. Other units throw an exception.\n     *\n     * This operates on the local time-line, truncating the underlying local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalUnit} unit - the unit to truncate to, not null\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the time truncated, not null\n     * @throws DateTimeException if unable to truncate\n     */\n    truncatedTo(unit) {\n        return this._resolveLocal(this._dateTime.truncatedTo(unit));\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns a copy of this date-time with the specified period added.\n     *\n     * This method returns a new date-time based on this date-time with the specified period added.\n     * This can be used to add any period that is defined by a unit, for example to add years, months or days.\n     * The unit is responsible for the details of the calculation, including the resolution\n     * of any edge cases in the calculation.\n     *\n     * The calculation for date and time units differ.\n     *\n     * Date units operate on the local time-line.\n     * The period is first added to the local date-time, then converted back\n     * to a zoned date-time using the zone ID.\n     * The conversion uses {@link ofLocal}\n     * with the offset before the addition.\n     *\n     * Time units operate on the instant time-line.\n     * The period is first added to the local date-time, then converted back to\n     * a zoned date-time using the zone ID.\n     * The conversion uses {@link ofInstant}\n     * with the offset before the addition.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} amountToAdd - the amount of the unit to add to the result, may be negative\n     * @param {TemporalUnit} unit - the unit of the period to add, not null\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the specified period added, not null\n     * @throws DateTimeException if the unit cannot be added to this type\n     */\n    _plusUnit(amountToAdd, unit) {\n        if (unit instanceof ChronoUnit) {\n            if (unit.isDateBased()) {\n                return this._resolveLocal(this._dateTime.plus(amountToAdd, unit));\n            } else {\n                return this._resolveInstant(this._dateTime.plus(amountToAdd, unit));\n            }\n        }\n        requireNonNull(unit, 'unit');\n        return unit.addTo(this, amountToAdd);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in years added.\n     *\n     * This operates on the local time-line, adding years to the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} years - the years to add, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the years added, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    plusYears(years) {\n        return this._resolveLocal(this._dateTime.plusYears(years));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in months added.\n     *\n     * This operates on the local time-line, adding months to the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} months - the months to add, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the months added, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    plusMonths(months) {\n        return this._resolveLocal(this._dateTime.plusMonths(months));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in weeks added.\n     *\n     * This operates on the local time-line, adding weeks to the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} weeks - the weeks to add, may be negative\n     * @return {ZonedDateTime}a {@link ZonedDateTime} based on this date-time with the weeks added, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    plusWeeks(weeks) {\n        return this._resolveLocal(this._dateTime.plusWeeks(weeks));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in days added.\n     *\n     * This operates on the local time-line, adding days to the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} days - the days to add, may be negative\n     * @return {ZonedDateTime}a {@link ZonedDateTime} based on this date-time with the days added, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    plusDays(days) {\n        return this._resolveLocal(this._dateTime.plusDays(days));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in hours added.\n     *\n     * This operates on the instant time-line, such that adding one hour will\n     * always be a duration of one hour later.\n     * This may cause the local date-time to change by an amount other than one hour.\n     * Note that this is a different approach to that used by days, months and years,\n     * thus adding one day is not the same as adding 24 hours.\n     *\n     * For example, consider a time-zone where the spring DST cutover means that the\n     * local times 01:00 to 01:59 occur twice changing from offset +02:00 to +01:00.\n     *\n     * * Adding one hour to 00:30+02:00 will result in 01:30+02:00\n     * * Adding one hour to 01:30+02:00 will result in 01:30+01:00\n     * * Adding one hour to 01:30+01:00 will result in 02:30+01:00\n     * * Adding three hours to 00:30+02:00 will result in 02:30+01:00\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} hours - the hours to add, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the hours added, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    plusHours(hours) {\n        return this._resolveInstant(this._dateTime.plusHours(hours));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in minutes added.\n     *\n     * This operates on the instant time-line, such that adding one minute will\n     * always be a duration of one minute later.\n     * This may cause the local date-time to change by an amount other than one minute.\n     * Note that this is a different approach to that used by days, months and years.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} minutes - the minutes to add, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the minutes added, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    plusMinutes(minutes) {\n        return this._resolveInstant(this._dateTime.plusMinutes(minutes));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in seconds added.\n     *\n     * This operates on the instant time-line, such that adding one second will\n     * always be a duration of one second later.\n     * This may cause the local date-time to change by an amount other than one second.\n     * Note that this is a different approach to that used by days, months and years.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} seconds - the seconds to add, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the seconds added, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    plusSeconds(seconds) {\n        return this._resolveInstant(this._dateTime.plusSeconds(seconds));\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in nanoseconds added.\n     *\n     * This operates on the instant time-line, such that adding one nano will\n     * always be a duration of one nano later.\n     * This may cause the local date-time to change by an amount other than one nano.\n     * Note that this is a different approach to that used by days, months and years.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} nanos - the nanos to add, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the nanoseconds added, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    plusNanos(nanos) {\n        return this._resolveInstant(this._dateTime.plusNanos(nanos));\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns a copy of this date-time with the specified period subtracted.\n     *\n     * This method returns a new date-time based on this date-time with the specified period subtracted.\n     * This can be used to subtract any period that is defined by a unit, for example to subtract years, months or days.\n     * The unit is responsible for the details of the calculation, including the resolution\n     * of any edge cases in the calculation.\n     *\n     * The calculation for date and time units differ.\n     *\n     * Date units operate on the local time-line.\n     * The period is first subtracted from the local date-time, then converted back\n     * to a zoned date-time using the zone ID.\n     * The conversion uses {@link ofLocal}\n     * with the offset before the subtraction.\n     *\n     * Time units operate on the instant time-line.\n     * The period is first subtracted from the local date-time, then converted back to\n     * a zoned date-time using the zone ID.\n     * The conversion uses {@link ofInstant}\n     * with the offset before the subtraction.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} amountToSubtract - the amount of the unit to subtract from the result, may be negative\n     * @param {TemporalUnit} unit - the unit of the period to subtract, not null\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the specified period subtracted, not null\n     * @throws DateTimeException if the unit cannot be added to this type\n     */\n    _minusUnit(amountToSubtract, unit) {\n        return this._plusUnit(-1 * amountToSubtract, unit);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in years subtracted.\n     *\n     * This operates on the local time-line, subtracting years from the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} years - the years to subtract, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the years subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    minusYears(years) {\n        return this.plusYears(-1 * years);\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in months subtracted.\n     *\n     * This operates on the local time-line, subtracting months from the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} months - the months to subtract, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the months subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    minusMonths(months) {\n        return this.plusMonths(-1 * months);\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in weeks subtracted.\n     *\n     * This operates on the local time-line, subtracting weeks from the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} weeks - the weeks to subtract, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the weeks subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    minusWeeks(weeks) {\n        return this.plusWeeks(-1 * weeks);\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in days subtracted.\n     *\n     * This operates on the local time-line, subtracting days from the local date-time.\n     * This is then converted back to a {@link ZonedDateTime}, using the zone ID\n     * to obtain the offset.\n     *\n     * When converting back to {@link ZonedDateTime}, if the local date-time is in an overlap,\n     * then the offset will be retained if possible, otherwise the earlier offset will be used.\n     * If in a gap, the local date-time will be adjusted forward by the length of the gap.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} days - the days to subtract, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the days subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    minusDays(days) {\n        return this.plusDays(-1 * days);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in hours subtracted.\n     *\n     * This operates on the instant time-line, such that subtracting one hour will\n     * always be a duration of one hour earlier.\n     * This may cause the local date-time to change by an amount other than one hour.\n     * Note that this is a different approach to that used by days, months and years,\n     * thus subtracting one day is not the same as adding 24 hours.\n     *\n     * For example, consider a time-zone where the spring DST cutover means that the\n     * local times 01:00 to 01:59 occur twice changing from offset +02:00 to +01:00.\n     *\n     * * Subtracting one hour from 02:30+01:00 will result in 01:30+02:00\n     * * Subtracting one hour from 01:30+01:00 will result in 01:30+02:00\n     * * Subtracting one hour from 01:30+02:00 will result in 00:30+01:00\n     * * Subtracting three hours from 02:30+01:00 will result in 00:30+02:00\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} hours - the hours to subtract, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the hours subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    minusHours(hours) {\n        return this.plusHours(-1 * hours);\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in minutes subtracted.\n     *\n     * This operates on the instant time-line, such that subtracting one minute will\n     * always be a duration of one minute earlier.\n     * This may cause the local date-time to change by an amount other than one minute.\n     * Note that this is a different approach to that used by days, months and years.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} minutes - the minutes to subtract, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the minutes subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    minusMinutes(minutes) {\n        return this.plusMinutes(-1 * minutes);\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in seconds subtracted.\n     *\n     * This operates on the instant time-line, such that subtracting one second will\n     * always be a duration of one second earlier.\n     * This may cause the local date-time to change by an amount other than one second.\n     * Note that this is a different approach to that used by days, months and years.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} seconds - the seconds to subtract, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the seconds subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    minusSeconds(seconds) {\n        return this.plusSeconds(-1 * seconds);\n    }\n\n    /**\n     * Returns a copy of this {@link ZonedDateTime} with the specified period in nanoseconds subtracted.\n     *\n     * This operates on the instant time-line, such that subtracting one nano will\n     * always be a duration of one nano earlier.\n     * This may cause the local date-time to change by an amount other than one nano.\n     * Note that this is a different approach to that used by days, months and years.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} nanos - the nanos to subtract, may be negative\n     * @return {ZonedDateTime} a {@link ZonedDateTime} based on this date-time with the nanoseconds subtracted, not null\n     * @throws DateTimeException if the result exceeds the supported date range\n     */\n    minusNanos(nanos) {\n        return this.plusNanos(-1 * nanos);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Queries this date-time using the specified query.\n     *\n     * This queries this date-time using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing `this` as the argument.\n     *\n     * @param {TemporalQuery} query - the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws DateTimeException if unable to query (defined by the query)\n     * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        if (query === TemporalQueries.localDate()) {\n            return this.toLocalDate();\n        }\n        requireNonNull(query, 'query');\n        return super.query(query);\n    }\n\n    /**\n     * Calculates the period between this date-time and another date-time in\n     * terms of the specified unit.\n     *\n     * This calculates the period between two date-times in terms of a single unit.\n     * The start and end points are `this` and the specified date-time.\n     * The result will be negative if the end is before the start.\n     * For example, the period in days between two date-times can be calculated\n     * using {@link startDateTime.until}.\n     *\n     * The {@link Temporal} passed to this method must be a {@link ZonedDateTime}.\n     * If the time-zone differs between the two zoned date-times, the specified\n     * end date-time is normalized to have the same zone as this date-time.\n     *\n     * The calculation returns a whole number, representing the number of\n     * complete units between the two date-times.\n     * For example, the period in months between 2012-06-15T00:00Z and 2012-08-14T23:59Z\n     * will only be one month as it is one minute short of two months.\n     *\n     * This method operates in association with {@link TemporalUnit#between}.\n     * The result of this method is a `long` representing the amount of\n     * the specified unit. By contrast, the result of {@link between} is an\n     * object that can be used directly in addition/subtraction:\n     * <pre>\n     *   long period = start.until(end, MONTHS);   // this method\n     *   dateTime.plus(MONTHS.between(start, end));      // use in plus/minus\n     * </pre>\n     *\n     * The calculation is implemented in this method for {@link ChronoUnit}.\n     * The units {@link NANOS}, {@link MICROS}, {@link MILLIS}, {@link SECONDS},\n     * {@link MINUTES}, {@link HOURS} and {@link HALF_DAYS}, {@link DAYS},\n     * {@link WEEKS}, {@link MONTHS}, {@link YEARS}, {@link DECADES},\n     * {@link CENTURIES}, {@link MILLENNIA} and {@link ERAS} are supported.\n     * Other {@link ChronoUnit} values will throw an exception.\n     *\n     * The calculation for date and time units differ.\n     *\n     * Date units operate on the local time-line, using the local date-time.\n     * For example, the period from noon on day 1 to noon the following day\n     * in days will always be counted as exactly one day, irrespective of whether\n     * there was a daylight savings change or not.\n     *\n     * Time units operate on the instant time-line.\n     * The calculation effectively converts both zoned date-times to instants\n     * and then calculates the period between the instants.\n     * For example, the period from noon on day 1 to noon the following day\n     * in hours may be 23, 24 or 25 hours (or some other amount) depending on\n     * whether there was a daylight savings change or not.\n     *\n     * If the unit is not a {@link ChronoUnit}, then the result of this method\n     * is obtained by invoking {@link TemporalUnit.between}\n     * passing `this` as the first argument and the input temporal as\n     * the second argument.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} endExclusive  the end date-time, which is converted to a {@link ZonedDateTime}, not null\n     * @param {TemporalUnit} unit  the unit to measure the period in, not null\n     * @return {number} the amount of the period between this date-time and the end date-time\n     * @throws DateTimeException if the period cannot be calculated\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    until(endExclusive, unit) {\n        let end = ZonedDateTime.from(endExclusive);\n        if (unit instanceof ChronoUnit) {\n            end = end.withZoneSameInstant(this._zone);\n            if (unit.isDateBased()) {\n                return this._dateTime.until(end._dateTime, unit);\n            } else {\n                const difference = this._offset.totalSeconds() - end._offset.totalSeconds();\n                const adjustedEnd = end._dateTime.plusSeconds(difference);\n                return this._dateTime.until(adjustedEnd, unit);\n            }\n        }\n        return unit.between(this, end);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the {@link LocalDateTime} part of this date-time.\n     *\n     * This returns a {@link LocalDateTime} with the same year, month, day and time\n     * as this date-time.\n     *\n     * @return {LocalDateTime} the local date-time part of this date-time, not null\n     */\n    toLocalDateTime() {\n        return this._dateTime;\n    }\n\n    /**\n     * Gets the {@link LocalDate} part of this date-time.\n     *\n     * This returns a {@link LocalDate} with the same year, month and day\n     * as this date-time.\n     *\n     * @return {LocalDate} the date part of this date-time, not null\n     */\n    toLocalDate() {\n        return this._dateTime.toLocalDate();\n    }\n\n    /**\n     * Gets the {@link LocalTime} part of this date-time.\n     *\n     * This returns a {@link LocalTime} with the same hour, minute, second and\n     * nanosecond as this date-time.\n     *\n     * @return {LocalTime} the time part of this date-time, not null\n     */\n    toLocalTime() {\n        return this._dateTime.toLocalTime();\n    }\n\n    /**\n     * Converts this date-time to an {@link OffsetDateTime}.\n     *\n     * This creates an offset date-time using the local date-time and offset.\n     * The zone ID is ignored.\n     *\n     * @return {OffsetDateTime} an offset date-time representing the same local date-time and offset, not null\n     */\n    toOffsetDateTime() {\n        return OffsetDateTime.of(this._dateTime, this._offset);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this date-time is equal to another date-time.\n     *\n     * The comparison is based on the offset date-time and the zone.\n     * Only objects of type {@link ZonedDateTime} are compared, other types return false.\n     *\n     * @param {*} other  the object to check, null returns false\n     * @return {boolean} true if this is equal to the other date-time\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof ZonedDateTime) {\n            return this._dateTime.equals(other._dateTime) &&\n                this._offset.equals(other._offset) &&\n                this._zone.equals(other._zone);\n        }\n        return false;\n    }\n\n    /**\n     * A hash code for this date-time.\n     *\n     * @return {number} a suitable hash code\n     */\n    hashCode() {\n        return MathUtil.hashCode(this._dateTime.hashCode(), this._offset.hashCode(), this._zone.hashCode());\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Outputs this date-time as a string, such as\n     * `2007-12-03T10:15:30+01:00[Europe/Paris]`.\n     *\n     * The format consists of the {@link LocalDateTime} followed by the {@link ZoneOffset}.\n     * If the {@link ZoneId} is not the same as the offset, then the ID is output.\n     * The output is compatible with ISO-8601 if the offset and ID are the same.\n     *\n     * @return {string} a string representation of this date-time, not null\n     */\n    toString() {\n        let str = this._dateTime.toString() + this._offset.toString();\n        if (this._offset !== this._zone) {\n            str += `[${this._zone.toString()}]`;\n        }\n        return str;\n    }\n\n    /**\n     *\n     * @return {string} same as {@link ZonedDateTime.toString}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n    /**\n     * Outputs this date-time as a string using the formatter.\n     *\n     * @param {DateTimeFormatter} formatter  the formatter to use, not null\n     * @return {string} the formatted date-time string, not null\n     * @throws DateTimeException if an error occurs during printing\n     */\n    format(formatter) {\n        return super.format(formatter);\n    }\n\n}\n\nexport function _init(){\n    ZonedDateTime.FROM = createTemporalQuery('ZonedDateTime.FROM', (temporal) => {\n        return ZonedDateTime.from(temporal);\n    });\n}\n","/**\n * @copyright (c) 2016-present, Philipp Thürwächter & Pattrick Hüper  & js-joda contributors\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { Temporal } from './temporal/Temporal';\nimport { Clock } from './Clock';\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\nimport { Instant } from './Instant';\nimport { IsoChronology } from './chrono/IsoChronology';\nimport { LocalDateTime } from './LocalDateTime';\nimport { LocalDate } from './LocalDate';\nimport { LocalTime } from './LocalTime';\nimport { MathUtil } from './MathUtil';\nimport { OffsetTime } from './OffsetTime';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { ZonedDateTime } from './ZonedDateTime';\nimport { ZoneId } from './ZoneId';\nimport { ZoneOffset } from './ZoneOffset';\nimport { DateTimeException, IllegalArgumentException } from './errors';\n\nimport { createTemporalQuery } from './temporal/TemporalQuery';\nimport { requireInstance, requireNonNull } from './assert';\n\n/**\n * A date-time with an offset from UTC/Greenwich in the ISO-8601 calendar system,\n * such as 2007-12-23T10:15:30+01:00.\n */\nexport class OffsetDateTime extends Temporal {\n    /**\n     * @param {TemporaroAccessor} temporal\n     * @return {OffsetDateTime}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        if (temporal instanceof OffsetDateTime) {\n            return temporal;\n        }\n        try {\n            const offset = ZoneOffset.from(temporal);\n            try {\n                const ldt = LocalDateTime.from(temporal);\n                return OffsetDateTime.of(ldt, offset);\n            } catch (_) {\n                const instant = Instant.from(temporal);\n                return OffsetDateTime.ofInstant(instant, offset);\n            }\n        } catch (ex) {\n            throw new DateTimeException(`Unable to obtain OffsetDateTime TemporalAccessor: ${temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`);\n        }\n    }\n\n    /**\n     * @param {Clock|ZoneId|null} clockOrZone\n     * @return {OffsetDateTime}\n     */\n    static now(clockOrZone) {\n        if (arguments.length === 0) {\n            return OffsetDateTime.now(Clock.systemDefaultZone());\n        } else {\n            requireNonNull(clockOrZone, 'clockOrZone');\n            if (clockOrZone instanceof ZoneId) {\n                return OffsetDateTime.now(Clock.system(clockOrZone));\n            } else if (clockOrZone instanceof Clock) {\n                const now = clockOrZone.instant(); // called once\n                return OffsetDateTime.ofInstant(now, clockOrZone.zone().rules().offset(now));\n            } else {\n                throw new IllegalArgumentException('clockOrZone must be an instance of ZoneId or Clock');\n            }\n        }\n    }\n\n    /**\n     * @return {OffsetDateTime}\n     */\n    static of() {\n        if (arguments.length <= 2) {\n            return OffsetDateTime.ofDateTime.apply(this, arguments);\n        } else if (arguments.length === 3) {\n            return OffsetDateTime.ofDateAndTime.apply(this, arguments);\n        } else {\n            return OffsetDateTime.ofNumbers.apply(this, arguments);\n        }\n    }\n\n    static ofDateTime(dateTime, offset) {\n        return new OffsetDateTime(dateTime, offset);\n    }\n\n    static ofDateAndTime(date, time, offset) {\n        const dt = LocalDateTime.of(date, time);\n        return new OffsetDateTime(dt, offset);\n    }\n\n    static ofNumbers(year, month, dayOfMonth, hour=0, minute=0, second=0, nanoOfSecond=0, offset) {\n        const dt = LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);\n        return new OffsetDateTime(dt, offset);\n    }\n\n    /**\n     * @param {Instant} instant\n     * @param {ZoneId} zone\n     * @return {OffsetDateTime}\n     */\n    static ofInstant(instant,  zone){\n        requireNonNull(instant, 'instant');\n        requireNonNull(zone, 'zone');\n        const rules = zone.rules();\n        const offset = rules.offset(instant);\n        const ldt = LocalDateTime.ofEpochSecond(instant.epochSecond(), instant.nano(), offset);\n        return new OffsetDateTime(ldt, offset);\n    }\n\n    /**\n     * @param {string} text\n     * @param {DateTimeFormatter|undefined} formatter\n     * @return {OffsetTime}\n     */\n    static parse(text, formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME){\n        requireNonNull(formatter, 'formatter');\n        return formatter.parse(text, OffsetDateTime.FROM);\n    }\n\n    // TODO: Need java.util.Comparater interface.\n    // static timeLineOrder() {\n    //\n    // }\n\n    //-----------------------------------------------------------------------\n\n\n    /**\n     * @param {LocalDateTime} dateTime\n     * @param {ZoneOffset} offset\n     * @private\n     */\n    constructor(dateTime, offset) {\n        super();\n        requireNonNull(dateTime, 'dateTime');\n        requireInstance(dateTime, LocalDateTime, 'dateTime');\n        requireNonNull(offset, 'offset');\n        requireInstance(offset, ZoneOffset, 'offset');\n        this._dateTime = dateTime;\n        this._offset = offset;\n    }\n\n    /**\n     *\n     * @param {Temporal} temporal\n     * @return {Temporal}\n     */\n    adjustInto(temporal) {\n        return temporal\n            .with(ChronoField.EPOCH_DAY, this.toLocalDate().toEpochDay())\n            .with(ChronoField.NANO_OF_DAY, this.toLocalTime().toNanoOfDay())\n            .with(ChronoField.OFFSET_SECONDS, this.offset().totalSeconds());\n    }\n\n    until(endExclusive, unit) {\n        let end = OffsetDateTime.from(endExclusive);\n        if (unit instanceof ChronoUnit) {\n            end = end.withOffsetSameInstant(this._offset);\n            return this._dateTime.until(end._dateTime, unit);\n        }\n        return unit.between(this, end);\n    }\n\n    /**\n     * @param {ZoneId} zone\n     * @return {ZonedDateTime}\n     */\n    atZoneSameInstant(zone) {\n        return ZonedDateTime.ofInstant(this._dateTime, this._offset, zone);\n    }\n\n    /**\n     * @param {ZoneId} zone\n     * @return {ZonedDateTime}\n     */\n    atZoneSimilarLocal(zone) {\n        return ZonedDateTime.ofLocal(this._dateTime, zone, this._offset);\n    }\n\n    query(query) {\n        requireNonNull(query, 'query');\n        if (query === TemporalQueries.chronology()) {\n            return IsoChronology.INSTANCE;\n        } else if (query === TemporalQueries.precision()) {\n            return ChronoUnit.NANOS;\n        } else if (query === TemporalQueries.offset() || query === TemporalQueries.zone()) {\n            return this.offset();\n        } else if (query === TemporalQueries.localDate()) {\n            return this.toLocalDate();\n        } else if (query === TemporalQueries.localTime()) {\n            return this.toLocalTime();\n        } else if (query === TemporalQueries.zoneId()) {\n            return null;\n        }\n        return super.query(query);\n    }\n\n    get(field) {\n        if (field instanceof ChronoField) {\n            switch (field) {\n                case ChronoField.INSTANT_SECONDS: throw new DateTimeException(`Field too large for an int: ${field}`);\n                case ChronoField.OFFSET_SECONDS: return this.offset().totalSeconds();\n            }\n            return this._dateTime.get(field);\n        }\n        return super.get(field);\n    }\n\n    getLong(field) {\n        if (field instanceof ChronoField) {\n            switch (field) {\n                case ChronoField.INSTANT_SECONDS: return this.toEpochSecond();\n                case ChronoField.OFFSET_SECONDS: return this.offset().totalSeconds();\n            }\n            return this._dateTime.getLong(field);\n        }\n        return field.getFrom(this);\n    }\n\n    /**\n     * @return {ZoneOffset}\n     */\n    offset() {\n        return this._offset;\n    }\n\n    /**\n     * @return {number} the year, from MIN_YEAR to MAX_YEAR\n     */\n    year() {\n        return this._dateTime.year();\n    }\n\n    /**\n     * @return {number} the month-of-year, from 1 to 12\n     * @see #month()\n     */\n    monthValue() {\n        return this._dateTime.monthValue();\n    }\n\n    /**\n     * @return {{number} }the month-of-year, not null\n     * @see #monthValue()\n     */\n    month() {\n        return this._dateTime.month();\n    }\n\n    /**\n     * @return {number} the day-of-month, from 1 to 31\n     */\n    dayOfMonth() {\n        return this._dateTime.dayOfMonth();\n    }\n\n    /**\n     * @return {number} the day-of-year, from 1 to 365, or 366 in a leap year\n     */\n    dayOfYear() {\n        return this._dateTime.dayOfYear();\n    }\n\n    /**\n     * @return {number} the day-of-week, not null\n     */\n    dayOfWeek() {\n        return this._dateTime.dayOfWeek();\n    }\n\n    /**\n     * @return {number} the hour-of-day, from 0 to 23\n     */\n    hour() {\n        return this._dateTime.hour();\n    }\n\n    /**\n     * @return {number} the minute-of-hour, from 0 to 59\n     */\n    minute() {\n        return this._dateTime.minute();\n    }\n\n    /**\n     * @return {number} the second-of-minute, from 0 to 59\n     */\n    second() {\n        return this._dateTime.second();\n    }\n\n    /**\n     * @return {number} the nano-of-second, from 0 to 999,999,999\n     */\n    nano() {\n        return this._dateTime.nano();\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * @return {LocalDateTime}the local date-time part of this date-time, not null\n     */\n    toLocalDateTime() {\n        return this._dateTime;\n    }\n\n    /**\n     * @return {LocalDate} the date part of this date-time, not null\n     */\n    toLocalDate() {\n        return this._dateTime.toLocalDate();\n    }\n\n    /**\n     * @return {LocalTime} the time part of this date-time, not null\n     */\n    toLocalTime() {\n        return this._dateTime.toLocalTime();\n    }\n\n    /**\n     * @return {OffsetTime} an OffsetTime representing the time and offset, not null\n     */\n    toOffsetTime() {\n        return OffsetTime.of(this._dateTime.toLocalTime(), this._offset);\n    }\n\n    /**\n     * @return {ZonedDateTime}a zoned date-time representing the same local date-time and offset, not null\n     */\n    toZonedDateTime() {\n        return ZonedDateTime.of(this._dateTime, this._offset);\n    }\n\n    /**\n     * @return {Instant} an {@code Instant} representing the same instant, not null\n     */\n    toInstant() {\n        return this._dateTime.toInstant(this._offset);\n    }\n\n    /**\n     * @return {number} the number of seconds from the epoch of 1970-01-01T00:00:00Z\n     */\n    toEpochSecond() {\n        return this._dateTime.toEpochSecond(this._offset);\n    }\n\n    isSupported(fieldOrUnit) {\n        if (fieldOrUnit instanceof ChronoField) {\n            return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n        }\n        if (fieldOrUnit instanceof ChronoUnit) {\n            return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n        }\n        return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n    }\n\n    range(field) {\n        if (field instanceof ChronoField) {\n            if (field === ChronoField.INSTANT_SECONDS || field === ChronoField.OFFSET_SECONDS) {\n                return field.range();\n            }\n            return this._dateTime.range(field);\n        }\n        return field.rangeRefinedBy(this);\n    }\n\n    _withAdjuster(adjuster) {\n        requireNonNull(adjuster);\n        // optimizations\n        if (adjuster instanceof LocalDate || adjuster instanceof LocalTime || adjuster instanceof LocalDateTime) {\n            return this._withDateTimeOffset(this._dateTime.with(adjuster), this._offset);\n        } else if (adjuster instanceof Instant) {\n            return OffsetDateTime.ofInstant(adjuster, this._offset);\n        } else if (adjuster instanceof ZoneOffset) {\n            return this._withDateTimeOffset(this._dateTime, adjuster);\n        } else if (adjuster instanceof OffsetDateTime) {\n            return adjuster;\n        }\n        return adjuster.adjustInto(this);\n    }\n\n    _withField(field, newValue) {\n        requireNonNull(field);\n        if (field instanceof ChronoField) {\n            const f = field;\n            switch (f) {\n                case ChronoField.INSTANT_SECONDS: return OffsetDateTime.ofInstant(Instant.ofEpochSecond(newValue, this.nano()), this._offset);\n                case ChronoField.OFFSET_SECONDS: {\n                    return this._withDateTimeOffset(this._dateTime, ZoneOffset.ofTotalSeconds(f.checkValidIntValue(newValue)));\n                }\n            }\n            return this._withDateTimeOffset(this._dateTime.with(field, newValue), this._offset);\n        }\n        return field.adjustInto(this, newValue);\n    }\n\n    _withDateTimeOffset(dateTime, offset) {\n        if (this._dateTime === dateTime && this._offset.equals(offset)) {\n            return this;\n        }\n        return new OffsetDateTime(dateTime, offset);\n    }\n\n    /**\n     * @param {int} year\n     * @return {OffsetDateTime}\n     */\n    withYear(year) {\n        return this._withDateTimeOffset(this._dateTime.withYear(year), this._offset);\n    }\n\n    /**\n     * @param {int} month\n     * @return {OffsetDateTime}\n     */\n    withMonth(month) {\n        return this._withDateTimeOffset(this._dateTime.withMonth(month), this._offset);\n    }\n\n    /**\n     * @param {int} dayOfMonth\n     * @return {OffsetDateTime}\n     */\n    withDayOfMonth(dayOfMonth) {\n        return this._withDateTimeOffset(this._dateTime.withDayOfMonth(dayOfMonth), this._offset);\n    }\n\n    /**\n     * @param {int} dayOfYear\n     * @return {OffsetDateTime}\n     */\n    withDayOfYear(dayOfYear) {\n        return this._withDateTimeOffset(this._dateTime.withDayOfYear(dayOfYear), this._offset);\n    }\n\n    /**\n     * @param {int} hour\n     * @return {OffsetDateTime}\n     */\n    withHour(hour) {\n        return this._withDateTimeOffset(this._dateTime.withHour(hour), this._offset);\n    }\n\n    /**\n     * @param {int} minute\n     * @return {OffsetDateTime}\n     */\n    withMinute(minute) {\n        return this._withDateTimeOffset(this._dateTime.withMinute(minute), this._offset);\n    }\n\n    /**\n     * @param {int} second\n     * @return {OffsetDateTime}\n     */\n    withSecond(second) {\n        return this._withDateTimeOffset(this._dateTime.withSecond(second), this._offset);\n    }\n\n    /**\n     * @param {int} nanoOfSecond\n     * @return {OffsetDateTime}\n     */\n    withNano(nanoOfSecond) {\n        return this._withDateTimeOffset(this._dateTime.withNano(nanoOfSecond), this._offset);\n    }\n\n    /**\n     * @param {ZoneOffset} offset\n     * @return {OffsetDateTime}\n     */\n    withOffsetSameLocal(offset) {\n        requireNonNull(offset, 'offset');\n        return this._withDateTimeOffset(this._dateTime, offset);\n    }\n\n    /**\n     * @param {ZoneOffset} offset\n     * @return {OffsetDateTime}\n     */\n    withOffsetSameInstant(offset) {\n        requireNonNull(offset, 'offset');\n        if (offset.equals(this._offset)) {\n            return this;\n        }\n        const difference = offset.totalSeconds() - this._offset.totalSeconds();\n        const adjusted = this._dateTime.plusSeconds(difference);\n        return new OffsetDateTime(adjusted, offset);\n    }\n\n    /**\n     * @param {TemporalUnit} unit\n     * @return {OffsetDateTime}\n     */\n    truncatedTo(unit) {\n        return this._withDateTimeOffset(this._dateTime.truncatedTo(unit), this._offset);\n    }\n\n    _plusAmount(amount) {\n        requireNonNull(amount, 'amount');\n        return amount.addTo(this);\n    }\n\n    _plusUnit(amountToAdd, unit) {\n        if (unit instanceof ChronoUnit) {\n            return this._withDateTimeOffset(this._dateTime.plus(amountToAdd, unit), this._offset);\n        }\n        return unit.addTo(this, amountToAdd);\n    }\n\n    /**\n     * @param {int} years\n     * @return {OffsetTime}\n     */\n    plusYears(years) {\n        return this._withDateTimeOffset(this._dateTime.plusYears(years), this._offset);\n    }\n\n    /**\n     * @param {int} months\n     * @return {OffsetTime}\n     */\n    plusMonths(months) {\n        return this._withDateTimeOffset(this._dateTime.plusMonths(months), this._offset);\n    }\n\n    /**\n     * @param {int} weeks\n     * @return {OffsetTime}\n     */\n    plusWeeks(weeks) {\n        return this._withDateTimeOffset(this._dateTime.plusWeeks(weeks), this._offset);\n    }\n\n    /**\n     * @param {int} days\n     * @return {OffsetTime}\n     */\n    plusDays(days) {\n        return this._withDateTimeOffset(this._dateTime.plusDays(days), this._offset);\n    }\n\n    /**\n     * @param {int} hours\n     * @return {OffsetTime}\n     */\n    plusHours(hours) {\n        return this._withDateTimeOffset(this._dateTime.plusHours(hours), this._offset);\n    }\n\n    /**\n     * @param {int} minutes\n     * @return {OffsetTime}\n     */\n    plusMinutes(minutes) {\n        return this._withDateTimeOffset(this._dateTime.plusMinutes(minutes), this._offset);\n    }\n\n    /**\n     * @param {int} seconds\n     * @return {OffsetTime}\n     */\n    plusSeconds(seconds) {\n        return this._withDateTimeOffset(this._dateTime.plusSeconds(seconds), this._offset);\n    }\n\n    /**\n     * @param {int} nanos\n     * @return {OffsetTime}\n     */\n    plusNanos(nanos) {\n        return this._withDateTimeOffset(this._dateTime.plusNanos(nanos), this._offset);\n    }\n\n    _minusAmount(amount) {\n        requireNonNull(amount);\n        return amount.subtractFrom(this);\n    }\n\n    _minusUnit(amountToSubtract, unit) {\n        return this.plus(-1 * amountToSubtract, unit);\n    }\n\n    /**\n     * @param {int} years\n     * @return {OffsetTime}\n     */\n    minusYears(years) {\n        return this._withDateTimeOffset(this._dateTime.minusYears(years), this._offset);\n    }\n\n    /**\n     * @param {int} months\n     * @return {OffsetTime}\n     */\n    minusMonths(months) {\n        return this._withDateTimeOffset(this._dateTime.minusMonths(months), this._offset);\n    }\n\n    /**\n     * @param {int} weeks\n     * @return {OffsetTime}\n     */\n    minusWeeks(weeks) {\n        return this._withDateTimeOffset(this._dateTime.minusWeeks(weeks), this._offset);\n    }\n\n    /**\n     * @param {int} days\n     * @return {OffsetTime}\n     */\n    minusDays(days) {\n        return this._withDateTimeOffset(this._dateTime.minusDays(days), this._offset);\n    }\n\n    /**\n     * @param {int} hours\n     * @return {OffsetTime}\n     */\n    minusHours(hours) {\n        return this._withDateTimeOffset(this._dateTime.minusHours(hours), this._offset);\n    }\n\n    /**\n     * @param {int} minutes\n     * @return {OffsetTime}\n     */\n    minusMinutes(minutes) {\n        return this._withDateTimeOffset(this._dateTime.minusMinutes(minutes), this._offset);\n    }\n\n    /**\n     * @param {int} seconds\n     * @return {OffsetTime}\n     */\n    minusSeconds(seconds) {\n        return this._withDateTimeOffset(this._dateTime.minusSeconds(seconds), this._offset);\n    }\n\n    /**\n     * @param {int} nanos\n     * @return {OffsetTime}\n     */\n    minusNanos(nanos) {\n        return this._withDateTimeOffset(this._dateTime.minusNanos(nanos), this._offset);\n    }\n\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, OffsetDateTime, 'other');\n        if (this.offset().equals(other.offset())) {\n            return this.toLocalDateTime().compareTo(other.toLocalDateTime());\n        }\n        let cmp = MathUtil.compareNumbers(this.toEpochSecond(), other.toEpochSecond());\n        if (cmp === 0) {\n            cmp = this.toLocalTime().nano() - other.toLocalTime().nano();\n            if (cmp === 0) {\n                cmp = this.toLocalDateTime().compareTo(other.toLocalDateTime());\n            }\n        }\n        return cmp;\n    }\n\n    /**\n     * @param {OffsetDateTime} other\n     * @return {boolean}\n     */\n    isAfter(other) {\n        requireNonNull(other, 'other');\n        const thisEpochSec = this.toEpochSecond();\n        const otherEpochSec = other.toEpochSecond();\n        return thisEpochSec > otherEpochSec || (thisEpochSec === otherEpochSec && this.toLocalTime().nano() > other.toLocalTime().nano());\n    }\n\n    /**\n     * @param {OffsetDateTime} other\n     * @return {boolean}\n     */\n    isBefore(other) {\n        requireNonNull(other, 'other');\n        const thisEpochSec = this.toEpochSecond();\n        const otherEpochSec = other.toEpochSecond();\n        return thisEpochSec < otherEpochSec || (thisEpochSec === otherEpochSec && this.toLocalTime().nano() < other.toLocalTime().nano());\n    }\n\n    /**\n     * @param {OffsetDateTime} other\n     * @return {boolean}\n     */\n    isEqual(other) {\n        requireNonNull(other, 'other');\n        return this.toEpochSecond() === other.toEpochSecond() && this.toLocalTime().nano() === other.toLocalTime().nano();\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * @param other\n     * @return {boolean}\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof OffsetDateTime) {\n            return this._dateTime.equals(other._dateTime) && this._offset.equals(other._offset);\n        }\n        return false;\n    }\n\n    /**\n     * @return {number}\n     */\n    hashCode() {\n        return this._dateTime.hashCode() ^ this._offset.hashCode();\n    }\n\n    toString() {\n        return this._dateTime.toString() + this._offset.toString();\n    }\n\n    /**\n     *\n     * @return {string} same as {@link LocalDateTime.toString}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n    /**\n     * @param {DateTimeFormatter} formatter\n     * @return {string}\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.format(this);\n    }\n}\n\n\nexport function _init() {\n    OffsetDateTime.MIN = LocalDateTime.MIN.atOffset(ZoneOffset.MAX);\n\n    OffsetDateTime.MAX = LocalDateTime.MAX.atOffset(ZoneOffset.MIN);\n\n    OffsetDateTime.FROM = createTemporalQuery('OffsetDateTime.FROM', (temporal) => {\n        return OffsetDateTime.from(temporal);\n    });\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { assert, requireNonNull, requireInstance } from './assert';\n\nimport { MathUtil } from './MathUtil';\nimport { DateTimeException, UnsupportedTemporalTypeException, NullPointerException, IllegalArgumentException } from './errors';\n\nimport { IsoChronology } from './chrono/IsoChronology';\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { ChronoLocalDate } from './chrono/ChronoLocalDate';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { createTemporalQuery } from './temporal/TemporalQuery';\nimport { ValueRange } from './temporal/ValueRange';\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\n\nimport { Clock } from './Clock';\nimport { DayOfWeek } from './DayOfWeek';\nimport { OffsetDateTime } from './OffsetDateTime';\nimport { OffsetTime } from './OffsetTime';\nimport { Month } from './Month';\nimport { Period } from './Period';\nimport { YearConstants } from './YearConstants';\nimport { LocalTime } from './LocalTime';\nimport { LocalDateTime } from './LocalDateTime';\nimport { Year } from './Year';\nimport { ZoneId } from './ZoneId';\nimport { ZoneOffset } from './ZoneOffset';\nimport { ZonedDateTime } from './ZonedDateTime';\n\n/**\n * The number of days in a 400 year cycle.\n */\nconst  DAYS_PER_CYCLE = 146097;\n\n/**\n* The number of days from year zero to year 1970.\n* There are five 400 year cycles from year zero to 2000.\n* There are 7 leap years from 1970 to 2000.\n*/\nconst  DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5) - (30 * 365 + 7);\n\n/**\n * A date without a time-zone in the ISO-8601 calendar system,\n * such as 2007-12-03.\n *\n * LocalDate is an immutable date-time object that represents a date,\n * often viewed as year-month-day. Other date fields, such as day-of-year,\n * day-of-week and week-of-year, can also be accessed.\n * For example, the value \"2nd October 2007\" can be stored in a LocalDate.\n *\n * This class does not store or represent a time or time-zone.\n * Instead, it is a description of the date, as used for birthdays.\n * It cannot represent an instant on the time-line without additional information\n * such as an offset or time-zone.\n *\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. It is equivalent to the proleptic Gregorian calendar\n * system, in which today's rules for leap years are applied for all time.\n * For most applications written today, the ISO-8601 rules are entirely suitable.\n * However, any application that makes use of historical dates, and requires them\n * to be accurate will find the ISO-8601 approach unsuitable.\n *\n * ### Static properties of Class {@link LocalDate}\n *\n * LocalDate.MIN = LocalDate.of(Year.MIN_VALUE, 1, 1);\n *\n * The minimum supported {@link LocalDate}\n * This could be used by an application as a \"far past\" date.\n *\n * LocalDate.MAX = LocalDate.of(Year.MAX_VALUE, 12, 31);\n *\n * The maximum supported {@link LocalDate}\n * This could be used by an application as a \"far future\" date.\n *\n * LocalDate.EPOCH_0\n *\n * The date at epoch day 0, that is 1970-01-01.\n */\n\nexport class LocalDate extends ChronoLocalDate{\n\n    /**\n     * Obtains the current date from the system clock in the default time-zone or\n     * if specified, the current date from the specified clock or\n     * if argument is a ZoneId this will query a clock with the specified ZoneId.\n     *\n     * This will query the specified clock to obtain the current date - today.\n     * Using this method allows the use of an alternate clock for testing.\n     *\n     * @param {Clock|ZoneId} [clockOrZone=Clock.systemDefaultZone()] - the clock or zone to use,\n     * if null, the system clock and default time-zone is used.\n     * @return {LocalDate} the current date, not null\n     */\n    static now(clockOrZone) {\n        let clock;\n        if(clockOrZone == null){\n            clock = Clock.systemDefaultZone();\n        } else if(clockOrZone instanceof ZoneId){\n            clock = Clock.system(clockOrZone);\n        } else {\n            clock = clockOrZone;\n        }\n        return LocalDate.ofInstant(clock.instant(), clock.zone());\n    }\n\n    /**\n     * obtain a LocalDate from an Instant in the specified time-zone or, if null\n     * in the system default time-zone\n     *\n     * @param {!Instant} instant\n     * @param {ZoneId} [zone=ZoneId.systemDefault()], defaults to ZoneId.systemDefault()\n     * @returns {LocalDate} the current date, not null\n     */\n    static ofInstant(instant, zone=ZoneId.systemDefault()){\n        requireNonNull(instant, 'instant');\n        const offset = zone.rules().offset(instant);\n        const epochSec = instant.epochSecond() + offset.totalSeconds();\n        const epochDay = MathUtil.floorDiv(epochSec, LocalTime.SECONDS_PER_DAY);\n        return LocalDate.ofEpochDay(epochDay);\n    }\n\n    /**\n     * Obtains an instance of {@link LocalDate} from a year, month and day.\n     *\n     * This returns a {@link LocalDate} with the specified year, month and day-of-month.\n     * The day must be valid for the year and month, otherwise an exception will be thrown.\n     *\n     * @param {!number} year - the year to represent, from {@link Year.MIN_VALUE} to {@link Year.MAX_VALUE}\n     * @param {!(Month|Number)} month - the month-of-year to represent, from 1 (January) to 12 (December)\n     * @param {!number} dayOfMonth - the day-of-month to represent, from 1 to 31\n     * @return {LocalDate} the local date, not null\n     * @throws {DateTimeException} if the value of any field is out of range,\n     *  or if the day-of-month is invalid for the month-year\n     */\n    static of(year, month, dayOfMonth) {\n        return new LocalDate(year, month, dayOfMonth);\n    }\n\n    /**\n     * Obtains an instance of {@link LocalDate} from a year and day-of-year.\n     *\n     * This returns a {@link LocalDate} with the specified year and day-of-year.\n     * The day-of-year must be valid for the year, otherwise an exception will be thrown.\n     *\n     * @param {!number} year - the year to represent, from {@link Year.MIN_VALUE} to {@link Year.MAX_VALUE}\n     * @param {!number} dayOfYear - the day-of-year to represent, from 1 to 366\n     * @return {LocalDate} the local date, not null\n     * @throws {DateTimeException} if the value of any field is out of range,\n     *  or if the day-of-year is invalid for the year\n     */\n    static ofYearDay(year, dayOfYear) {\n        ChronoField.YEAR.checkValidValue(year);\n        //TODO: ChronoField.DAY_OF_YEAR.checkValidValue(dayOfYear);\n        const leap = IsoChronology.isLeapYear(year);\n        if (dayOfYear === 366 && leap === false) {\n            assert(false, `Invalid date 'DayOfYear 366' as '${year}' is not a leap year`, DateTimeException);\n        }\n        let moy = Month.of(Math.floor((dayOfYear - 1) / 31 + 1));\n        const monthEnd = moy.firstDayOfYear(leap) + moy.length(leap) - 1;\n        if (dayOfYear > monthEnd) {\n            moy = moy.plus(1);\n        }\n        const dom = dayOfYear - moy.firstDayOfYear(leap) + 1;\n        return new LocalDate(year, moy.value(), dom);\n    }\n\n    /**\n     * Obtains an instance of LocalDate from the epoch day count.\n     *\n     * This returns a LocalDate with the specified epoch-day.\n     * The {@link ChronoField.EPOCH_DAY} is a simple incrementing count\n     * of days where day 0 is 1970-01-01. Negative numbers represent earlier days.\n     *\n     * @param {number} [epochDay=0] - the Epoch Day to convert, based on the epoch 1970-01-01\n     * @return {LocalDate} the local date, not null\n     * @throws {AssertionError} if the epoch days exceeds the supported date range\n     */\n    static ofEpochDay(epochDay=0) {\n        let adjust, adjustCycles, doyEst, yearEst, zeroDay;\n        zeroDay = epochDay + DAYS_0000_TO_1970;\n        zeroDay -= 60;\n        adjust = 0;\n        if (zeroDay < 0) {\n            adjustCycles = MathUtil.intDiv(zeroDay + 1, DAYS_PER_CYCLE) - 1;\n            adjust = adjustCycles * 400;\n            zeroDay += -adjustCycles * DAYS_PER_CYCLE;\n        }\n        yearEst = MathUtil.intDiv(400 * zeroDay + 591, DAYS_PER_CYCLE);\n        doyEst = zeroDay - (365 * yearEst + MathUtil.intDiv(yearEst, 4) - MathUtil.intDiv(yearEst, 100) + MathUtil.intDiv(yearEst, 400));\n        if (doyEst < 0) {\n            yearEst--;\n            doyEst = zeroDay - (365 * yearEst + MathUtil.intDiv(yearEst, 4) - MathUtil.intDiv(yearEst, 100) + MathUtil.intDiv(yearEst, 400));\n        }\n        yearEst += adjust;\n        const marchDoy0 = doyEst;\n        const marchMonth0 = MathUtil.intDiv(marchDoy0 * 5 + 2, 153);\n        const month = (marchMonth0 + 2) % 12 + 1;\n        const dom = marchDoy0 - MathUtil.intDiv(marchMonth0 * 306 + 5, 10) + 1;\n        yearEst += MathUtil.intDiv(marchMonth0, 10);\n        const year = yearEst;\n        return new LocalDate(year, month, dom);\n    }\n\n    /**\n     * Obtains an instance of {@link LocalDate} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link LocalDate}.\n     *\n     * The conversion uses the {@link TemporalQueries.localDate} query, which relies\n     * on extracting the {@link ChronoField.EPOCH_DAY} field.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used as a query via method reference, {@link LocalDate::from}.\n     *\n     * @param {!TemporalAccessor} temporal - the temporal object to convert, not null\n     * @return {LocalDate} the local date, not null\n     * @throws {DateTimeException} if unable to convert to a {@link LocalDate}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        const date = temporal.query(TemporalQueries.localDate());\n        if (date == null) {\n            throw new DateTimeException(\n                `Unable to obtain LocalDate from TemporalAccessor: ${temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`);\n        }\n        return date;\n    }\n\n    /**\n     * Obtains an instance of {@link LocalDate} from a text string using a specific formatter.\n     *\n     * The text is parsed using the formatter, returning a date.\n     *\n     * @param {!string} text - the text to parse, not null\n     * @param {DateTimeFormatter} [formatter=DateTimeFormatter.ISO_LOCAL_DATE] - the formatter to use, default is\n     * {@link DateTimeFormatter.ISO_LOCAL_DATE}\n     * @return {LocalDate} the parsed local date, not null\n     * @throws {DateTimeParseException} if the text cannot be parsed\n     */\n    static parse(text, formatter = DateTimeFormatter.ISO_LOCAL_DATE){\n        assert(formatter != null, 'formatter', NullPointerException);\n        return formatter.parse(text, LocalDate.FROM);\n    }\n\n    /**\n     * Resolves the date, resolving days past the end of month.\n     *\n     * @param {!number} year - the year to represent, validated from {@link Year.MIN_VALUE} to {@link Year.MAX_VALUE}\n     * @param {!number} month - the month-of-year to represent, validated from 1 to 12\n     * @param {!number} day - the day-of-month to represent, validated from 1 to 31\n     * @return {LocalDate} resolved date, not null\n     */\n    static _resolvePreviousValid(year, month, day) {\n        switch (month) {\n            case 2:\n                day = Math.min(day, IsoChronology.isLeapYear(year) ? 29 : 28);\n                break;\n            case 4:\n            case 6:\n            case 9:\n            case 11:\n                day = Math.min(day, 30);\n                break;\n        }\n        return LocalDate.of(year, month, day);\n    }\n\n    /**\n     * Do not call the constructor directly, use the of*() factories instead like {@link LocalDate.of}\n     *\n     * @param {!number} year\n     * @param {!(Month|number)} month\n     * @param {!number} dayOfMonth\n     * @private\n     */\n    constructor(year, month, dayOfMonth){\n        super();\n        requireNonNull(year, 'year');\n        requireNonNull(month, 'month');\n        requireNonNull(dayOfMonth, 'dayOfMonth');\n\n        if (month instanceof Month) {\n            month = month.value();\n        }\n        this._year = MathUtil.safeToInt(year);\n        this._month = MathUtil.safeToInt(month);\n        this._day = MathUtil.safeToInt(dayOfMonth);\n        LocalDate._validate(this._year, this._month, this._day);\n    }\n\n\n    /**\n     *\n     * @param {!number} year\n     * @param {!number} month\n     * @param {!number} dayOfMonth\n     * @throws {DateTimeException} if date values are invalid\n     * @private\n     */\n    static _validate(year, month, dayOfMonth) {\n        let dom;\n        ChronoField.YEAR.checkValidValue(year);\n        ChronoField.MONTH_OF_YEAR.checkValidValue(month);\n        ChronoField.DAY_OF_MONTH.checkValidValue(dayOfMonth);\n\n        if (dayOfMonth > 28) {\n            dom = 31;\n            switch (month) {\n                case 2:\n                    dom = IsoChronology.isLeapYear(year) ? 29 : 28;\n                    break;\n                case 4:\n                case 6:\n                case 9:\n                case 11:\n                    dom = 30;\n            }\n            if (dayOfMonth > dom) {\n                if (dayOfMonth === 29) {\n                    assert(false, `Invalid date 'February 29' as '${year}' is not a leap year`, DateTimeException);\n                } else {\n                    assert(false, `Invalid date '${year}' '${month}' '${dayOfMonth}'`, DateTimeException);\n                }\n            }\n        }\n    }\n\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this date can be queried for the specified field.\n     * If false, then calling the {@link LocalDate.range} range and\n     * {@link LocalDate.get} get methods will throw an exception.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The {@link LocalDate.isSupported} supported fields will return valid\n     * values based on this date-time.\n     * The supported fields are:\n     *\n     * * {@link ChronoField.DAY_OF_WEEK}\n     * * {@link ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH}\n     * * {@link ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR}\n     * * {@link ChronoField.DAY_OF_MONTH}\n     * * {@link ChronoField.DAY_OF_YEAR}\n     * * {@link ChronoField.EPOCH_DAY}\n     * * {@link ChronoField.ALIGNED_WEEK_OF_MONTH}\n     * * {@link ChronoField.ALIGNED_WEEK_OF_YEAR}\n     * * {@link ChronoField.MONTH_OF_YEAR}\n     * * {@link ChronoField.EPOCH_MONTH}\n     * * {@link ChronoField.YEAR_OF_ERA}\n     * * {@link ChronoField.YEAR}\n     * * {@link ChronoField.ERA}\n     *\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.isSupportedBy}\n     * passing this as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {TemporalField} field  the field to check, null returns false\n     * @return {boolean} true if the field is supported on this date, false if not\n     */\n    isSupported(field) {\n        return super.isSupported(field);\n    }\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * The range object expresses the minimum and maximum valid values for a field.\n     * This date is used to enhance the accuracy of the returned range.\n     * If it is not possible to return the range, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The {@link LocalDate.isSupported} supported fields will return\n     * appropriate range instances.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n     * passing this as the argument.\n     * Whether the range can be obtained is determined by the field.\n     *\n     * @param {TemporalField} field  the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws {DateTimeException} if the range for the field cannot be obtained\n     */\n    range(field) {\n        if (field instanceof ChronoField) {\n            if (field.isDateBased()) {\n                switch (field) {\n                    case ChronoField.DAY_OF_MONTH: return ValueRange.of(1, this.lengthOfMonth());\n                    case ChronoField.DAY_OF_YEAR: return ValueRange.of(1, this.lengthOfYear());\n                    case ChronoField.ALIGNED_WEEK_OF_MONTH: return ValueRange.of(1, this.month() === Month.FEBRUARY && this.isLeapYear() === false ? 4 : 5);\n                    case ChronoField.YEAR_OF_ERA:\n                        return (this._year <= 0 ? ValueRange.of(1, Year.MAX_VALUE + 1) : ValueRange.of(1, Year.MAX_VALUE));\n                }\n                return field.range();\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.rangeRefinedBy(this);\n    }\n\n    /**\n     * Gets the value of the specified field from this date as an `int`.\n     *\n     * This queries this date for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The {@link LocalDate.isSupported} supported fields will return valid\n     * values based on this date, except {@link ChronoField.EPOCH_DAY} and {@link ChronoField.EPOCH_MONTH}\n     * which are too large to fit in an `int` and throw a {@link DateTimeException}.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing this as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {!TemporalField} field  the field to get, not null\n     * @return the value for the field\n     * @throws {DateTimeException} if a value for the field cannot be obtained\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    get(field) {\n        return this.getLong(field);\n    }\n\n    /**\n     * see {LocalDate.get}, get and getLong are identical in javascript, because we are only limited by\n     * {@link MathUtil.MIN_SAFE_INTEGER}/ {@link MathUtil.MAX_SAFE_INTEGER}\n     *\n     * @param {!TemporalField} field\n     * @returns {*}\n     */\n    getLong(field) {\n        assert(field != null, '', NullPointerException);\n        if (field instanceof ChronoField) {\n            return this._get0(field);\n        }\n        return field.getFrom(this);\n    }\n\n    /**\n     * TODO tests are missing for the ALIGNED_* ChronoFields\n     *\n     * @param {!TemporalField} field\n     * @returns {*}\n     * @private\n     */\n    _get0(field) {\n        switch (field) {\n            case ChronoField.DAY_OF_WEEK: return this.dayOfWeek().value();\n            case ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH: return MathUtil.intMod((this._day - 1), 7) + 1;\n            case ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR: return MathUtil.intMod((this.dayOfYear() - 1), 7) + 1;\n            case ChronoField.DAY_OF_MONTH: return this._day;\n            case ChronoField.DAY_OF_YEAR: return this.dayOfYear();\n            case ChronoField.EPOCH_DAY: return this.toEpochDay();\n            case ChronoField.ALIGNED_WEEK_OF_MONTH: return MathUtil.intDiv((this._day - 1), 7) + 1;\n            case ChronoField.ALIGNED_WEEK_OF_YEAR: return MathUtil.intDiv((this.dayOfYear() - 1), 7) + 1;\n            case ChronoField.MONTH_OF_YEAR: return this._month;\n            case ChronoField.PROLEPTIC_MONTH: return this._prolepticMonth();\n            case ChronoField.YEAR_OF_ERA: return (this._year >= 1 ? this._year : 1 - this._year);\n            case ChronoField.YEAR: return this._year;\n            case ChronoField.ERA: return (this._year >= 1 ? 1 : 0);\n        }\n        throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n    }\n\n    /**\n     *\n     * @return {number}\n     * @private\n     */\n    _prolepticMonth() {\n        return (this._year * 12) + (this._month - 1);\n    }\n\n    /**\n     * Gets the chronology of this date, which is the ISO calendar system.\n     *\n     * The {@link Chronology} represents the calendar system in use.\n     * The ISO-8601 calendar system is the modern civil calendar system used today\n     * in most of the world. It is equivalent to the proleptic Gregorian calendar\n     * system, in which today's rules for leap years are applied for all time.\n     *\n     * @return {Chronology} the ISO chronology, not null\n     */\n    chronology() {\n        return IsoChronology.INSTANCE;\n    }\n\n    /**\n     *\n     * @return {number} gets the year\n     */\n    year() {\n        return this._year;\n    }\n\n    /**\n     *\n     * @return {number} gets the month value\n     */\n    monthValue() {\n        return this._month;\n    }\n\n    /**\n     *\n     * @returns {Month} month\n     */\n    month() {\n        return Month.of(this._month);\n    }\n\n    /**\n     *\n     * @return {number} gets the day of month\n     */\n    dayOfMonth() {\n        return this._day;\n    }\n\n    /**\n      * Gets the day-of-year field.\n      *\n      * This method returns the primitive int value for the day-of-year.\n      *\n      * @return {number} the day-of-year, from 1 to 365, or 366 in a leap year\n      */\n    dayOfYear() {\n        return this.month().firstDayOfYear(this.isLeapYear()) + this._day - 1;\n    }\n\n    /**\n     * Gets the day-of-week field, which is an enum {@link DayOfWeek}.\n     *\n     * This method returns the enum {@link DayOfWeek} for the day-of-week.\n     * This avoids confusion as to what `int` values mean.\n     * If you need access to the primitive `int` value then the enum\n     * provides the {@link DayOfWeek.value} int value.\n     *\n     * Additional information can be obtained from the {@link DayOfWeek}.\n     * This includes textual names of the values.\n     *\n     * @return {DayOfWeek} the day-of-week, not null\n     */\n    dayOfWeek() {\n        const dow0 = MathUtil.floorMod(this.toEpochDay() + 3, 7);\n        return DayOfWeek.of(dow0 + 1);\n    }\n\n    /**\n     * Checks if the year is a leap year, according to the ISO proleptic\n     * calendar system rules.\n     *\n     * This method applies the current rules for leap years across the whole time-line.\n     * In general, a year is a leap year if it is divisible by four without\n     * remainder. However, years divisible by 100, are not leap years, with\n     * the exception of years divisible by 400 which are.\n     *\n     * For example, 1904 is a leap year it is divisible by 4.\n     * 1900 was not a leap year as it is divisible by 100, however 2000 was a\n     * leap year as it is divisible by 400.\n     *\n     * The calculation is proleptic - applying the same rules into the far future and far past.\n     * This is historically inaccurate, but is correct for the ISO-8601 standard.\n     *\n     * @return {boolean} true if the year is leap, false otherwise\n     */\n    isLeapYear() {\n        return IsoChronology.isLeapYear(this._year);\n    }\n\n    /**\n     * Returns the length of the month represented by this date.\n     *\n     * This returns the length of the month in days.\n     * For example, a date in January would return 31.\n     *\n     * @return {number} the length of the month in days\n     */\n    lengthOfMonth() {\n        switch (this._month) {\n            case 2:\n                return (this.isLeapYear() ? 29 : 28);\n            case 4:\n            case 6:\n            case 9:\n            case 11:\n                return 30;\n            default:\n                return 31;\n        }\n    }\n\n    /**\n     * Returns the length of the year represented by this date.\n     *\n     * This returns the length of the year in days, either 365 or 366.\n     *\n     * @return {number} 366 if the year is leap, 365 otherwise\n     */\n    lengthOfYear() {\n        return (this.isLeapYear() ? 366 : 365);\n    }\n\n    /**\n     * Returns an adjusted copy of this date.\n     *\n     * This returns a new {@link LocalDate}, based on this one, with the date adjusted.\n     * The adjustment takes place using the specified adjuster strategy object.\n     * Read the documentation of the adjuster to understand what adjustment will be made.\n     *\n     * A simple adjuster might simply set the one of the fields, such as the year field.\n     * A more complex adjuster might set the date to the last day of the month.\n     * A selection of common adjustments is provided in {@link TemporalAdjusters}.\n     * These include finding the \"last day of the month\" and \"next Wednesday\".\n     * Key date-time classes also implement the {@link TemporalAdjuster} interface,\n     * such as {@link Month} and {@link MonthDay}.\n     * The adjuster is responsible for handling special cases, such as the varying\n     * lengths of month and leap years.\n     *\n     * For example this code returns a date on the last day of July:\n     * <pre>\n     *  import static org.threeten.bp.Month.*;\n     *  import static org.threeten.bp.temporal.Adjusters.*;\n     *\n     *  result = localDate.with(JULY).with(lastDayOfMonth());\n     * </pre>\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalAdjuster.adjustInto} method on the\n     * specified adjuster passing `this` as the argument.\n     *\n     * @param {!TemporalAdjuster} adjuster - the adjuster to use, not null\n     * @return {LocalDate} a {@link LocalDate} based on `this` with the adjustment made, not null\n     * @throws {DateTimeException} if the adjustment cannot be made\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    _withAdjuster(adjuster) {\n        requireNonNull(adjuster, 'adjuster');\n        // optimizations\n        if (adjuster instanceof LocalDate) {\n            return adjuster;\n        }\n        return super._withAdjuster(adjuster);\n    }\n\n    /**\n     * Returns a copy of this date with the specified field set to a new value.\n     *\n     * This returns a new {@link LocalDate}, based on this one, with the value\n     * for the specified field changed.\n     * This can be used to change any supported field, such as the year, month or day-of-month.\n     * If it is not possible to set the value, because the field is not supported or for\n     * some other reason, an exception is thrown.\n     *\n     * In some cases, changing the specified field can cause the resulting date to become invalid,\n     * such as changing the month from 31st January to February would make the day-of-month invalid.\n     * In cases like this, the field is responsible for resolving the date. Typically it will choose\n     * the previous valid date, which would be the last valid day of February in this example.\n     *\n     * If the field is a {@link ChronoField} then the adjustment is implemented here.\n     * The supported fields behave as follows:\n     *\n     * * {@link DAY_OF_WEEK} -\n     *   Returns a {@link LocalDate} with the specified day-of-week.\n     *   The date is adjusted up to 6 days forward or backward within the boundary\n     *   of a Monday to Sunday week.\n     * * {@link ALIGNED_DAY_OF_WEEK_IN_MONTH} -\n     *   Returns a {@link LocalDate} with the specified aligned-day-of-week.\n     *   The date is adjusted to the specified month-based aligned-day-of-week.\n     *   Aligned weeks are counted such that the first week of a given month starts\n     *   on the first day of that month.\n     *   This may cause the date to be moved up to 6 days into the following month.\n     * * {@link ALIGNED_DAY_OF_WEEK_IN_YEAR} -\n     *   Returns a {@link LocalDate} with the specified aligned-day-of-week.\n     *   The date is adjusted to the specified year-based aligned-day-of-week.\n     *   Aligned weeks are counted such that the first week of a given year starts\n     *   on the first day of that year.\n     *   This may cause the date to be moved up to 6 days into the following year.\n     * * {@link DAY_OF_MONTH} -\n     *   Returns a {@link LocalDate} with the specified day-of-month.\n     *   The month and year will be unchanged. If the day-of-month is invalid for the\n     *   year and month, then a {@link DateTimeException} is thrown.\n     * * {@link DAY_OF_YEAR} -\n     *   Returns a {@link LocalDate} with the specified day-of-year.\n     *   The year will be unchanged. If the day-of-year is invalid for the\n     *   year, then a {@link DateTimeException} is thrown.\n     * * {@link EPOCH_DAY} -\n     *   Returns a {@link LocalDate} with the specified epoch-day.\n     *   This completely replaces the date and is equivalent to {@link ofEpochDay}.\n     * * {@link ALIGNED_WEEK_OF_MONTH} -\n     *   Returns a {@link LocalDate} with the specified aligned-week-of-month.\n     *   Aligned weeks are counted such that the first week of a given month starts\n     *   on the first day of that month.\n     *   This adjustment moves the date in whole week chunks to match the specified week.\n     *   The result will have the same day-of-week as this date.\n     *   This may cause the date to be moved into the following month.\n     * * {@link ALIGNED_WEEK_OF_YEAR} -\n     *   Returns a {@link LocalDate} with the specified aligned-week-of-year.\n     *   Aligned weeks are counted such that the first week of a given year starts\n     *   on the first day of that year.\n     *   This adjustment moves the date in whole week chunks to match the specified week.\n     *   The result will have the same day-of-week as this date.\n     *   This may cause the date to be moved into the following year.\n     * * {@link MONTH_OF_YEAR} -\n     *   Returns a {@link LocalDate} with the specified month-of-year.\n     *   The year will be unchanged. The day-of-month will also be unchanged,\n     *   unless it would be invalid for the new month and year. In that case, the\n     *   day-of-month is adjusted to the maximum valid value for the new month and year.\n     * * {@link PROLEPTIC_MONTH} -\n     *   Returns a {@link LocalDate} with the specified proleptic-month.\n     *   The day-of-month will be unchanged, unless it would be invalid for the new month\n     *   and year. In that case, the day-of-month is adjusted to the maximum valid value\n     *   for the new month and year.\n     * * {@link YEAR_OF_ERA} -\n     *   Returns a {@link LocalDate} with the specified year-of-era.\n     *   The era and month will be unchanged. The day-of-month will also be unchanged,\n     *   unless it would be invalid for the new month and year. In that case, the\n     *   day-of-month is adjusted to the maximum valid value for the new month and year.\n     * * {@link YEAR} -\n     *   Returns a {@link LocalDate} with the specified year.\n     *   The month will be unchanged. The day-of-month will also be unchanged,\n     *   unless it would be invalid for the new month and year. In that case, the\n     *   day-of-month is adjusted to the maximum valid value for the new month and year.\n     * * {@link ERA} -\n     *   Returns a {@link LocalDate} with the specified era.\n     *   The year-of-era and month will be unchanged. The day-of-month will also be unchanged,\n     *   unless it would be invalid for the new month and year. In that case, the\n     *   day-of-month is adjusted to the maximum valid value for the new month and year.\n     *\n     * In all cases, if the new value is outside the valid range of values for the field\n     * then a {@link DateTimeException} will be thrown.\n     *\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.adjustInto}\n     * passing `this` as the argument. In this case, the field determines\n     * whether and how to adjust the instant.\n     *\n     * @param {TemporalField} field - the field to set in the result, not null\n     * @param {number} newValue - the new value of the field in the result\n     * @return {LocalDate} a {@link LocalDate} based on `this` with the specified field set, not null\n     * @throws {DateTimeException} if the field cannot be set\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    _withField(field, newValue) {\n        assert(field != null, 'field', NullPointerException);\n        if (field instanceof ChronoField) {\n            const f = field;\n            f.checkValidValue(newValue);\n            switch (f) {\n                case ChronoField.DAY_OF_WEEK: return this.plusDays(newValue - this.dayOfWeek().value());\n                case ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH: return this.plusDays(newValue - this.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH));\n                case ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR: return this.plusDays(newValue - this.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR));\n                case ChronoField.DAY_OF_MONTH: return this.withDayOfMonth(newValue);\n                case ChronoField.DAY_OF_YEAR: return this.withDayOfYear(newValue);\n                case ChronoField.EPOCH_DAY: return LocalDate.ofEpochDay(newValue);\n                case ChronoField.ALIGNED_WEEK_OF_MONTH: return this.plusWeeks(newValue - this.getLong(ChronoField.ALIGNED_WEEK_OF_MONTH));\n                case ChronoField.ALIGNED_WEEK_OF_YEAR: return this.plusWeeks(newValue - this.getLong(ChronoField.ALIGNED_WEEK_OF_YEAR));\n                case ChronoField.MONTH_OF_YEAR: return this.withMonth(newValue);\n                case ChronoField.PROLEPTIC_MONTH: return this.plusMonths(newValue - this.getLong(ChronoField.PROLEPTIC_MONTH));\n                case ChronoField.YEAR_OF_ERA: return this.withYear((this._year >= 1 ? newValue : 1 - newValue));\n                case ChronoField.YEAR: return this.withYear(newValue);\n                case ChronoField.ERA: return (this.getLong(ChronoField.ERA) === newValue ? this : this.withYear(1 - this._year));\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.adjustInto(this, newValue);\n    }\n\n    /**\n     * Returns a copy of this date with the year altered.\n     * If the day-of-month is invalid for the year, it will be changed to the last valid day of the month.\n     *\n     * @param {!number} year  the year to set in the result, from {@link Year.MIN_VALUE} to {@link Year.MAX_VALUE}\n     * @return {LocalDate} a {@link LocalDate} based on this date with the requested year, not null\n     * @throws {DateTimeException} if the year value is invalid\n     */\n    withYear(year) {\n        if (this._year === year) {\n            return this;\n        }\n        ChronoField.YEAR.checkValidValue(year);\n        return LocalDate._resolvePreviousValid(year, this._month, this._day);\n    }\n\n    /**\n     * Returns a copy of this date with the month-of-year altered.\n     * If the day-of-month is invalid for the year, it will be changed to the last valid day of the month.\n     *\n     * @param {!(Month|number)} month - the month-of-year to set in the result, from 1 (January) to 12 (December)\n     * @return {LocalDate} a {@link LocalDate} based on this date with the requested month, not null\n     * @throws {DateTimeException} if the month-of-year value is invalid\n     */\n    withMonth(month) {\n        const m = (month instanceof Month) ? month.value() : month;\n        if (this._month === m) {\n            return this;\n        }\n        ChronoField.MONTH_OF_YEAR.checkValidValue(m);\n        return LocalDate._resolvePreviousValid(this._year, m, this._day);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDate} with the day-of-month altered.\n     *\n     * If the resulting date is invalid, an exception is thrown.\n     *\n     * @param {!number} dayOfMonth - the day-of-month to set in the result, from 1 to 28-31\n     * @return {LocalDate} based on this date with the requested day, not null\n     * @throws {DateTimeException} if the day-of-month value is invalid,\n     *  or if the day-of-month is invalid for the month-year\n     */\n    withDayOfMonth(dayOfMonth) {\n        if (this._day === dayOfMonth) {\n            return this;\n        }\n        return LocalDate.of(this._year, this._month, dayOfMonth);\n    }\n\n    /**\n     * Returns a copy of this date with the day-of-year altered.\n     * If the resulting date is invalid, an exception is thrown.\n     *\n     * @param dayOfYear  the day-of-year to set in the result, from 1 to 365-366\n     * @return {LocalDate} a {@link LocalDate} based on this date with the requested day, not null\n     * @throws {DateTimeException} if the day-of-year value is invalid\n     * @throws {DateTimeException} if the day-of-year is invalid for the year\n     */\n    withDayOfYear(dayOfYear) {\n        if (this.dayOfYear() === dayOfYear) {\n            return this;\n        }\n        return LocalDate.ofYearDay(this._year, dayOfYear);\n    }\n\n    /**\n     * Returns a copy of this date with the specified period added.\n     *\n     * This method returns a new date based on this date with the specified period added.\n     * This can be used to add any period that is defined by a unit, for example to add years, months or days.\n     * The unit is responsible for the details of the calculation, including the resolution\n     * of any edge cases in the calculation.\n     *\n     * @param {!number} amountToAdd - the amount of the unit to add to the result, may be negative\n     * @param {!TemporalUnit} unit - the unit of the period to add, not null\n     * @return {LocalDate} a {@link LocalDate} based on this date with the specified period added, not null\n     * @throws {DateTimeException} if the unit cannot be added to this type\n     */\n    _plusUnit(amountToAdd, unit) {\n        requireNonNull(amountToAdd, 'amountToAdd');\n        requireNonNull(unit, 'unit');\n        if (unit instanceof ChronoUnit) {\n            switch (unit) {\n                case ChronoUnit.DAYS: return this.plusDays(amountToAdd);\n                case ChronoUnit.WEEKS: return this.plusWeeks(amountToAdd);\n                case ChronoUnit.MONTHS: return this.plusMonths(amountToAdd);\n                case ChronoUnit.YEARS: return this.plusYears(amountToAdd);\n                case ChronoUnit.DECADES: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 10));\n                case ChronoUnit.CENTURIES: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 100));\n                case ChronoUnit.MILLENNIA: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 1000));\n                case ChronoUnit.ERAS: return this.with(ChronoField.ERA, MathUtil.safeAdd(this.getLong(ChronoField.ERA), amountToAdd));\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.addTo(this, amountToAdd);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDate} with the specified period in years added.\n     *\n     * This method adds the specified amount to the years field in three steps:\n     *\n     * 1. Add the input years to the year field\n     * 2. Check if the resulting date would be invalid\n     * 3. Adjust the day-of-month to the last valid day if necessary\n     *\n     * For example, 2008-02-29 (leap year) plus one year would result in the\n     * invalid date 2009-02-29 (standard year). Instead of returning an invalid\n     * result, the last valid day of the month, 2009-02-28, is selected instead.\n     *\n     * @param {!number} yearsToAdd - the years to add, may be negative\n     * @return {LocalDate} a {@link LocalDate} based on this date with the years added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusYears(yearsToAdd) {\n        if (yearsToAdd === 0) {\n            return this;\n        }\n        const newYear = ChronoField.YEAR.checkValidIntValue(this._year + yearsToAdd);  // safe overflow\n        return LocalDate._resolvePreviousValid(newYear, this._month, this._day);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDate} with the specified period in months added.\n     *\n     * This method adds the specified amount to the months field in three steps:\n     *\n     * 1. Add the input months to the month-of-year field\n     * 2. Check if the resulting date would be invalid\n     * 3. Adjust the day-of-month to the last valid day if necessary\n     *\n     * For example, 2007-03-31 plus one month would result in the invalid date\n     * 2007-04-31. Instead of returning an invalid result, the last valid day\n     * of the month, 2007-04-30, is selected instead.\n     *\n     * @param {number} monthsToAdd - the months to add, may be negative\n     * @return {LocalDate} a {@link LocalDate} based on this date with the months added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusMonths(monthsToAdd) {\n        if (monthsToAdd === 0) {\n            return this;\n        }\n        const monthCount = this._year * 12 + (this._month - 1);\n        const calcMonths = monthCount + monthsToAdd;  // safe overflow\n        const newYear = ChronoField.YEAR.checkValidIntValue(MathUtil.floorDiv(calcMonths, 12));\n        const newMonth = MathUtil.floorMod(calcMonths, 12) + 1;\n        return LocalDate._resolvePreviousValid(newYear, newMonth, this._day);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDate} with the specified period in weeks added.\n     *\n     * This method adds the specified amount in weeks to the days field incrementing\n     * the month and year fields as necessary to ensure the result remains valid.\n     * The result is only invalid if the maximum/minimum year is exceeded.\n     *\n     * For example, 2008-12-31 plus one week would result in 2009-01-07.\n     *\n     * @param {!number} weeksToAdd - the weeks to add, may be negative\n     * @return {LocalDate} a {@link LocalDate} based on this date with the weeks added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusWeeks(weeksToAdd) {\n        return this.plusDays(MathUtil.safeMultiply(weeksToAdd, 7));\n    }\n\n\n    /**\n     * Returns a copy of this LocalDate with the specified number of days added.\n     *\n     * This method adds the specified amount to the days field incrementing the\n     * month and year fields as necessary to ensure the result remains valid.\n     * The result is only invalid if the maximum/minimum year is exceeded.\n     *\n     * For example, 2008-12-31 plus one day would result in 2009-01-01.\n     *\n     * @param {number} daysToAdd - the days to add, may be negative\n     * @return {LocalDate} a LocalDate based on this date with the days added, not null\n     * @throws AssertionError if the result exceeds the supported date range\n     */\n    plusDays(daysToAdd) {\n        if (daysToAdd === 0) {\n            return this;\n        }\n        const mjDay = MathUtil.safeAdd(this.toEpochDay(), daysToAdd);\n        return LocalDate.ofEpochDay(mjDay);\n    }\n\n    /**\n     * Returns a copy of this date with the specified period subtracted.\n     *\n     * This method returns a new date based on this date with the specified period subtracted.\n     * This can be used to subtract any period that is defined by a unit, for example to subtract years, months or days.\n     * The unit is responsible for the details of the calculation, including the resolution\n     * of any edge cases in the calculation.\n     *\n     * @param {!number} amountToSubtract - the amount of the unit to subtract from the result, may be negative\n     * @param {!TemporalUnit} unit  the unit of the period to subtract, not null\n     * @return {LocalDate} a {@link LocalDate} based on this date with the specified period subtracted, not null\n     * @throws {DateTimeException} if the unit cannot be added to this type\n     */\n    _minusUnit(amountToSubtract, unit) {\n        requireNonNull(amountToSubtract, 'amountToSubtract');\n        requireNonNull(unit, 'unit');\n        return this._plusUnit(-1 * amountToSubtract, unit);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDate} with the specified period in years subtracted.\n     *\n     * This method subtracts the specified amount from the years field in three steps:\n     *\n     * 1. Subtract the input years to the year field\n     * 2. Check if the resulting date would be invalid\n     * 3. Adjust the day-of-month to the last valid day if necessary\n     *\n     * For example, 2008-02-29 (leap year) minus one year would result in the\n     * invalid date 2007-02-29 (standard year). Instead of returning an invalid\n     * result, the last valid day of the month, 2007-02-28, is selected instead.\n     *\n     * @param {!number} yearsToSubtract - the years to subtract, may be negative\n     * @return {LocalDate} a {@link LocalDate} based on this date with the years subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusYears(yearsToSubtract) {\n        return this.plusYears(yearsToSubtract * -1);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDate} with the specified period in months subtracted.\n     *\n     * This method subtracts the specified amount from the months field in three steps:\n     *\n     * 1. Subtract the input months to the month-of-year field\n     * 2. Check if the resulting date would be invalid\n     * 3. Adjust the day-of-month to the last valid day if necessary\n     *\n     * For example, 2007-03-31 minus one month would result in the invalid date\n     * 2007-02-31. Instead of returning an invalid result, the last valid day\n     * of the month, 2007-02-28, is selected instead.\n     *\n     * @param {!number} monthsToSubtract - the months to subtract, may be negative\n     * @return {LocalDate} a {@link LocalDate} based on this date with the months subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusMonths(monthsToSubtract) {\n        return this.plusMonths(monthsToSubtract * -1);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDate} with the specified period in weeks subtracted.\n     *\n     * This method subtracts the specified amount in weeks from the days field decrementing\n     * the month and year fields as necessary to ensure the result remains valid.\n     * The result is only invalid if the maximum/minimum year is exceeded.\n     *\n     * For example, 2009-01-07 minus one week would result in 2008-12-31.\n     *\n     * @param {!number} weeksToSubtract - the weeks to subtract, may be negative\n     * @return {LocalDate} a {@link LocalDate} based on this date with the weeks subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusWeeks(weeksToSubtract) {\n        return this.plusWeeks(weeksToSubtract * -1);\n    }\n\n    /*\n     * Returns a copy of this LocalDate with the specified number of days subtracted.\n     *\n     * This method subtracts the specified amount from the days field decrementing the\n     * month and year fields as necessary to ensure the result remains valid.\n     * The result is only invalid if the maximum/minimum year is exceeded.\n     *\n     * For example, 2009-01-01 minus one day would result in 2008-12-31.\n     *\n     * @param {number} daysToSubtract - the days to subtract, may be negative\n     * @return {LocalDate} a LocalDate based on this date with the days subtracted, not null\n     * @throws AssertionError if the result exceeds the supported date range\n     */\n    minusDays(daysToSubtract) {\n        return this.plusDays(daysToSubtract * -1);\n    }\n\n    /**\n     * Queries this date using the specified query.\n     *\n     * This queries this date using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing `this` as the argument.\n     *\n     * @param {TemporalQuery} query - the query to invoke, not null\n     * @return the query result, null may be returned (defined by the query)\n     * @throws {DateTimeException} if unable to query (defined by the query)\n     * @throws {ArithmeticException} if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        requireNonNull(query, 'query');\n        if (query === TemporalQueries.localDate()) {\n            return this;\n        }\n        return super.query(query);\n    }\n\n    /**\n     * Adjusts the specified temporal object to have the same date as this object.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with the date changed to be the same as this.\n     *\n     * The adjustment is equivalent to using {@link Temporal#with}\n     * passing {@link ChronoField.EPOCH_DAY} as the field.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisLocalDate.adjustInto(temporal);\n     *   temporal = temporal.with(thisLocalDate);\n     * </pre>\n     *\n     * @param {!TemporalAdjuster} temporal - the target object to be adjusted, not null\n     * @return the adjusted object, not null\n     * @throws {DateTimeException} if unable to make the adjustment\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        return super.adjustInto(temporal);\n    }\n\n    /**\n     * function overloading for {@link LocalDate.until}\n     *\n     * called with 1 (or less) arguments {{@link LocalDate.until1}} is called\n     * otherwise {@link LocalDate.until2}\n     *\n     * @param {!TemporalAccessor} p1\n     * @param {TemporalUnit} p2 - not null if called with 2 arguments\n     * @return {number|Period}\n     */\n    until(p1, p2){\n        if(arguments.length < 2){\n            return this.until1(p1);\n        } else {\n            return this.until2(p1, p2);\n        }\n    }\n\n    /**\n     * Calculates the period between this date and another date in\n     * terms of the specified unit.\n     *\n     * This calculates the period between two dates in terms of a single unit.\n     * The start and end points are `this` and the specified date.\n     * The result will be negative if the end is before the start.\n     * The {@link Temporal} passed to this method must be a {@link LocalDate}.\n     * For example, the period in days between two dates can be calculated\n     * using {@link startDate.until}.\n     *\n     * The calculation returns a whole number, representing the number of\n     * complete units between the two dates.\n     * For example, the period in months between 2012-06-15 and 2012-08-14\n     * will only be one month as it is one day short of two months.\n     *\n     * This method operates in association with {@link TemporalUnit#between}.\n     * The result of this method is a `long` representing the amount of\n     * the specified unit. By contrast, the result of {@link between} is an\n     * object that can be used directly in addition/subtraction:\n     * <pre>\n     *   long period = start.until(end, MONTHS);   // this method\n     *   dateTime.plus(MONTHS.between(start, end));      // use in plus/minus\n     * </pre>\n     *\n     * The calculation is implemented in this method for {@link ChronoUnit}.\n     * The units {@link DAYS}, {@link WEEKS}, {@link MONTHS}, {@link YEARS},\n     * {@link DECADES}, {@link CENTURIES}, {@link MILLENNIA} and {@link ERAS}\n     * are supported. Other {@link ChronoUnit} values will throw an exception.\n     *\n     * If the unit is not a {@link ChronoUnit}, then the result of this method\n     * is obtained by invoking {@link TemporalUnit.between}\n     * passing `this` as the first argument and the input temporal as\n     * the second argument.\n     *\n     * @param {!TemporalAccessor} endExclusive - the end date, which is converted to a {@link LocalDate}, not null\n     * @param {!TemporalUnit} unit - the unit to measure the period in, not null\n     * @return {number} the amount of the period between this date and the end date\n     * @throws {DateTimeException} if the period cannot be calculated\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    until2(endExclusive, unit) {\n        const end = LocalDate.from(endExclusive);\n        if (unit instanceof ChronoUnit) {\n            switch (unit) {\n                case ChronoUnit.DAYS: return this.daysUntil(end);\n                case ChronoUnit.WEEKS: return MathUtil.intDiv(this.daysUntil(end), 7);\n                case ChronoUnit.MONTHS: return this._monthsUntil(end);\n                case ChronoUnit.YEARS: return MathUtil.intDiv(this._monthsUntil(end), 12);\n                case ChronoUnit.DECADES: return MathUtil.intDiv(this._monthsUntil(end), 120);\n                case ChronoUnit.CENTURIES: return MathUtil.intDiv(this._monthsUntil(end), 1200);\n                case ChronoUnit.MILLENNIA: return MathUtil.intDiv(this._monthsUntil(end), 12000);\n                case ChronoUnit.ERAS: return end.getLong(ChronoField.ERA) - this.getLong(ChronoField.ERA);\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.between(this, end);\n    }\n\n    /**\n     *\n     * @param {!LocalDate} end\n     * @returns {number}\n     * @protected\n     */\n    daysUntil(end) {\n        return end.toEpochDay() - this.toEpochDay();  // no overflow\n    }\n\n    /**\n     *\n     * @param {!LocalDate} end\n     * @returns {number}\n     * @private\n     */\n    _monthsUntil(end) {\n        const packed1 = this._prolepticMonth() * 32 + this.dayOfMonth();  // no overflow\n        const packed2 = end._prolepticMonth() * 32 + end.dayOfMonth();  // no overflow\n        return MathUtil.intDiv((packed2 - packed1), 32);\n    }\n\n    /**\n     * Calculates the period between this date and another date as a {@link Period}.\n     *\n     * This calculates the period between two dates in terms of years, months and days.\n     * The start and end points are `this` and the specified date.\n     * The result will be negative if the end is before the start.\n     *\n     * The calculation is performed using the ISO calendar system.\n     * If necessary, the input date will be converted to ISO.\n     *\n     * The start date is included, but the end date is not.\n     * The period is calculated by removing complete months, then calculating\n     * the remaining number of days, adjusting to ensure that both have the same sign.\n     * The number of months is then normalized into years and months based on a 12 month year.\n     * A month is considered to be complete if the end day-of-month is greater\n     * than or equal to the start day-of-month.\n     * For example, from `2010-01-15` to `2011-03-18` is \"1 year, 2 months and 3 days\".\n     *\n     * The result of this method can be a negative period if the end is before the start.\n     * The negative sign will be the same in each of year, month and day.\n     *\n     * There are two equivalent ways of using this method.\n     * The first is to invoke this method.\n     * The second is to use {@link Period#between}:\n     * <pre>\n     *   // these two lines are equivalent\n     *   period = start.until(end);\n     *   period = Period.between(start, end);\n     * </pre>\n     * The choice should be made based on which makes the code more readable.\n     *\n     * @param {!TemporalAccessor} endDate - the end date, exclusive, which may be in any chronology, not null\n     * @return {Period} the period between this date and the end date, not null\n     */\n    until1(endDate) {\n        const end = LocalDate.from(endDate);\n        let totalMonths = end._prolepticMonth() - this._prolepticMonth();  // safe\n        let days = end._day - this._day;\n        if (totalMonths > 0 && days < 0) {\n            totalMonths--;\n            const calcDate = this.plusMonths(totalMonths);\n            days = (end.toEpochDay() - calcDate.toEpochDay());  // safe\n        } else if (totalMonths < 0 && days > 0) {\n            totalMonths++;\n            days -= end.lengthOfMonth();\n        }\n        const years = MathUtil.intDiv(totalMonths, 12);  // safe\n        const months = MathUtil.intMod(totalMonths, 12);  // safe\n        return Period.of(years, months, days);\n    }\n\n\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link LocalDate.atTime}\n     *\n     * if called with 1 argument {@link LocalDate.atTime1} is called\n     * otherwise {@link LocalDate.atTime4}\n     *\n     * @return {LocalDateTime|OffsetDateTime} the local date-time formed from this date and the specified params\n     */\n    atTime(){\n        if(arguments.length===1){\n            return this.atTime1.apply(this, arguments);\n        } else {\n            return this.atTime4.apply(this, arguments);\n        }\n    }\n\n    /**\n     * Combines this date with a time to create a {@link LocalDateTime}.\n     *\n     * This returns a {@link LocalDateTime} formed from this date at the specified time.\n     * All possible combinations of date and time are valid.\n     *\n     * @param {LocalTime} time - the time to combine with, not null\n     * @return {LocalDateTime|OffsetDateTime} the date-time formed from this date and the specified time, not null\n     */\n    atTime1(time) {\n        requireNonNull(time, 'time');\n        if (time instanceof LocalTime) {\n            return LocalDateTime.of(this, time);\n        } else if (time instanceof OffsetTime) {\n            return this._atTimeOffsetTime(time);\n        } else {\n            throw new IllegalArgumentException(`time must be an instance of LocalTime or OffsetTime${ \n                time && time.constructor && time.constructor.name ? `, but is ${time.constructor.name}` : ''}`);\n        }\n    }\n\n    /**\n     * Combines this date with a time to create a {@link LocalDateTime}.\n     *\n     * This returns a {@link LocalDateTime} formed from this date at the\n     * specified hour, minute, second and nanosecond.\n     * The individual time fields must be within their valid range.\n     * All possible combinations of date and time are valid.\n     *\n     * @param {!number} hour - the hour-of-day to use, from 0 to 23\n     * @param {!number} minute - the minute-of-hour to use, from 0 to 59\n     * @param {number} [second=0] - the second-of-minute to represent, from 0 to 59\n     * @param {number} [nanoOfSecond=0] - the nano-of-second to represent, from 0 to 999,999,999\n     * @return {LocalDateTime} the local date-time formed from this date and the specified time, not null\n     * @throws {DateTimeException} if the value of any field is out of range\n     */\n    atTime4(hour, minute, second=0, nanoOfSecond=0) {\n        return this.atTime1(LocalTime.of(hour, minute, second, nanoOfSecond));\n    }\n\n    /**\n     * Combines this date with an offset time to create an {@link OffsetDateTime}.\n     *\n     * This returns an {@link OffsetDateTime} formed from this date at the specified time.\n     * All possible combinations of date and time are valid.\n     *\n     * @param {OffsetTime} time - the time to combine with, not null\n     * @return {OffsetDateTime} the offset date-time formed from this date and the specified time, not null\n     */\n    _atTimeOffsetTime(time) { // atTime(offsetTime)\n        return OffsetDateTime.of(LocalDateTime.of(this, time.toLocalTime()), time.offset());\n    }\n\n    /**\n     * Combines this date with the time of midnight to create a {@link LocalDateTime}\n     * at the start of this date.\n     *\n     * This returns a {@link LocalDateTime} formed from this date at the time of\n     * midnight, 00:00, at the start of this date.\n     *\n     * If zone is not null, this returns a {@link ZonedDateTime} formed from this date at the\n     * specified zone, with the time set to be the earliest valid time according\n     * to the rules in the time-zone.\n     *\n     * Time-zone rules, such as daylight savings, mean that not every local date-time\n     * is valid for the specified zone, thus the local date-time may not be midnight.\n     *\n     * In most cases, there is only one valid offset for a local date-time.\n     * In the case of an overlap, there are two valid offsets, and the earlier one is used,\n     * corresponding to the first occurrence of midnight on the date.\n     * In the case of a gap, the zoned date-time will represent the instant just after the gap.\n     *\n     * If the zone ID is a {@link ZoneOffset}, then the result always has a time of midnight.\n     *\n     * To convert to a specific time in a given time-zone call {@link atTime}\n     * followed by {@link LocalDateTime#atZone}.\n     *\n     * @param {ZoneId} zone - optional ZoneId or ZoneOffset\n     * @return {LocalDateTime|ZonedDateTime} the local date-time of midnight at the start of this date, not null\n     */\n    atStartOfDay(zone) {\n        if(zone != null){\n            return this._atStartOfDayWithZone(zone);\n        } else {\n            return LocalDateTime.of(this, LocalTime.MIDNIGHT);\n        }\n    }\n\n    /**\n     * Combines this date with a time-zone to create a {@link ZonedDateTime}\n     * at the start of the day\n     *\n     * This returns a {@link ZonedDateTime} formed from this date at the\n     * specified zone, with the time set to be the earliest valid time according\n     * to the rules in the time-zone.\n     *\n     * Time-zone rules, such as daylight savings, mean that not every local date-time\n     * is valid for the specified zone, thus the local date-time may not be midnight.\n     *\n     * In most cases, there is only one valid offset for a local date-time.\n     * In the case of an overlap, there are two valid offsets, and the earlier one is used,\n     * corresponding to the first occurrence of midnight on the date.\n     * In the case of a gap, the zoned date-time will represent the instant just after the gap.\n     *\n     * If the zone ID is a {@link ZoneOffset}, then the result always has a time of midnight.\n     *\n     * To convert to a specific time in a given time-zone call {@link atTime}\n     * followed by {@link LocalDateTime#atZone}.\n     *\n     * @param {!ZoneId} zone - the zone ID to use, not null\n     * @return {ZonedDateTime} the zoned date-time formed from this date and the earliest valid time for the zone, not null\n     */\n    _atStartOfDayWithZone(zone) {\n        requireNonNull(zone, 'zone');\n        let ldt = this.atTime(LocalTime.MIDNIGHT);\n        // need to handle case where there is a gap from 11:30 to 00:30\n        // standard ZDT factory would result in 01:00 rather than 00:30\n        if (zone instanceof ZoneOffset === false) {\n            const trans = zone.rules().transition(ldt);\n            if (trans != null && trans.isGap()) {\n                ldt = trans.dateTimeAfter();\n            }\n        }\n        return ZonedDateTime.of(ldt, zone);\n    }\n\n\n    /**\n     * Converts this date to the Epoch Day.\n     *\n     * The Epoch Day count is a simple incrementing count of days where day 0 is 1970-01-01 (ISO).\n     * This definition is the same for all chronologies, enabling conversion.\n     *\n     * @return {number} the Epoch Day equivalent to this date\n     */\n    toEpochDay() {\n        const y = this._year;\n        const m = this._month;\n        let total = 0;\n        total += 365 * y;\n        if (y >= 0) {\n            total += MathUtil.intDiv(y + 3, 4) - MathUtil.intDiv(y + 99, 100) + MathUtil.intDiv(y + 399, 400);\n        } else {\n            total -= MathUtil.intDiv(y, -4) - MathUtil.intDiv(y, -100) + MathUtil.intDiv(y, -400);\n        }\n        total += MathUtil.intDiv(367 * m - 362, 12);\n        total += this.dayOfMonth() - 1;\n        if (m > 2) {\n            total--;\n            if (!IsoChronology.isLeapYear(y)) {\n                total--;\n            }\n        }\n        return total - DAYS_0000_TO_1970;\n    }\n\n    /**\n     * Compares this date to another date.\n     *\n     * The comparison is primarily based on the date, from earliest to latest.\n     * It is \"consistent with equals\", as defined by {@link Comparable}.\n     *\n     * If all the dates being compared are instances of {@link LocalDate},\n     * then the comparison will be entirely based on the date.\n     * If some dates being compared are in different chronologies, then the\n     * chronology is also considered, see {@link ChronoLocalDate.compareTo}.\n     *\n     * @param {!LocalDate} other - the other date to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     */\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, LocalDate, 'other');\n        return this._compareTo0(other);\n        // return super.compareTo(other);  if not instanceof LocalDate\n    }\n\n    /**\n     *\n     * @param {!LocalDate} otherDate\n     * @returns {number}\n     * @private\n     */\n    _compareTo0(otherDate) {\n        let cmp = (this._year - otherDate._year);\n        if (cmp === 0) {\n            cmp = (this._month - otherDate._month);\n            if (cmp === 0) {\n                cmp = (this._day - otherDate._day);\n            }\n        }\n        return cmp;\n    }\n\n    /**\n     * Checks if this date is after the specified date.\n     *\n     * This checks to see if this date represents a point on the\n     * local time-line after the other date.\n     * <pre>\n     *   LocalDate a = LocalDate.of(2012, 6, 30);\n     *   LocalDate b = LocalDate.of(2012, 7, 1);\n     *   a.isAfter(b) == false\n     *   a.isAfter(a) == false\n     *   b.isAfter(a) == true\n     * </pre>\n     *\n     * This method only considers the position of the two dates on the local time-line.\n     * It does not take into account the chronology, or calendar system.\n     * This is different from the comparison in {@link compareTo},\n     * but is the same approach as {@link DATE_COMPARATOR}.\n     *\n     * @param {!LocalDate} other - the other date to compare to, not null\n     * @return {boolean} true if this date is after the specified date\n     */\n    isAfter(other) {\n        return this.compareTo(other) > 0;\n        // return super.isAfter(other) if not instanceof LocalDate\n    }\n\n    /**\n     * Checks if this date is before the specified date.\n     *\n     * This checks to see if this date represents a point on the\n     * local time-line before the other date.\n     * <pre>\n     *   LocalDate a = LocalDate.of(2012, 6, 30);\n     *   LocalDate b = LocalDate.of(2012, 7, 1);\n     *   a.isBefore(b) == true\n     *   a.isBefore(a) == false\n     *   b.isBefore(a) == false\n     * </pre>\n     *\n     * This method only considers the position of the two dates on the local time-line.\n     * It does not take into account the chronology, or calendar system.\n     * This is different from the comparison in {@link compareTo},\n     * but is the same approach as {@link DATE_COMPARATOR}.\n     *\n     * @param {!LocalDate} other - the other date to compare to, not null\n     * @return {boolean} true if this date is before the specified date\n     */\n    isBefore(other) {\n        return this.compareTo(other) < 0;\n        // return super.isBefore(other) if not instanceof LocalDate\n    }\n\n    /**\n     * Checks if this date is equal to the specified date.\n     *\n     * This checks to see if this date represents the same point on the\n     * local time-line as the other date.\n     * <pre>\n     *   LocalDate a = LocalDate.of(2012, 6, 30);\n     *   LocalDate b = LocalDate.of(2012, 7, 1);\n     *   a.isEqual(b) == false\n     *   a.isEqual(a) == true\n     *   b.isEqual(a) == false\n     * </pre>\n     *\n     * This method only considers the position of the two dates on the local time-line.\n     * It does not take into account the chronology, or calendar system.\n     * This is different from the comparison in {@link compareTo}\n     * but is the same approach as {@link DATE_COMPARATOR}.\n     *\n     * @param {!LocalDate} other - the other date to compare to, not null\n     * @return {boolean} true if this date is equal to the specified date\n     */\n    isEqual(other) {\n        return this.compareTo(other) === 0;\n        // return super.isEqual(other) if not instanceof LocalDate\n    }\n\n    /**\n     * Checks if this date is equal to another date.\n     *\n     * Compares this LocalDate with another ensuring that the date is the same.\n     *\n     * Only objects of type LocalDate are compared, other types return false.\n     *\n     * @param {*} other - the object to check, null returns false\n     * @return {boolean} true if this is equal to the other date\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof LocalDate) {\n            return this._compareTo0(other) === 0;\n        }\n        return false;\n    }\n\n    /**\n     * A hash code for this date.\n     *\n     * @return {number} a suitable hash code\n     */\n    hashCode() {\n        const yearValue = this._year;\n        const monthValue = this._month;\n        const dayValue = this._day;\n        return MathUtil.hash((yearValue & 0xFFFFF800) ^ ((yearValue << 11) + (monthValue << 6) + (dayValue)));\n    }\n\n    /**\n     * Outputs this date as a String, such as 2007-12-03.\n     * The output will be in the ISO-8601 format uuuu-MM-dd.\n     *\n     * @return {string} a string representation of this date, not null\n     */\n    toString() {\n        let dayString, monthString, yearString;\n\n        const yearValue = this._year;\n        const monthValue = this._month;\n        const dayValue = this._day;\n\n        const absYear = Math.abs(yearValue);\n\n        if (absYear < 1000) {\n            if (yearValue < 0) {\n                yearString = `-${(`${yearValue - 10000}`).slice(-4)}`;\n            } else {\n                yearString = (`${yearValue + 10000}`).slice(-4);\n            }\n        } else {\n            if (yearValue > 9999) {\n                yearString = `+${yearValue}`;\n            } else {\n                yearString = `${yearValue}`;\n            }\n        }\n\n        if (monthValue < 10) {\n            monthString = `-0${monthValue}`;\n        } else {\n            monthString = `-${monthValue}`;\n        }\n\n        if (dayValue < 10) {\n            dayString = `-0${dayValue}`;\n        } else {\n            dayString = `-${dayValue}`;\n        }\n\n        return yearString + monthString + dayString;\n    }\n\n    /**\n     *\n     * @return {string} same as {@link LocalDate.toString}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n    /**\n     * Outputs this date as a string using the formatter.\n     *\n     * @param {DateTimeFormatter} formatter  the formatter to use, not null\n     * @return {String} the formatted date string, not null\n     * @throws DateTimeException if an error occurs during printing\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        requireInstance(formatter, DateTimeFormatter, 'formatter');\n        return super.format(formatter);\n    }\n}\n\nexport function _init() {\n    /**\n     * The minimum supported {@link LocalDate}\n     * This could be used by an application as a \"far past\" date.\n     */\n    LocalDate.MIN = LocalDate.of(YearConstants.MIN_VALUE, 1, 1);\n    /**\n     * The maximum supported {@link LocalDate}\n     * This could be used by an application as a \"far future\" date.\n     */\n    LocalDate.MAX = LocalDate.of(YearConstants.MAX_VALUE, 12, 31);\n    /**\n     * The date at epoch day 0, that is 1970-01-01.\n     */\n    LocalDate.EPOCH_0 = LocalDate.ofEpochDay(0);\n\n    LocalDate.FROM = createTemporalQuery('LocalDate.FROM', (temporal) => {\n        return LocalDate.from(temporal);\n    });\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull, requireInstance } from '../assert';\nimport { MathUtil } from '../MathUtil';\n\nimport { LocalDate } from '../LocalDate';\nimport { Instant } from '../Instant';\nimport { ZoneOffset } from '../ZoneOffset';\nimport { ChronoUnit } from '../temporal/ChronoUnit';\nimport { ChronoField } from '../temporal/ChronoField';\nimport { Temporal } from '../temporal/Temporal';\nimport { TemporalQueries } from '../temporal/TemporalQueries';\n\n/**\n * A date-time without a time-zone in an arbitrary chronology, intended\n * for advanced globalization use cases.\n *\n * **Most applications should declare method signatures, fields and variables\n * as {@link LocalDateTime}, not this interface.**\n *\n * A {@link ChronoLocalDateTime} is the abstract representation of a local date-time\n * where the {@link Chronology}, or calendar system, is pluggable.\n * The date-time is defined in terms of fields expressed by {@link TemporalField},\n * where most common implementations are defined in {@link ChronoField}.\n * The chronology defines how the calendar system operates and the meaning of\n * the standard fields.\n *\n * #### When to use this interface\n *\n * The design of the API encourages the use of {@link LocalDateTime} rather than this\n * interface, even in the case where the application needs to deal with multiple\n * calendar systems. The rationale for this is explored in detail in {@link ChronoLocalDate}.\n *\n * Ensure that the discussion in {@link ChronoLocalDate} has been read and understood\n * before using this interface.\n *\n * ### Specification for implementors\n *\n * This interface must be implemented with care to ensure other classes operate correctly.\n * All implementations that can be instantiated must be final, immutable and thread-safe.\n * Subclasses should be Serializable wherever possible.\n *\n * In JDK 8, this is an interface with default methods.\n * Since there are no default methods in JDK 7, an abstract class is used.\n *\n * @param D the date type\n */\nexport class ChronoLocalDateTime extends Temporal {\n    /* <D extends ChronoLocalDate>\n        extends DefaultInterfaceTemporal\n        implements Temporal, TemporalAdjuster, Comparable<ChronoLocalDateTime<?>> */\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the chronology of this date-time.\n     *\n     * The {@link Chronology} represents the calendar system in use.\n     * The era and other fields in {@link ChronoField} are defined by the chronology.\n     *\n     * @return the chronology, not null\n     */\n    chronology() {\n        return this.toLocalDate().chronology();\n    }\n\n    /**\n     *\n     * @param {TemporalQuery} query\n     * @returns {*}\n     */\n    query(query) {\n        if (query === TemporalQueries.chronology()) {\n            return this.chronology();\n        } else if (query === TemporalQueries.precision()) {\n            return ChronoUnit.NANOS;\n        } else if (query === TemporalQueries.localDate()) {\n            return LocalDate.ofEpochDay(this.toLocalDate().toEpochDay());\n        } else if (query === TemporalQueries.localTime()) {\n            return this.toLocalTime();\n        } else if (query === TemporalQueries.zone() || query === TemporalQueries.zoneId() || query === TemporalQueries.offset()) {\n            return null;\n        }\n        return super.query(query);\n    }\n\n    adjustInto(temporal) {\n        return temporal\n            .with(ChronoField.EPOCH_DAY, this.toLocalDate().toEpochDay())\n            .with(ChronoField.NANO_OF_DAY, this.toLocalTime().toNanoOfDay());\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Converts this date-time to an {@link Instant}.\n     *\n     * This combines this local date-time and the specified offset to form\n     * an {@link Instant}.\n     *\n     * @param {ZoneOffset} offset  the offset to use for the conversion, not null\n     * @return {Instant} an {@link Instant} representing the same instant, not null\n     */\n    toInstant(offset) {\n        requireInstance(offset, ZoneOffset, 'zoneId');\n        return Instant.ofEpochSecond(this.toEpochSecond(offset), this.toLocalTime().nano());\n    }\n\n    /**\n     * Converts this date-time to the number of seconds from the epoch\n     * of 1970-01-01T00:00:00Z.\n     *\n     * This combines this local date-time and the specified offset to calculate the\n     * epoch-second value, which is the number of elapsed seconds from 1970-01-01T00:00:00Z.\n     * Instants on the time-line after the epoch are positive, earlier are negative.\n     *\n     * @param {ZoneOffset} offset  the offset to use for the conversion, not null\n     * @return {number} the number of seconds from the epoch of 1970-01-01T00:00:00Z\n     */\n    toEpochSecond(offset) {\n        requireNonNull(offset, 'offset');\n        const epochDay = this.toLocalDate().toEpochDay();\n        let secs = epochDay * 86400 + this.toLocalTime().toSecondOfDay();\n        secs -= offset.totalSeconds();\n        return MathUtil.safeToInt(secs);\n    }\n\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { MathUtil } from './MathUtil';\nimport { requireNonNull, requireInstance } from './assert';\nimport { DateTimeException, UnsupportedTemporalTypeException } from './errors';\n\nimport { Clock } from './Clock';\nimport { Instant } from './Instant';\nimport { LocalDate } from './LocalDate';\nimport { LocalTime } from './LocalTime';\nimport { OffsetDateTime } from './OffsetDateTime';\nimport { ZonedDateTime } from './ZonedDateTime';\nimport { ZoneId } from './ZoneId';\nimport { ZoneOffset } from './ZoneOffset';\n\n\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { createTemporalQuery } from './temporal/TemporalQuery';\n\nimport { ChronoLocalDateTime } from './chrono/ChronoLocalDateTime';\n\n/**\n * A date-time without a time-zone in the ISO-8601 calendar system,\n * such as `2007-12-03T10:15:30`.\n *\n * {@link LocalDateTime} is an immutable date-time object that represents a date-time,\n * often viewed as year-month-day-hour-minute-second. Other date and time fields,\n * such as day-of-year, day-of-week and week-of-year, can also be accessed.\n * Time is represented to nanosecond precision.\n * For example, the value '2nd October 2007 at 13:45.30.123456789' can be\n * stored in a {@link LocalDateTime}.\n *\n * This class does not store or represent a time-zone.\n * Instead, it is a description of the date, as used for birthdays, combined with\n * the local time as seen on a wall clock.\n * It cannot represent an instant on the time-line without additional information\n * such as an offset or time-zone.\n *\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. It is equivalent to the proleptic Gregorian calendar\n * system, in which today's rules for leap years are applied for all time.\n * For most applications written today, the ISO-8601 rules are entirely suitable.\n * However, any application that makes use of historical dates, and requires them\n * to be accurate will find the ISO-8601 approach unsuitable.\n *\n * ### Static properties of Class {@link LocalTime}\n *\n * LocalDateTime.MIN\n *\n * The minimum supported {@link LocalDateTime}, '-999999999-01-01T00:00:00'.\n * This is the local date-time of midnight at the start of the minimum date.\n * This combines {@link LocalDate#MIN} and {@link LocalTime#MIN}.\n * This could be used by an application as a 'far past' date-time.\n *\n * LocalDateTime.MAX\n *\n * The maximum supported {@link LocalDateTime}, '+999999999-12-31T23:59:59.999999999'.\n * This is the local date-time just before midnight at the end of the maximum date.\n * This combines {@link LocalDate#MAX} and {@link LocalTime#MAX}.\n * This could be used by an application as a 'far future' date-time.\n *\n */\nexport class LocalDateTime extends ChronoLocalDateTime\n/** extends ChronoLocalDateTime<LocalDate>\nimplements Temporal, TemporalAdjuster, Serializable */ {\n\n\n    /**\n     * Obtains the current date-time from from the specified clock or the system clock in the specified time-zone.\n     *\n     * If the argument is an instance of Clock this will query the specified clock to obtain the current date-time.\n     * Using this method allows the use of an alternate clock for testing.\n     * The alternate clock may be introduced using dependency injection.\n     *\n     * If the argument is an instance of ZoneId this will query the system clock (see {@link Clock#system}) to obtain the current date-time.\n     * Specifying the time-zone avoids dependence on the default time-zone.\n     *\n     * If nor argument is applied, the system default time zone is used to obtain the current date-time.\n     *\n     * Using this method will prevent the ability to use an alternate clock for testing\n     * because the clock is hard-coded.\n     *\n     * @param {Clock|ZoneId} clockOrZone - the zone ID or clock to use, if null Clock.systemDefaultZone() is used.\n     * @return {LocalDateTime} the current date-time using the system clock, not null\n     */\n    static now(clockOrZone) {\n        if (clockOrZone == null){\n            return LocalDateTime._now(Clock.systemDefaultZone());\n        } else if (clockOrZone instanceof Clock){\n            return LocalDateTime._now(clockOrZone);\n        } else {\n            return LocalDateTime._now(Clock.system(clockOrZone));\n        }\n    }\n\n    /**\n     * Obtains the current date-time from the specified clock.\n     *\n     * This will query the specified clock to obtain the current date-time.\n     * Using this method allows the use of an alternate clock for testing.\n     * The alternate clock may be introduced using dependency injection.\n     *\n     * @param {Clock} clock - the clock to use, defaults to Clock.systemDefaultZone()\n     * @return {LocalDateTime} the current date-time, not null\n     */\n    static _now(clock) {\n        requireNonNull(clock, 'clock');\n        return LocalDateTime.ofInstant(clock.instant(), clock.zone());\n\n        // this is an alternative implementation with better performance.\n        // const epochMilli = clock.millis();\n        // const offset = clock.zone().rules().offsetOfEpochMilli(epochMilli);\n        // return LocalDateTime._ofEpochMillis(epochMilli, offset);\n\n    }\n\n    /**\n     * @see comment at {LocalDateTime._now}\n     * @param {number} epochMilli\n     * @param {ZoneOffset} offset\n     * @return {LocalDateTime} the  date-time, not null\n     *\n     */\n    static _ofEpochMillis(epochMilli, offset){\n        const localSecond = MathUtil.floorDiv(epochMilli, 1000) + offset.totalSeconds();\n        const localEpochDay = MathUtil.floorDiv(localSecond, LocalTime.SECONDS_PER_DAY);\n        const secsOfDay = MathUtil.floorMod(localSecond, LocalTime.SECONDS_PER_DAY);\n        const nanoOfSecond = MathUtil.floorMod(epochMilli, 1000) * 1000000;\n        const date = LocalDate.ofEpochDay(localEpochDay);\n        const time = LocalTime.ofSecondOfDay(secsOfDay, nanoOfSecond);\n        return new LocalDateTime(date, time);\n\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * function overloading for {@link LocalDateTime.of}\n     *\n     * if called with 2 arguments and first argument is an instance of LocalDate and second is an\n     * instance of LocalTime, then {@link LocalDateTime.ofDateAndTime} is executed.\n     *\n     * Otherwise {@link LocalDateTime.ofNumbers} is executed.\n     *\n     * @returns {LocalDateTime}\n     */\n    static of(){\n        if (arguments.length <= 2){\n            return LocalDateTime.ofDateAndTime.apply(this, arguments);\n        } else {\n            return LocalDateTime.ofNumbers.apply(this, arguments);\n        }\n    }\n    /**\n     * Obtains an instance of {@link LocalDateTime} from year, month,\n     * day, hour, minute, second and nanosecond.\n     *\n     * The day must be valid for the year and month, otherwise an exception will be thrown.\n     *\n     * @param {number} [year] - the year to represent, from MIN_YEAR to MAX_YEAR\n     * @param {number} [month] - the month-of-year to represent, from 1 to 12 or from a Month\n     * @param {number} [dayOfMonth] - the day-of-month to represent, from 1 to 31\n     * @param {number} [hour=0] - the hour-of-day to represent, from 0 to 23\n     * @param {number} [minute=0] - the minute-of-hour to represent, from 0 to 59\n     * @param {number} [second=0] - the second-of-minute to represent, from 0 to 59\n     * @param {number} [nanoOfSecond=0] - the nano-of-second to represent, from 0 to 999,999,999\n     * @return {LocalDateTime} the local date-time, not null\n     * @throws {DateTimeException} if the value of any field is out of range\n     * @throws {DateTimeException} if the day-of-month is invalid for the month-year\n     */\n    static ofNumbers(year, month, dayOfMonth, hour=0, minute=0, second=0, nanoOfSecond=0) {\n        const date = LocalDate.of(year, month, dayOfMonth);\n        const time = LocalTime.of(hour, minute, second, nanoOfSecond);\n        return new LocalDateTime(date, time);\n    }\n\n    /**\n     * Obtains an instance of {@link LocalDateTime} from a date and time.\n     *\n     * @param {!LocalDate} date - the local date, not null\n     * @param {!LocalTime} time - the local time, not null\n     * @return {LocalDateTime} the local date-time, not null\n     */\n    static ofDateAndTime(date, time) {\n        requireNonNull(date, 'date');\n        requireNonNull(time, 'time');\n        return new LocalDateTime(date, time);\n    }\n\n    //-------------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link LocalDateTime} from an {@link Instant} and zone ID.\n     *\n     * This creates a local date-time based on the specified instant.\n     * First, the offset from UTC/Greenwich is obtained using the zone ID and instant,\n     * which is simple as there is only one valid offset for each instant.\n     * Then, the instant and offset are used to calculate the local date-time.\n     *\n     * @param {!Instant} instant  the instant to create the date-time from, not null\n     * @param {!ZoneId} [zone=ZoneId.systemDefault()]  the time-zone, which may be an offset, defaults to ZoneId.systemDefault()\n     * @return {LocalDateTime} the local date-time, not null\n     * @throws {DateTimeException} if the result exceeds the supported range\n     */\n    static ofInstant(instant, zone=ZoneId.systemDefault()) {\n        requireNonNull(instant, 'instant');\n        requireInstance(instant, Instant, 'instant');\n        requireNonNull(zone, 'zone');\n        const offset = zone.rules().offset(instant);\n        return LocalDateTime.ofEpochSecond(instant.epochSecond(), instant.nano(), offset);\n    }\n\n    /**\n     * Obtains an instance of {@link LocalDateTime} using seconds from the\n     * epoch of 1970-01-01T00:00:00Z.\n     *\n     * This allows the {@link ChronoField.INSTANT_SECONDS} epoch-second field\n     * to be converted to a local date-time. This is primarily intended for\n     * low-level conversions rather than general application usage.\n     *\n     * @param {number} epochSecond - the number of seconds from the epoch of 1970-01-01T00:00:00Z\n     * @param {number|!ZoneOffset} nanoOfSecond - the nanosecond within the second, from 0 to 999,999,999\n     * @param {ZoneOffset} offset - the zone offset, not null if called with 3 arguments\n     * @return {LocalDateTime} the local date-time, not null\n     * @throws {DateTimeException} if the result exceeds the supported range\n     */\n    static ofEpochSecond(epochSecond=0, nanoOfSecond=0, offset) {\n        if(arguments.length === 2 && nanoOfSecond instanceof ZoneOffset){\n            offset = nanoOfSecond;\n            nanoOfSecond = 0;\n        }\n        requireNonNull(offset, 'offset');\n        const localSecond = epochSecond + offset.totalSeconds();  // overflow caught later\n        const localEpochDay = MathUtil.floorDiv(localSecond, LocalTime.SECONDS_PER_DAY);\n        const secsOfDay = MathUtil.floorMod(localSecond, LocalTime.SECONDS_PER_DAY);\n        const date = LocalDate.ofEpochDay(localEpochDay);\n        const time = LocalTime.ofSecondOfDay(secsOfDay, nanoOfSecond);\n        return new LocalDateTime(date, time);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link LocalDateTime} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link LocalDateTime}.\n     *\n     * The conversion extracts and combines {@link LocalDate} and {@link LocalTime}.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used as a query via method reference, {@link LocalDateTime::from}.\n     *\n     * @param {!TemporalAccessor} temporal - the temporal object to convert, not null\n     * @return {LocalDateTime} {LocalDateTime} the local date-time, not null\n     * @throws {DateTimeException} if unable to convert to a {@link LocalDateTime}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        if (temporal instanceof LocalDateTime) {\n            return temporal;\n        } else if (temporal instanceof ZonedDateTime) {\n            return temporal.toLocalDateTime();\n        }\n        try {\n            const date = LocalDate.from(temporal);\n            const time = LocalTime.from(temporal);\n            return new LocalDateTime(date, time);\n        } catch (ex) {\n            throw new DateTimeException(`Unable to obtain LocalDateTime TemporalAccessor: ${temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`);\n        }\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link LocalDateTime} from a text string using a specific formatter.\n     *\n     * The text is parsed using the formatter, returning a date-time.\n     *\n     * @param {!string} text - the text to parse, not null\n     * @param {DateTimeFormatter} [formatter=DateTimeFormatter.ISO_LOCAL_DATE_TIME] - the formatter to use,\n     * defaults to DateTimeFormatter.ISO_LOCAL_DATE_TIME\n     * @return {LocalDateTime} the parsed local date-time, not null\n     * @throws {DateTimeParseException} if the text cannot be parsed\n     */\n    static parse(text, formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.parse(text, LocalDateTime.FROM);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Constructor.\n     *\n     * @param {LocalDate} date - the date part of the date-time, validated not null\n     * @param {LocalTime} time - the time part of the date-time, validated not null\n     * @private\n     */\n    constructor(date, time) {\n        super();\n        requireInstance(date, LocalDate, 'date');\n        requireInstance(time, LocalTime, 'time');\n        this._date = date;\n        this._time = time;\n    }\n\n    /**\n     * Returns a copy of this date-time with the new date and time, checking\n     * to see if a new object is in fact required.\n     *\n     * @param {LocalDate} newDate - the date of the new date-time, not null\n     * @param {LocalTime} newTime - the time of the new date-time, not null\n     * @return {LocalDateTime} the date-time, not null\n     */\n    _withDateTime(newDate, newTime) {\n        if (this._date.equals(newDate) && this._time.equals(newTime)) {\n            return this;\n        }\n        return new LocalDateTime(newDate, newTime);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this date-time can be queried for the specified field.\n     * If false, then calling the {@link LocalDateTime.range} range and\n     * {@link LocalDateTime.get} get methods will throw an exception.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields are:\n     *\n     * * {@link ChronoField.NANO_OF_SECOND}\n     * * {@link ChronoField.NANO_OF_DAY}\n     * * {@link ChronoField.MICRO_OF_SECOND}\n     * * {@link ChronoField.MICRO_OF_DAY}\n     * * {@link ChronoField.MILLI_OF_SECOND}\n     * * {@link ChronoField.MILLI_OF_DAY}\n     * * {@link ChronoField.SECOND_OF_MINUTE}\n     * * {@link ChronoField.SECOND_OF_DAY}\n     * * {@link ChronoField.MINUTE_OF_HOUR}\n     * * {@link ChronoField.MINUTE_OF_DAY}\n     * * {@link ChronoField.HOUR_OF_AMPM}\n     * * {@link ChronoField.CLOCK_HOUR_OF_AMPM}\n     * * {@link ChronoField.HOUR_OF_DAY}\n     * * {@link ChronoField.CLOCK_HOUR_OF_DAY}\n     * * {@link ChronoField.AMPM_OF_DAY}\n     * * {@link ChronoField.DAY_OF_WEEK}\n     * * {@link ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH}\n     * * {@link ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR}\n     * * {@link ChronoField.DAY_OF_MONTH}\n     * * {@link ChronoField.DAY_OF_YEAR}\n     * * {@link ChronoField.EPOCH_DAY}\n     * * {@link ChronoField.ALIGNED_WEEK_OF_MONTH}\n     * * {@link ChronoField.ALIGNED_WEEK_OF_YEAR}\n     * * {@link ChronoField.MONTH_OF_YEAR}\n     * * {@link ChronoField.EPOCH_MONTH}\n     * * {@link ChronoField.YEAR_OF_ERA}\n     * * {@link ChronoField.YEAR}\n     * * {@link ChronoField.ERA}\n     *\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.isSupportedBy}\n     * passing `this` as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {TemporalField|TemporalUnit} fieldOrUnit - the field to check, null returns false\n     * @return {boolean} true if the field is supported on this date-time, false if not\n     */\n    isSupported(fieldOrUnit) {\n        if (fieldOrUnit instanceof ChronoField) {\n            return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n        } else if (fieldOrUnit instanceof ChronoUnit) {\n            return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n        }\n        return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n    }\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * The range object expresses the minimum and maximum valid values for a field.\n     * This date-time is used to enhance the accuracy of the returned range.\n     * If it is not possible to return the range, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return\n     * appropriate range instances.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n     * passing `this` as the argument.\n     * Whether the range can be obtained is determined by the field.\n     *\n     * @param {!TemporalField} field - the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws {DateTimeException} if the range for the field cannot be obtained\n     */\n    range(field) {\n        if (field instanceof ChronoField) {\n            return (field.isTimeBased() ? this._time.range(field) : this._date.range(field));\n        }\n        return field.rangeRefinedBy(this);\n    }\n\n    /**\n     * Gets the value of the specified field from this date-time as an `int`.\n     *\n     * This queries this date-time for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this date-time, except {@link NANO_OF_DAY}, {@link MICRO_OF_DAY},\n     * {@link EPOCH_DAY} and {@link EPOCH_MONTH} which are too large to fit in\n     * an `int` and throw a {@link DateTimeException}.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {!TemporalField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws {DateTimeException} if a value for the field cannot be obtained\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    get(field) {\n        if (field instanceof ChronoField) {\n            return (field.isTimeBased() ? this._time.get(field) : this._date.get(field));\n        }\n        return super.get(field);\n    }\n\n    /**\n     * Gets the value of the specified field from this date-time as a `long`.\n     *\n     * This queries this date-time for the value for the specified field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this date-time.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {!TemporalField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws {DateTimeException} if a value for the field cannot be obtained\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    getLong(field) {\n        requireNonNull(field, 'field');\n        if (field instanceof ChronoField) {\n            return (field.isTimeBased() ? this._time.getLong(field) : this._date.getLong(field));\n        }\n        return field.getFrom(this);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the year field.\n     *\n     * This method returns the primitive `int` value for the year.\n     *\n     * The year returned by this method is proleptic as per `get(YEAR)`.\n     * To obtain the year-of-era, use `get(YEAR_OF_ERA)`.\n     *\n     * @return {number} the year, from MIN_YEAR to MAX_YEAR\n     */\n    year() {\n        return this._date.year();\n    }\n\n    /**\n     * Gets the month-of-year field from 1 to 12.\n     *\n     * This method returns the month as an `int` from 1 to 12.\n     * Application code is frequently clearer if the enum {@link Month}\n     * is used by calling {@link getMonth}.\n     *\n     * @return {number} the month-of-year, from 1 to 12\n     * @see #getMonth()\n     */\n    monthValue() {\n        return this._date.monthValue();\n    }\n\n    /**\n     * Gets the month-of-year field using the {@link Month} enum.\n     *\n     * This method returns the enum {@link Month} for the month.\n     * This avoids confusion as to what `int` values mean.\n     * If you need access to the primitive `int` value, use\n     * {@link Month#getValue}.\n     *\n     * @return {Month} the month-of-year, not null\n     * @see #getMonthValue()\n     */\n    month() {\n        return this._date.month();\n    }\n\n    /**\n     * Gets the day-of-month field.\n     *\n     * This method returns the primitive `int` value for the day-of-month.\n     *\n     * @return {number} the day-of-month, from 1 to 31\n     */\n    dayOfMonth() {\n        return this._date.dayOfMonth();\n    }\n\n    /**\n     * Gets the day-of-year field.\n     *\n     * This method returns the primitive `int` value for the day-of-year.\n     *\n     * @return {number} the day-of-year, from 1 to 365, or 366 in a leap year\n     */\n    dayOfYear() {\n        return this._date.dayOfYear();\n    }\n\n    /**\n     * Gets the day-of-week field, which is an enum {@link DayOfWeek}.\n     *\n     * This method returns the enum {@link DayOfWeek} for the day-of-week.\n     * This avoids confusion as to what `int` values mean.\n     * If you need access to the primitive `int` value, use\n     * {@link DayOfWeek#getValue}.\n     *\n     * Additional information can be obtained from the {@link DayOfWeek}.\n     * This includes textual names of the values.\n     *\n     * @return {DayOfWeek} the day-of-week, not null\n     */\n    dayOfWeek() {\n        return this._date.dayOfWeek();\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the hour-of-day field.\n     *\n     * @return {number} the hour-of-day, from 0 to 23\n     */\n    hour() {\n        return this._time.hour();\n    }\n\n    /**\n     * Gets the minute-of-hour field.\n     *\n     * @return {number} the minute-of-hour, from 0 to 59\n     */\n    minute() {\n        return this._time.minute();\n    }\n\n    /**\n     * Gets the second-of-minute field.\n     *\n     * @return {number} the second-of-minute, from 0 to 59\n     */\n    second() {\n        return this._time.second();\n    }\n\n    /**\n     * Gets the nano-of-second field.\n     *\n     * @return {number} the nano-of-second, from 0 to 999,999,999\n     */\n    nano() {\n        return this._time.nano();\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns an adjusted copy of this date-time.\n     *\n     * This returns a new {@link LocalDateTime}, based on this one, with the date-time adjusted.\n     * The adjustment takes place using the specified adjuster strategy object.\n     * Read the documentation of the adjuster to understand what adjustment will be made.\n     *\n     * A simple adjuster might simply set the one of the fields, such as the year field.\n     * A more complex adjuster might set the date to the last day of the month.\n     * A selection of common adjustments is provided in {@link TemporalAdjusters}.\n     * These include finding the 'last day of the month' and 'next Wednesday'.\n     * Key date-time classes also implement the {@link TemporalAdjuster} interface,\n     * such as {@link Month} and {@link MonthDay}.\n     * The adjuster is responsible for handling special cases, such as the varying\n     * lengths of month and leap years.\n     *\n     * For example this code returns a date on the last day of July:\n     * <pre>\n     *  import static org.threeten.bp.Month.*;\n     *  import static org.threeten.bp.temporal.Adjusters.*;\n     *\n     *  result = localDateTime.with(JULY).with(lastDayOfMonth());\n     * </pre>\n     *\n     * The classes {@link LocalDate} and {@link LocalTime} implement {@link TemporalAdjuster},\n     * thus this method can be used to change the date, time or offset:\n     * <pre>\n     *  result = localDateTime.with(date);\n     *  result = localDateTime.with(time);\n     * </pre>\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalAdjuster#adjustInto} method on the\n     * specified adjuster passing `this` as the argument.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalAdjuster} adjuster the adjuster to use, not null\n     * @return {LocalDateTime} a {@link LocalDateTime} based on `this` with the adjustment made, not null\n     * @throws {DateTimeException} if the adjustment cannot be made\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    _withAdjuster(adjuster) {\n        requireNonNull(adjuster, 'adjuster');\n        // optimizations\n        if (adjuster instanceof LocalDate) {\n            return this._withDateTime(adjuster, this._time);\n        } else if (adjuster instanceof LocalTime) {\n            return this._withDateTime(this._date, adjuster);\n        } else if (adjuster instanceof LocalDateTime) {\n            return adjuster;\n        }\n        return super._withAdjuster(adjuster);\n    }\n\n    /**\n     * Returns a copy of this date-time with the specified field set to a new value.\n     *\n     * This returns a new {@link LocalDateTime}, based on this one, with the value\n     * for the specified field changed.\n     * This can be used to change any supported field, such as the year, month or day-of-month.\n     * If it is not possible to set the value, because the field is not supported or for\n     * some other reason, an exception is thrown.\n     *\n     * In some cases, changing the specified field can cause the resulting date-time to become invalid,\n     * such as changing the month from 31st January to February would make the day-of-month invalid.\n     * In cases like this, the field is responsible for resolving the date. Typically it will choose\n     * the previous valid date, which would be the last valid day of February in this example.\n     *\n     * If the field is a {@link ChronoField} then the adjustment is implemented here.\n     * The supported fields (see {@link isSupported}) will behave as in\n     * {@link LocalDate#with} or {@link LocalTime#with}.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.adjustInto}\n     * passing `this` as the argument. In this case, the field determines\n     * whether and how to adjust the instant.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalField} field - the field to set in the result, not null\n     * @param {number} newValue - the new value of the field in the result\n     * @return {LocalDateTime} a {@link LocalDateTime} based on `this` with the specified field set, not null\n     * @throws {DateTimeException} if the field cannot be set\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    _withField(field, newValue) {\n        requireNonNull(field, 'field');\n        if (field instanceof ChronoField) {\n            if (field.isTimeBased()) {\n                return this._withDateTime(this._date, this._time.with(field, newValue));\n            } else {\n                return this._withDateTime(this._date.with(field, newValue), this._time);\n            }\n        }\n        return field.adjustInto(this, newValue);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the year altered.\n     * The time does not affect the calculation and will be the same in the result.\n     * If the day-of-month is invalid for the year, it will be changed to the last valid day of the month.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} year - the year to set in the result, from MIN_YEAR to MAX_YEAR\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested year, not null\n     * @throws {DateTimeException} if the year value is invalid\n     */\n    withYear(year) {\n        return this._withDateTime(this._date.withYear(year), this._time);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the month-of-year altered.\n     * The time does not affect the calculation and will be the same in the result.\n     * If the day-of-month is invalid for the year, it will be changed to the last valid day of the month.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {!(number|Month)} month - the month-of-year to set in the result, from 1 (January) to 12 (December)\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested month, not null\n     * @throws {DateTimeException} if the month-of-year value is invalid\n     */\n    withMonth(month) {\n        return this._withDateTime(this._date.withMonth(month), this._time);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the day-of-month altered.\n     * If the resulting {@link LocalDateTime} is invalid, an exception is thrown.\n     * The time does not affect the calculation and will be the same in the result.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} dayOfMonth - the day-of-month to set in the result, from 1 to 28-31\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested day, not null\n     * @throws {DateTimeException} if the day-of-month value is invalid\n     * @throws {DateTimeException} if the day-of-month is invalid for the month-year\n     */\n    withDayOfMonth(dayOfMonth) {\n        return this._withDateTime(this._date.withDayOfMonth(dayOfMonth), this._time);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the day-of-year altered.\n     * If the resulting {@link LocalDateTime} is invalid, an exception is thrown.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} dayOfYear - the day-of-year to set in the result, from 1 to 365-366\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date with the requested day, not null\n     * @throws {DateTimeException} if the day-of-year value is invalid\n     * @throws {DateTimeException} if the day-of-year is invalid for the year\n     */\n    withDayOfYear(dayOfYear) {\n        return this._withDateTime(this._date.withDayOfYear(dayOfYear), this._time);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the hour-of-day value altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} hour - the hour-of-day to set in the result, from 0 to 23\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested hour, not null\n     * @throws {DateTimeException} if the hour value is invalid\n     */\n    withHour(hour) {\n        const newTime = this._time.withHour(hour);\n        return this._withDateTime(this._date, newTime);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the minute-of-hour value altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} minute - the minute-of-hour to set in the result, from 0 to 59\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested minute, not null\n     * @throws {DateTimeException} if the minute value is invalid\n     */\n    withMinute(minute) {\n        const newTime = this._time.withMinute(minute);\n        return this._withDateTime(this._date, newTime);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the second-of-minute value altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} second - the second-of-minute to set in the result, from 0 to 59\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested second, not null\n     * @throws {DateTimeException} if the second value is invalid\n     */\n    withSecond(second) {\n        const newTime = this._time.withSecond(second);\n        return this._withDateTime(this._date, newTime);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the nano-of-second value altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} nanoOfSecond - the nano-of-second to set in the result, from 0 to 999,999,999\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested nanosecond, not null\n     * @throws {DateTimeException} if the nano value is invalid\n     */\n    withNano(nanoOfSecond) {\n        const newTime = this._time.withNano(nanoOfSecond);\n        return this._withDateTime(this._date, newTime);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the time truncated.\n     *\n     * Truncation returns a copy of the original date-time with fields\n     * smaller than the specified unit set to zero.\n     * For example, truncating with {@link ChronoUnit#MINUTES}\n     * will set the second-of-minute and nano-of-second field to zero.\n     *\n     * The unit must have a duration (see {@link TemporalUnit#getDuration})\n     * that divides into the length of a standard day without remainder.\n     * This includes all supplied time units on {@link ChronoUnit} and\n     * {@link ChronoUnit#DAYS}. Other units throw an exception.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalUnit} unit - the unit to truncate to, not null\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the time truncated, not null\n     * @throws {DateTimeException} if unable to truncate\n     */\n    truncatedTo(unit) {\n        return this._withDateTime(this._date, this._time.truncatedTo(unit));\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns a copy of this date-time with the specified period added.\n     *\n     * This method returns a new date-time based on this date-time with the specified period added.\n     * This can be used to add any period that is defined by a unit, for example to add years, months or days.\n     * The unit is responsible for the details of the calculation, including the resolution\n     * of any edge cases in the calculation.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} amountToAdd - the amount of the unit to add to the result, may be negative\n     * @param {!TemporalUnit} unit - the unit of the period to add, not null\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the specified period added, not null\n     * @throws {DateTimeException} if the unit cannot be added to this type\n     */\n    _plusUnit(amountToAdd, unit) {\n        requireNonNull(unit, 'unit');\n        if (unit instanceof ChronoUnit) {\n            switch (unit) {\n                case ChronoUnit.NANOS: return this.plusNanos(amountToAdd);\n                case ChronoUnit.MICROS: return this.plusDays(MathUtil.intDiv(amountToAdd, LocalTime.MICROS_PER_DAY)).plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MICROS_PER_DAY) * 1000);\n                case ChronoUnit.MILLIS: return this.plusDays(MathUtil.intDiv(amountToAdd, LocalTime.MILLIS_PER_DAY)).plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MILLIS_PER_DAY) * 1000000);\n                case ChronoUnit.SECONDS: return this.plusSeconds(amountToAdd);\n                case ChronoUnit.MINUTES: return this.plusMinutes(amountToAdd);\n                case ChronoUnit.HOURS: return this.plusHours(amountToAdd);\n                case ChronoUnit.HALF_DAYS: return this.plusDays(MathUtil.intDiv(amountToAdd, 256)).plusHours(MathUtil.intMod(amountToAdd, 256) * 12);  // no overflow (256 is multiple of 2)\n            }\n            return this._withDateTime(this._date.plus(amountToAdd, unit), this._time);\n        }\n        return unit.addTo(this, amountToAdd);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in years added.\n     *\n     * This method adds the specified amount to the years field in three steps:\n     *\n     * 1. Add the input years to the year field\n     * 2. Check if the resulting date would be invalid\n     * 3. Adjust the day-of-month to the last valid day if necessary\n     *\n     * For example, 2008-02-29 (leap year) plus one year would result in the\n     * invalid date 2009-02-29 (standard year). Instead of returning an invalid\n     * result, the last valid day of the month, 2009-02-28, is selected instead.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} years - the years to add, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the years added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusYears(years) {\n        const newDate = this._date.plusYears(years);\n        return this._withDateTime(newDate, this._time);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in months added.\n     *\n     * This method adds the specified amount to the months field in three steps:\n     *\n     * 1. Add the input months to the month-of-year field\n     * 2. Check if the resulting date would be invalid\n     * 3. Adjust the day-of-month to the last valid day if necessary\n     *\n     * For example, 2007-03-31 plus one month would result in the invalid date\n     * 2007-04-31. Instead of returning an invalid result, the last valid day\n     * of the month, 2007-04-30, is selected instead.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} months - the months to add, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the months added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusMonths(months) {\n        const newDate = this._date.plusMonths(months);\n        return this._withDateTime(newDate, this._time);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in weeks added.\n     *\n     * This method adds the specified amount in weeks to the days field incrementing\n     * the month and year fields as necessary to ensure the result remains valid.\n     * The result is only invalid if the maximum/minimum year is exceeded.\n     *\n     * For example, 2008-12-31 plus one week would result in 2009-01-07.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} weeks - the weeks to add, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the weeks added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusWeeks(weeks) {\n        const newDate = this._date.plusWeeks(weeks);\n        return this._withDateTime(newDate, this._time);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in days added.\n     *\n     * This method adds the specified amount to the days field incrementing the\n     * month and year fields as necessary to ensure the result remains valid.\n     * The result is only invalid if the maximum/minimum year is exceeded.\n     *\n     * For example, 2008-12-31 plus one day would result in 2009-01-01.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} days - the days to add, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the days added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusDays(days) {\n        const newDate = this._date.plusDays(days);\n        return this._withDateTime(newDate, this._time);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in hours added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} hours - the hours to add, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the hours added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusHours(hours) {\n        return this._plusWithOverflow(this._date, hours, 0, 0, 0, 1);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in minutes added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} minutes - the minutes to add, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the minutes added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusMinutes(minutes) {\n        return this._plusWithOverflow(this._date, 0, minutes, 0, 0, 1);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in seconds added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} seconds - the seconds to add, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the seconds added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusSeconds(seconds) {\n        return this._plusWithOverflow(this._date, 0, 0, seconds, 0, 1);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in nanoseconds added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} nanos - the nanos to add, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the nanoseconds added, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    plusNanos(nanos) {\n        return this._plusWithOverflow(this._date, 0, 0, 0, nanos, 1);\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns a copy of this date-time with the specified period subtracted.\n     *\n     * This method returns a new date-time based on this date-time with the specified period subtracted.\n     * This can be used to subtract any period that is defined by a unit, for example to subtract years, months or days.\n     * The unit is responsible for the details of the calculation, including the resolution\n     * of any edge cases in the calculation.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} amountToSubtract - the amount of the unit to subtract from the result, may be negative\n     * @param {TemporalUnit} unit - the unit of the period to subtract, not null\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the specified period subtracted, not null\n     * @throws {DateTimeException} if the unit cannot be added to this type\n     */\n    _minusUnit(amountToSubtract, unit) {\n        requireNonNull(unit, 'unit');\n        return this._plusUnit(-1 * amountToSubtract, unit);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in years subtracted.\n     *\n     * This method subtracts the specified amount from the years field in three steps:\n     *\n     * 1. Subtract the input years from the year field\n     * 2. Check if the resulting date would be invalid\n     * 3. Adjust the day-of-month to the last valid day if necessary\n     *\n     * For example, 2008-02-29 (leap year) minus one year would result in the\n     * invalid date 2009-02-29 (standard year). Instead of returning an invalid\n     * result, the last valid day of the month, 2009-02-28, is selected instead.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} years - the years to subtract, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the years subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusYears(years) {\n        return this.plusYears(-1 * years);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in months subtracted.\n     *\n     * This method subtracts the specified amount from the months field in three steps:\n     *\n     * 1. Subtract the input months from the month-of-year field\n     * 2. Check if the resulting date would be invalid\n     * 3. Adjust the day-of-month to the last valid day if necessary\n     *\n     * For example, 2007-03-31 minus one month would result in the invalid date\n     * 2007-04-31. Instead of returning an invalid result, the last valid day\n     * of the month, 2007-04-30, is selected instead.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} months - the months to subtract, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the months subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusMonths(months) {\n        return this.plusMonths(-1 * months);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in weeks subtracted.\n     *\n     * This method subtracts the specified amount in weeks from the days field decrementing\n     * the month and year fields as necessary to ensure the result remains valid.\n     * The result is only invalid if the maximum/minimum year is exceeded.\n     *\n     * For example, 2009-01-07 minus one week would result in 2008-12-31.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} weeks - the weeks to subtract, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the weeks subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusWeeks(weeks) {\n        return this.plusWeeks(-1 * weeks);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in days subtracted.\n     *\n     * This method subtracts the specified amount from the days field incrementing the\n     * month and year fields as necessary to ensure the result remains valid.\n     * The result is only invalid if the maximum/minimum year is exceeded.\n     *\n     * For example, 2009-01-01 minus one day would result in 2008-12-31.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} days - the days to subtract, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the days subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusDays(days) {\n        return this.plusDays(-1 * days);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in hours subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} hours - the hours to subtract, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the hours subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusHours(hours) {\n        return this._plusWithOverflow(this._date, hours, 0, 0, 0, -1);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in minutes subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} minutes - the minutes to subtract, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the minutes subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusMinutes(minutes) {\n        return this._plusWithOverflow(this._date, 0, minutes, 0, 0, -1);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in seconds subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} seconds - the seconds to subtract, may be negative\n     * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the seconds subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusSeconds(seconds) {\n        return this._plusWithOverflow(this._date, 0, 0, seconds, 0, -1);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period in nanoseconds subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Number} nanos - the nanos to subtract, may be negative\n     * @return {LocalDateTime} based on this date-time with the nanoseconds subtracted, not null\n     * @throws {DateTimeException} if the result exceeds the supported date range\n     */\n    minusNanos(nanos) {\n        return this._plusWithOverflow(this._date, 0, 0, 0, nanos, -1);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalDateTime} with the specified period added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {LocalDate} newDate  the new date to base the calculation on, not null\n     * @param {Number} hours - the hours to add, may be negative\n     * @param {Number} minutes - the minutes to add, may be negative\n     * @param {Number} seconds - the seconds to add, may be negative\n     * @param {Number} nanos - the nanos to add, may be negative\n     * @param {Number} sign - the sign to determine add or subtract\n     * @return {LocalDateTime} the combined result, not null\n     */\n    _plusWithOverflow(newDate, hours, minutes, seconds, nanos, sign) {\n        // 9223372036854775808 long, 2147483648 int\n        if (hours === 0 && minutes === 0 && seconds === 0 && nanos === 0) {\n            return this._withDateTime(newDate, this._time);\n        }\n        let totDays = MathUtil.intDiv(nanos, LocalTime.NANOS_PER_DAY) +             //   max/24*60*60*1B\n                MathUtil.intDiv(seconds, LocalTime.SECONDS_PER_DAY) +                //   max/24*60*60\n                MathUtil.intDiv(minutes, LocalTime.MINUTES_PER_DAY) +                //   max/24*60\n                MathUtil.intDiv(hours, LocalTime.HOURS_PER_DAY);                     //   max/24\n        totDays *= sign;                                   // total max*0.4237...\n        let totNanos = MathUtil.intMod(nanos, LocalTime.NANOS_PER_DAY) +                    //   max  86400000000000\n                (MathUtil.intMod(seconds, LocalTime.SECONDS_PER_DAY)) * LocalTime.NANOS_PER_SECOND +   //   max  86400000000000\n                (MathUtil.intMod(minutes, LocalTime.MINUTES_PER_DAY)) * LocalTime.NANOS_PER_MINUTE +   //   max  86400000000000\n                (MathUtil.intMod(hours, LocalTime.HOURS_PER_DAY)) * LocalTime.NANOS_PER_HOUR;          //   max  86400000000000\n        const curNoD = this._time.toNanoOfDay();                       //   max  86400000000000\n        totNanos = totNanos * sign + curNoD;                    // total 432000000000000\n        totDays += MathUtil.floorDiv(totNanos, LocalTime.NANOS_PER_DAY);\n        const newNoD = MathUtil.floorMod(totNanos, LocalTime.NANOS_PER_DAY);\n        const newTime = (newNoD === curNoD ? this._time : LocalTime.ofNanoOfDay(newNoD));\n        return this._withDateTime(newDate.plusDays(totDays), newTime);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Queries this date-time using the specified query.\n     *\n     * This queries this date-time using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing `this` as the argument.\n     *\n     * @param {TemporalQuery} query  the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws {DateTimeException} if unable to query (defined by the query)\n     * @throws {ArithmeticException} if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        requireNonNull(query, 'query');\n        if (query === TemporalQueries.localDate()) {\n            return this.toLocalDate();\n        }\n        return super.query(query);\n    }\n\n    /**\n     * Adjusts the specified temporal object to have the same date and time as this object.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with the date and time changed to be the same as this.\n     *\n     * The adjustment is equivalent to using {@link Temporal#with}\n     * twice, passing {@link ChronoField#EPOCH_DAY} and\n     * {@link ChronoField#NANO_OF_DAY} as the fields.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisLocalDateTime.adjustInto(temporal);\n     *   temporal = temporal.with(thisLocalDateTime);\n     * </pre>\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalAdjuster} temporal - the target object to be adjusted, not null\n     * @return {LocalDateTime} the adjusted object, not null\n     * @throws {DateTimeException} if unable to make the adjustment\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        return super.adjustInto(temporal);\n    }\n\n    /**\n     * Calculates the period between this date-time and another date-time in\n     * terms of the specified unit.\n     *\n     * This calculates the period between two date-times in terms of a single unit.\n     * The start and end points are `this` and the specified date-time.\n     * The result will be negative if the end is before the start.\n     * The {@link Temporal} passed to this method must be a {@link LocalDateTime}.\n     * For example, the period in days between two date-times can be calculated\n     * using `startDateTime.until(endDateTime, DAYS)`.\n     *\n     * The calculation returns a whole number, representing the number of\n     * complete units between the two date-times.\n     * For example, the period in months between 2012-06-15T00:00 and 2012-08-14T23:59\n     * will only be one month as it is one minute short of two months.\n     *\n     * This method operates in association with {@link TemporalUnit#between}.\n     * The result of this method is a `long` representing the amount of\n     * the specified unit. By contrast, the result of {@link between} is an\n     * object that can be used directly in addition/subtraction:\n     * <pre>\n     *   long period = start.until(end, MONTHS);   // this method\n     *   dateTime.plus(MONTHS.between(start, end));      // use in plus/minus\n     * </pre>\n     *\n     * The calculation is implemented in this method for {@link ChronoUnit}.\n     * The units {@link NANOS}, {@link MICROS}, {@link MILLIS}, {@link SECONDS},\n     * {@link MINUTES}, {@link HOURS} and {@link HALF_DAYS}, {@link DAYS},\n     * {@link WEEKS}, {@link MONTHS}, {@link YEARS}, {@link DECADES},\n     * {@link CENTURIES}, {@link MILLENNIA} and {@link ERAS} are supported.\n     * Other {@link ChronoUnit} values will throw an exception.\n     *\n     * If the unit is not a {@link ChronoUnit}, then the result of this method\n     * is obtained by invoking {@link TemporalUnit.between}\n     * passing `this` as the first argument and the input temporal as\n     * the second argument.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} endExclusive - the end date-time, which is converted to a {@link LocalDateTime}, not null\n     * @param {TemporalUnit} unit - the unit to measure the period in, not null\n     * @return {number} the amount of the period between this date-time and the end date-time\n     * @throws {DateTimeException} if the period cannot be calculated\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    until(endExclusive, unit) {\n        requireNonNull(endExclusive, 'endExclusive');\n        requireNonNull(unit, 'unit');\n        const end = LocalDateTime.from(endExclusive);\n        if (unit instanceof ChronoUnit) {\n            if (unit.isTimeBased()) {\n                let daysUntil = this._date.daysUntil(end._date);\n                let timeUntil = end._time.toNanoOfDay() - this._time.toNanoOfDay();\n                if (daysUntil > 0 && timeUntil < 0) {\n                    daysUntil--;\n                    timeUntil += LocalTime.NANOS_PER_DAY;\n                } else if (daysUntil < 0 && timeUntil > 0) {\n                    daysUntil++;\n                    timeUntil -= LocalTime.NANOS_PER_DAY;\n                }\n                let amount = daysUntil;\n                switch (unit) {\n                    case ChronoUnit.NANOS:\n                        amount = MathUtil.safeMultiply(amount, LocalTime.NANOS_PER_DAY);\n                        return MathUtil.safeAdd(amount, timeUntil);\n                    case ChronoUnit.MICROS:\n                        amount = MathUtil.safeMultiply(amount, LocalTime.MICROS_PER_DAY);\n                        return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, 1000));\n                    case ChronoUnit.MILLIS:\n                        amount = MathUtil.safeMultiply(amount, LocalTime.MILLIS_PER_DAY);\n                        return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, 1000000));\n                    case ChronoUnit.SECONDS:\n                        amount = MathUtil.safeMultiply(amount, LocalTime.SECONDS_PER_DAY);\n                        return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_SECOND));\n                    case ChronoUnit.MINUTES:\n                        amount = MathUtil.safeMultiply(amount, LocalTime.MINUTES_PER_DAY);\n                        return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_MINUTE));\n                    case ChronoUnit.HOURS:\n                        amount = MathUtil.safeMultiply(amount, LocalTime.HOURS_PER_DAY);\n                        return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_HOUR));\n                    case ChronoUnit.HALF_DAYS:\n                        amount = MathUtil.safeMultiply(amount, 2);\n                        return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, (LocalTime.NANOS_PER_HOUR * 12)));\n                }\n                throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n            }\n            let endDate = end._date;\n            const endTime = end._time;\n            if (endDate.isAfter(this._date) && endTime.isBefore(this._time)) {\n                endDate = endDate.minusDays(1);\n            } else if (endDate.isBefore(this._date) && endTime.isAfter(this._time)) {\n                endDate = endDate.plusDays(1);\n            }\n            return this._date.until(endDate, unit);\n        }\n        return unit.between(this, end);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Combines this date-time with an offset to create an {@link OffsetDateTime}.\n     *\n     * This returns an {@link OffsetDateTime} formed from this date-time at the specified offset.\n     * All possible combinations of date-time and offset are valid.\n     *\n     * @param {ZoneOffset} offset  the offset to combine with, not null\n     * @return {OffsetDateTime} the offset date-time formed from this date-time and the specified offset, not null\n     */\n    atOffset(offset) {\n        return OffsetDateTime.of(this, offset);\n    }\n\n    /**\n     * Combines this date-time with a time-zone to create a {@link ZonedDateTime}.\n     *\n     * This returns a {@link ZonedDateTime} formed from this date-time at the\n     * specified time-zone. The result will match this date-time as closely as possible.\n     * Time-zone rules, such as daylight savings, mean that not every local date-time\n     * is valid for the specified zone, thus the local date-time may be adjusted.\n     *\n     * The local date-time is resolved to a single instant on the time-line.\n     * This is achieved by finding a valid offset from UTC/Greenwich for the local\n     * date-time as defined by the {@link ZoneRules} of the zone ID.\n     *\n     * In most cases, there is only one valid offset for a local date-time.\n     * In the case of an overlap, where clocks are set back, there are two valid offsets.\n     * This method uses the earlier offset typically corresponding to 'summer'.\n     *\n     * In the case of a gap, where clocks jump forward, there is no valid offset.\n     * Instead, the local date-time is adjusted to be later by the length of the gap.\n     * For a typical one hour daylight savings change, the local date-time will be\n     * moved one hour later into the offset typically corresponding to 'summer'.\n     *\n     * To obtain the later offset during an overlap, call\n     * {@link ZonedDateTime#withLaterOffsetAtOverlap} on the result of this method.\n     * To throw an exception when there is a gap or overlap, use\n     * {@link ZonedDateTime#ofStrict}.\n     *\n     * @param {ZoneId} zone  the time-zone to use, not null\n     * @return {ZonedDateTime} the zoned date-time formed from this date-time, not null\n     */\n    atZone(zone) {\n        return ZonedDateTime.of(this, zone);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the {@link LocalDate} part of this date-time.\n     *\n     * This returns a {@link LocalDate} with the same year, month and day\n     * as this date-time.\n     *\n     * @return {LocalDate} the date part of this date-time, not null\n     */\n    toLocalDate() {\n        return this._date;\n    }\n\n    /**\n     * Gets the {@link LocalTime} part of this date-time.\n     *\n     * This returns a {@link LocalTime} with the same hour, minute, second and\n     * nanosecond as this date-time.\n     *\n     * @return {LocalTime} the time part of this date-time, not null\n     */\n    toLocalTime() {\n        return this._time;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Compares this date-time to another date-time.\n     *\n     * The comparison is primarily based on the date-time, from earliest to latest.\n     * It is 'consistent with equals', as defined by {@link Comparable}.\n     *\n     * If all the date-times being compared are instances of {@link LocalDateTime},\n     * then the comparison will be entirely based on the date-time.\n     * If some dates being compared are in different chronologies, then the\n     * chronology is also considered, see {@link ChronoLocalDateTime#compareTo}.\n     *\n     * @param {!LocalDateTime} other - the other date-time to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     */\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, LocalDateTime, 'other');\n        return this._compareTo0(other);\n        // return super.compareTo(other); if not instance of  LocalDateTime\n    }\n\n    /**\n     *\n     * @param {!LocalDateTime} other\n     * @returns {number}\n     * @private\n     */\n    _compareTo0(other) {\n        let cmp = this._date.compareTo(other.toLocalDate());\n        if (cmp === 0) {\n            cmp = this._time.compareTo(other.toLocalTime());\n        }\n        return cmp;\n    }\n\n    /**\n     * Checks if this date-time is after the specified date-time.\n     *\n     * This checks to see if this date-time represents a point on the\n     * local time-line after the other date-time.\n     * <pre>\n     *   LocalDate a = LocalDateTime.of(2012, 6, 30, 12, 00);\n     *   LocalDate b = LocalDateTime.of(2012, 7, 1, 12, 00);\n     *   a.isAfter(b) == false\n     *   a.isAfter(a) == false\n     *   b.isAfter(a) == true\n     * </pre>\n     *\n     * This method only considers the position of the two date-times on the local time-line.\n     * It does not take into account the chronology, or calendar system.\n     * This is different from the comparison in {@link compareTo},\n     * but is the same approach as {@link DATE_TIME_COMPARATOR}.\n     *\n     * @param {LocalDateTime} other - the other date-time to compare to, not null\n     * @return {boolean} true if this date-time is after the specified date-time\n     */\n    isAfter(other) {\n        return this.compareTo(other) > 0;\n        // return super.isAfter(other);  if not instance of LocalDateTime\n    }\n\n    /**\n     * Checks if this date-time is before the specified date-time.\n     *\n     * This checks to see if this date-time represents a point on the\n     * local time-line before the other date-time.\n     * <pre>\n     *   LocalDate a = LocalDateTime.of(2012, 6, 30, 12, 00);\n     *   LocalDate b = LocalDateTime.of(2012, 7, 1, 12, 00);\n     *   a.isBefore(b) == true\n     *   a.isBefore(a) == false\n     *   b.isBefore(a) == false\n     * </pre>\n     *\n     * This method only considers the position of the two date-times on the local time-line.\n     * It does not take into account the chronology, or calendar system.\n     * This is different from the comparison in {@link compareTo},\n     * but is the same approach as {@link DATE_TIME_COMPARATOR}.\n     *\n     * @param {LocalDateTime} other - the other date-time to compare to, not null\n     * @return {boolean} true if this date-time is before the specified date-time\n     */\n    isBefore(other) {\n        return this.compareTo(other) < 0;\n        // return super.isBefore(other);  if not instance of LocalDateTime\n    }\n\n    /**\n     * Checks if this date-time is equal to the specified date-time.\n     *\n     * This checks to see if this date-time represents the same point on the\n     * local time-line as the other date-time.\n     * <pre>\n     *   LocalDate a = LocalDateTime.of(2012, 6, 30, 12, 00);\n     *   LocalDate b = LocalDateTime.of(2012, 7, 1, 12, 00);\n     *   a.isEqual(b) == false\n     *   a.isEqual(a) == true\n     *   b.isEqual(a) == false\n     * </pre>\n     *\n     * This method only considers the position of the two date-times on the local time-line.\n     * It does not take into account the chronology, or calendar system.\n     * This is different from the comparison in {@link compareTo},\n     * but is the same approach as {@link DATE_TIME_COMPARATOR}.\n     *\n     * @param {LocalDateTime} other - the other date-time to compare to, not null\n     * @return {boolean} true if this date-time is equal to the specified date-time\n     */\n    isEqual(other) {\n        return this.compareTo(other) === 0;\n        // return super.isEqual(other); if not instance of LocalDateTime\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this date-time is equal to another date-time.\n     *\n     * Compares this {@link LocalDateTime} with another ensuring that the date-time is the same.\n     * Only objects of type {@link LocalDateTime} are compared, other types return false.\n     *\n     * @param {*} other - the object to check, null returns false\n     * @return {boolean} true if this is equal to the other date-time\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof LocalDateTime) {\n            return this._date.equals(other._date) && this._time.equals(other._time);\n        }\n        return false;\n    }\n\n    /**\n     * A hash code for this date-time.\n     *\n     * @return {number} a suitable hash code\n     */\n    hashCode() {\n        return this._date.hashCode() ^ this._time.hashCode();\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Outputs this date-time as a string, such as `2007-12-03T10:15:30`.\n     *\n     * The output will be one of the following ISO-8601 formats:\n     *\n     * * `yyyy-MM-dd'T'HH:mm`\n     * * `yyyy-MM-dd'T'HH:mm:ss`\n     * * `yyyy-MM-dd'T'HH:mm:ss.SSS`\n     * * `yyyy-MM-dd'T'HH:mm:ss.SSSSSS`\n     * * `yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS`\n     *\n     * The format used will be the shortest that outputs the full value of\n     * the time where the omitted parts are implied to be zero.\n     *\n     * @return {string} a string representation of this date-time, not null\n     */\n    toString() {\n        return `${this._date.toString()}T${this._time.toString()}`;\n    }\n\n    /**\n     *\n     * @return {string} same as {@link LocalDateTime.toString}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n    /**\n     * Outputs this date-time as a string using the formatter.\n     *\n     * @param {!DateTimeFormatter} formatter  the formatter to use, not null\n     * @return {String} the formatted date-time string, not null\n     * @throws {DateTimeException} if an error occurs during printing\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.format(this);\n    }\n\n}\n\nexport function _init(){\n    /**\n     * The minimum supported {@link LocalDateTime}, '-999999999-01-01T00:00:00'.\n     * This is the local date-time of midnight at the start of the minimum date.\n     * This combines {@link LocalDate#MIN} and {@link LocalTime#MIN}.\n     * This could be used by an application as a 'far past' date-time.\n     */\n    LocalDateTime.MIN = LocalDateTime.of(LocalDate.MIN, LocalTime.MIN);\n\n    /**\n     * The maximum supported {@link LocalDateTime}, '+999999999-12-31T23:59:59.999999999'.\n     * This is the local date-time just before midnight at the end of the maximum date.\n     * This combines {@link LocalDate#MAX} and {@link LocalTime#MAX}.\n     * This could be used by an application as a 'far future' date-time.\n     */\n    LocalDateTime.MAX = LocalDateTime.of(LocalDate.MAX, LocalTime.MAX);\n\n    LocalDateTime.FROM = createTemporalQuery('LocalDateTime.FROM', (temporal) => {\n        return LocalDateTime.from(temporal);\n    });\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n\nimport { MathUtil } from './MathUtil';\nimport { requireNonNull, requireInstance } from './assert';\nimport { DateTimeException, UnsupportedTemporalTypeException } from './errors';\n\nimport { Clock } from './Clock';\nimport { LocalDateTime } from './LocalDateTime';\nimport { ZoneId } from './ZoneId';\nimport { OffsetTime } from './OffsetTime';\n\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { Temporal } from './temporal/Temporal';\nimport { TemporalField } from './temporal/TemporalField';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { createTemporalQuery } from './temporal/TemporalQuery';\n\n/**\n * A time without time-zone in the ISO-8601 calendar system,\n * such as `10:15:30`.\n *\n * {@link LocalTime} is an immutable date-time object that represents a time,\n * often viewed as hour-minute-second.\n * Time is represented to nanosecond precision.\n * For example, the value '13:45.30.123456789' can be stored in a {@link LocalTime}.\n *\n * It does not store or represent a date or time-zone.\n * Instead, it is a description of the local time as seen on a wall clock.\n * It cannot represent an instant on the time-line without additional information\n * such as an offset or time-zone.\n *\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. This API assumes that all calendar systems use the same\n * representation, this class, for time-of-day.\n *\n * ### Static properties of Class {@link LocalTime}\n *\n * LocalTime.MIN\n *\n * The minimum supported {@link LocalTime}, '00:00'.\n * This is the time of midnight at the start of the day.\n *\n * LocalTime.MAX\n *\n * The maximum supported {@link LocalTime}, '23:59:59.999999999'.\n * This is the time just before midnight at the end of the day.\n *\n * LocalTime.MIDNIGHT\n *\n * The time of midnight at the start of the day, '00:00'.\n *\n * LocalTime.NOON\n *\n * The time of noon in the middle of the day, '12:00'.\n *\n * LocalTime.HOURS_PER_DAY\n *\n * Hours per day.\n *\n * LocalTime.MINUTES_PER_HOUR\n *\n * Minutes per hour.\n *\n * LocalTime.MINUTES_PER_DAY\n *\n * Minutes per day.\n *\n * LocalTime.SECONDS_PER_MINUTE\n *\n * Seconds per minute.\n *\n * LocalTime.SECONDS_PER_HOUR\n *\n * Seconds per hour.\n *\n * LocalTime.SECONDS_PER_DAY\n *\n * Seconds per day.\n *\n * LocalTime.MILLIS_PER_DAY\n *\n * Milliseconds per day.\n *\n * LocalTime.MICROS_PER_DAY\n *\n * Microseconds per day.\n *\n * LocalTime.NANOS_PER_SECOND\n *\n * Nanos per second.\n *\n * LocalTime.NANOS_PER_MINUTE\n *\n * Nanos per minute.\n *\n * LocalTime.NANOS_PER_HOUR\n *\n * Nanos per hour.\n *\n * LocalTime.NANOS_PER_DAY\n *\n * Nanos per day.\n *\n */\nexport class LocalTime extends Temporal /** implements Temporal, TemporalAdjuster */ {\n    /**\n     * Obtains the current time from the specified clock.\n     * If no argument is specified the system default clock is queried,\n     * if a zone-id is passed a system clock with the specified zone is queried.\n     *\n     * This will query the specified clock to obtain the current time.\n     * Using this method allows the use of an alternate clock for testing.\n     * The alternate clock may be introduced using dependency injection.\n     *\n     * @param {Clock|ZoneId} clockOrZone - the zone ID or clock to use, if null Clock.systemDefaultZone() is used.\n     * @return {LocalTime} the current time using the system clock, not null\n     */\n    static now(clockOrZone) {\n        if (clockOrZone == null){\n            return LocalTime._now(Clock.systemDefaultZone());\n        } else if (clockOrZone instanceof Clock){\n            return LocalTime._now(clockOrZone);\n        } else {\n            return LocalTime._now(Clock.system(clockOrZone));\n        }\n    }\n\n    /**\n     * Obtains the current time from the specified clock.\n     *\n     * This will query the specified clock to obtain the current time.\n     * Using this method allows the use of an alternate clock for testing.\n     * The alternate clock may be introduced using dependency injection (see {@link Clock}).\n     *\n     * @param {Clock} [clock=Clock.systemDefaultZone()] - the clock to use, not null\n     * @return {LocalTime} the current time, not null\n     */\n    static _now(clock = Clock.systemDefaultZone()) {\n        requireNonNull(clock, 'clock');// inline OffsetTime factory to avoid creating object and InstantProvider checks\n        return LocalTime.ofInstant(clock.instant(), clock.zone());\n    }\n\n    /**\n     * obtain a LocalTime from an Instant in the specified time-zone or, if null\n     * in the system default time-zone\n     *\n     * @param {!Instant} instant\n     * @param {ZoneId} [zone=ZoneId.systemDefault()], defaults to ZoneId.systemDefault()\n     * @returns {LocalTime} the current date, not null\n     */\n    static ofInstant(instant, zone=ZoneId.systemDefault()){\n        const offset = zone.rules().offset(instant);\n        let secsOfDay = MathUtil.intMod(instant.epochSecond(), LocalTime.SECONDS_PER_DAY);\n        secsOfDay = MathUtil.intMod((secsOfDay + offset.totalSeconds()), LocalTime.SECONDS_PER_DAY);\n        if (secsOfDay < 0) {\n            secsOfDay += LocalTime.SECONDS_PER_DAY;\n        }\n        return LocalTime.ofSecondOfDay(secsOfDay, instant.nano());\n    }\n\n    /**\n     * Obtains an instance of {@link LocalTime} from an hour, minute, second and nanosecond.\n     *\n     * This factory may return a cached value, but applications must not rely on this.\n     *\n     * @param {number} [hour=0] - the hour-of-day to represent, from 0 to 23\n     * @param {number} [minute=0] - the minute-of-hour to represent, from 0 to 59\n     * @param {number} [second=0] - the second-of-minute to represent, from 0 to 59\n     * @param {number} [nanoOfSecond=0] - the nano-of-second to represent, from 0 to 999,999,999\n     * @return {LocalTime} the local time, not null\n     * @throws {DateTimeException} if the value of any field is out of range\n     */\n    static of(hour, minute, second, nanoOfSecond) {\n        return new LocalTime(hour, minute, second, nanoOfSecond);\n    }\n\n    /**\n     * Obtains an instance of {@link LocalTime} from a second-of-day value, with\n     * associated nanos of second.\n     *\n     * This factory may return a cached value, but applications must not rely on this.\n     *\n     * @param {number} [secondOfDay=0] - the second-of-day, from `0` to `24 * 60 * 60 - 1`\n     * @param {number} [nanoOfSecond=0] - the nano-of-second, from `0` to `999,999,999`\n     * @return {LocalTime} the local time, not null\n     * @throws {DateTimeException} if the either input value is invalid\n     */\n    static ofSecondOfDay(secondOfDay=0, nanoOfSecond=0) {\n        ChronoField.SECOND_OF_DAY.checkValidValue(secondOfDay);\n        ChronoField.NANO_OF_SECOND.checkValidValue(nanoOfSecond);\n        const hours = MathUtil.intDiv(secondOfDay, LocalTime.SECONDS_PER_HOUR);\n        secondOfDay -= hours * LocalTime.SECONDS_PER_HOUR;\n        const minutes = MathUtil.intDiv(secondOfDay, LocalTime.SECONDS_PER_MINUTE);\n        secondOfDay -= minutes * LocalTime.SECONDS_PER_MINUTE;\n        return new LocalTime(hours, minutes, secondOfDay, nanoOfSecond);\n    }\n\n    /**\n     * Obtains an instance of {@link LocalTime} from a nanos-of-day value.\n     *\n     * This factory may return a cached value, but applications must not rely on this.\n     *\n     * @param {number} [nanoOfDay=0] - the nano of day, from `0` to `24 * 60 * 60 * 1,000,000,000 - 1`\n     * @return {LocalTime} the local time, not null\n     * @throws {DateTimeException} if the nanos of day value is invalid\n     */\n    static ofNanoOfDay(nanoOfDay=0) {\n        ChronoField.NANO_OF_DAY.checkValidValue(nanoOfDay);\n        const hours = MathUtil.intDiv(nanoOfDay, LocalTime.NANOS_PER_HOUR);\n        nanoOfDay -= hours * LocalTime.NANOS_PER_HOUR;\n        const minutes = MathUtil.intDiv(nanoOfDay, LocalTime.NANOS_PER_MINUTE);\n        nanoOfDay -= minutes * LocalTime.NANOS_PER_MINUTE;\n        const seconds = MathUtil.intDiv(nanoOfDay, LocalTime.NANOS_PER_SECOND);\n        nanoOfDay -= seconds * LocalTime.NANOS_PER_SECOND;\n        return new LocalTime(hours, minutes, seconds, nanoOfDay);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance of {@link LocalTime} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link LocalTime}.\n     *\n     * The conversion uses the {@link TemporalQueries#localTime} query, which relies\n     * on extracting {@link ChronoField#NANO_OF_DAY}.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used in queries via method reference, {@link LocalTime::from}.\n     *\n     * @param {!TemporalAccessor} temporal - the temporal object to convert, not null\n     * @return {LocalTime} the local time, not null\n     * @throws {DateTimeException} if unable to convert to a {@link LocalTime}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        const time = temporal.query(TemporalQueries.localTime());\n        if (time == null) {\n            throw new DateTimeException(`Unable to obtain LocalTime TemporalAccessor: ${temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`);\n        }\n        return time;\n    }\n\n    /**\n     * Obtains an instance of {@link LocalTime} from a text string using a specific formatter.\n     *\n     * The text is parsed using the formatter, returning a time.\n     *\n     * @param {!String} text - the text to parse, not null\n     * @param {DateTimeFormatter} [formatter=DateTimeFormatter.ISO_LOCAL_TIME] - the formatter to use, default is\n     * {@link DateTimeFormatter.ISO_LOCAL_TIME}\n     * @return {LocalTime} the parsed local time, not null\n     * @throws {DateTimeParseException} if the text cannot be parsed\n     */\n    static parse(text, formatter=DateTimeFormatter.ISO_LOCAL_TIME) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.parse(text, LocalTime.FROM);\n    }\n\n    /**\n     * Constructor, previously validated.\n     *\n     * @param {number} [hour=0] - the hour-of-day to represent, validated from 0 to 23\n     * @param {number} [minute=0] - the minute-of-hour to represent, validated from 0 to 59\n     * @param {number} [second=0] - the second-of-minute to represent, validated from 0 to 59\n     * @param {number} [nanoOfSecond=0] - the nano-of-second to represent, validated from 0 to 999,999,999\n     * @private\n     */\n    constructor(hour=0, minute=0, second=0, nanoOfSecond=0) {\n        super();\n        const _hour = MathUtil.safeToInt(hour);\n        const _minute = MathUtil.safeToInt(minute);\n        const _second = MathUtil.safeToInt(second);\n        const _nanoOfSecond = MathUtil.safeToInt(nanoOfSecond);\n        LocalTime._validate(_hour, _minute, _second, _nanoOfSecond);\n        if (_minute === 0 && _second === 0 && _nanoOfSecond === 0) {\n            if (!LocalTime.HOURS[_hour]) {\n                this._hour = _hour;\n                this._minute = _minute;\n                this._second = _second;\n                this._nano = _nanoOfSecond;\n                LocalTime.HOURS[_hour] = this;\n            }\n            return LocalTime.HOURS[_hour];\n        }\n        this._hour = _hour;\n        this._minute = _minute;\n        this._second = _second;\n        this._nano = _nanoOfSecond;\n    }\n\n    static _validate(hour, minute, second, nanoOfSecond){\n        ChronoField.HOUR_OF_DAY.checkValidValue(hour);\n        ChronoField.MINUTE_OF_HOUR.checkValidValue(minute);\n        ChronoField.SECOND_OF_MINUTE.checkValidValue(second);\n        ChronoField.NANO_OF_SECOND.checkValidValue(nanoOfSecond);\n\n    }\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this time can be queried for the specified field.\n     * If false, then calling {@link range} and {@link get} will throw an exception.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields are:\n     *\n     * * {@link ChronoField.NANO_OF_SECOND}\n     * * {@link ChronoField.NANO_OF_DAY}\n     * * {@link ChronoField.MICRO_OF_SECOND}\n     * * {@link ChronoField.MICRO_OF_DAY}\n     * * {@link ChronoField.MILLI_OF_SECOND}\n     * * {@link ChronoField.MILLI_OF_DAY}\n     * * {@link ChronoField.SECOND_OF_MINUTE}\n     * * {@link ChronoField.SECOND_OF_DAY}\n     * * {@link ChronoField.MINUTE_OF_HOUR}\n     * * {@link ChronoField.MINUTE_OF_DAY}\n     * * {@link ChronoField.HOUR_OF_AMPM}\n     * * {@link ChronoField.CLOCK_HOUR_OF_AMPM}\n     * * {@link ChronoField.HOUR_OF_DAY}\n     * * {@link ChronoField.CLOCK_HOUR_OF_DAY}\n     * * {@link ChronoField.AMPM_OF_DAY}\n     *\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.isSupportedBy}\n     * passing this as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {ChronoField|ChronoUnit} fieldOrUnit - the field to check, null returns false\n     * @return {boolean} true if the field is supported on this time, false if not\n     */\n    isSupported(fieldOrUnit) {\n        if (fieldOrUnit instanceof ChronoField) {\n            return fieldOrUnit.isTimeBased();\n        } else if (fieldOrUnit instanceof ChronoUnit) {\n            return fieldOrUnit.isTimeBased();\n        }\n        return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n    }\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * The range object expresses the minimum and maximum valid values for a field.\n     * This time is used to enhance the accuracy of the returned range.\n     * If it is not possible to return the range, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return\n     * appropriate range instances.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n     * passing this as the argument.\n     * Whether the range can be obtained is determined by the field.\n     *\n     * @param {ChronoField} field - the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws {DateTimeException} if the range for the field cannot be obtained\n     */\n    range(field) {\n        requireNonNull(field);\n        return super.range(field);\n    }\n\n    /**\n     * Gets the value of the specified field from this time as an `int`.\n     *\n     * This queries this time for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this time, except {@link ChronoField.NANO_OF_DAY} and {@link ChronoField.MICRO_OF_DAY}\n     * which are too large to fit in an `int` and throw a {@link DateTimeException}.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing this as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {ChronoField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws {DateTimeException} if a value for the field cannot be obtained\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    get(field) {\n        return this.getLong(field);\n    }\n\n    /**\n     * Gets the value of the specified field from this time as a `long`.\n     *\n     * This queries this time for the value for the specified field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this time.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.from}\n     * passing this as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {ChronoField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws {DateTimeException} if a value for the field cannot be obtained\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    getLong(field) {\n        requireNonNull(field, 'field');\n        if (field instanceof ChronoField) {\n            return this._get0(field);\n        }\n        return field.getFrom(this);\n    }\n\n    /**\n     *\n     * @param {ChronoField} field\n     * @returns {number}\n     * @private\n     */\n    _get0(field) {\n        switch (field) {\n            case ChronoField.NANO_OF_SECOND: return this._nano;\n            case ChronoField.NANO_OF_DAY: return this.toNanoOfDay();\n            case ChronoField.MICRO_OF_SECOND: return MathUtil.intDiv(this._nano, 1000);\n            case ChronoField.MICRO_OF_DAY: return MathUtil.intDiv(this.toNanoOfDay(), 1000);\n            case ChronoField.MILLI_OF_SECOND: return MathUtil.intDiv(this._nano, 1000000);\n            case ChronoField.MILLI_OF_DAY: return MathUtil.intDiv(this.toNanoOfDay(), 1000000);\n            case ChronoField.SECOND_OF_MINUTE: return this._second;\n            case ChronoField.SECOND_OF_DAY: return this.toSecondOfDay();\n            case ChronoField.MINUTE_OF_HOUR: return this._minute;\n            case ChronoField.MINUTE_OF_DAY: return this._hour * 60 + this._minute;\n            case ChronoField.HOUR_OF_AMPM: return MathUtil.intMod(this._hour, 12);\n            case ChronoField.CLOCK_HOUR_OF_AMPM: {\n                const ham = MathUtil.intMod(this._hour, 12);\n                return (ham % 12 === 0 ? 12 : ham);\n            }\n            case ChronoField.HOUR_OF_DAY: return this._hour;\n            case ChronoField.CLOCK_HOUR_OF_DAY: return (this._hour === 0 ? 24 : this._hour);\n            case ChronoField.AMPM_OF_DAY: return MathUtil.intDiv(this._hour, 12);\n        }\n        throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the hour-of-day field.\n     *\n     * @return {number} the hour-of-day, from 0 to 23\n     */\n    hour() {\n        return this._hour;\n    }\n\n    /**\n     * Gets the minute-of-hour field.\n     *\n     * @return {number} the minute-of-hour, from 0 to 59\n     */\n    minute() {\n        return this._minute;\n    }\n\n    /**\n     * Gets the second-of-minute field.\n     *\n     * @return {number} the second-of-minute, from 0 to 59\n     */\n    second() {\n        return this._second;\n    }\n\n    /**\n     * Gets the nano-of-second field.\n     *\n     * @return {number} the nano-of-second, from 0 to 999,999,999\n     */\n    nano() {\n        return this._nano;\n    }\n\n    /**\n     * Returns an adjusted copy of this time.\n     *\n     * This returns a new {@link LocalTime}, based on this one, with the time adjusted.\n     * The adjustment takes place using the specified adjuster strategy object.\n     * Read the documentation of the adjuster to understand what adjustment will be made.\n     *\n     * A simple adjuster might simply set the one of the fields, such as the hour field.\n     * A more complex adjuster might set the time to the last hour of the day.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalAdjuster.adjustInto} method on the\n     * specified adjuster passing this as the argument.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalAdjuster} adjuster - the adjuster to use, not null\n     * @return {LocalTime} a {@link LocalTime} based on this with the adjustment made, not null\n     * @throws {DateTimeException} if the adjustment cannot be made\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    _withAdjuster(adjuster) {\n        requireNonNull(adjuster, 'adjuster');\n        // optimizations\n        if (adjuster instanceof LocalTime) {\n            return adjuster;\n        }\n        return super._withAdjuster(adjuster);\n    }\n\n    /**\n     * Returns a copy of this time with the specified field set to a new value.\n     *\n     * This returns a new {@link LocalTime}, based on this one, with the value\n     * for the specified field changed.\n     * This can be used to change any supported field, such as the hour, minute or second.\n     * If it is not possible to set the value, because the field is not supported or for\n     * some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the adjustment is implemented here.\n     * The supported fields behave as follows:\n     *\n     * * {@link ChronoField.NANO_OF_SECOND} -\n     *   Returns a {@link LocalTime} with the specified nano-of-second.\n     *  The hour, minute and second will be unchanged.\n     * * {@link ChronoField.NANO_OF_DAY} -\n     *   Returns a {@link LocalTime} with the specified nano-of-day.\n     *   This completely replaces the time and is equivalent to {@link ofNanoOfDay}.\n     * * {@link ChronoField.MICRO_OF_SECOND} -\n     *   Returns a {@link LocalTime} with the nano-of-second replaced by the specified\n     *   micro-of-second multiplied by 1,000.\n     *   The hour, minute and second will be unchanged.\n     * * {@link ChronoField.MICRO_OF_DAY} -\n     *   Returns a {@link LocalTime} with the specified micro-of-day.\n     *   This completely replaces the time and is equivalent to using {@link ofNanoOfDay}\n     *   with the micro-of-day multiplied by 1,000.\n     * * {@link ChronoField.MILLI_OF_SECOND} -\n     *   Returns a {@link LocalTime} with the nano-of-second replaced by the specified\n     *   milli-of-second multiplied by 1,000,000.\n     *   The hour, minute and second will be unchanged.\n     * * {@link ChronoField.MILLI_OF_DAY} -\n     *   Returns a {@link LocalTime} with the specified milli-of-day.\n     *   This completely replaces the time and is equivalent to using {@link ofNanoOfDay}\n     *   with the milli-of-day multiplied by 1,000,000.\n     * * {@link ChronoField.SECOND_OF_MINUTE} -\n     *   Returns a {@link LocalTime} with the specified second-of-minute.\n     *   The hour, minute and nano-of-second will be unchanged.\n     * * {@link ChronoField.SECOND_OF_DAY} -\n     *   Returns a {@link LocalTime} with the specified second-of-day.\n     *   The nano-of-second will be unchanged.\n     * * {@link ChronoField.MINUTE_OF_HOUR} -\n     *   Returns a {@link LocalTime} with the specified minute-of-hour.\n     *   The hour, second-of-minute and nano-of-second will be unchanged.\n     * * {@link ChronoField.MINUTE_OF_DAY} -\n     *   Returns a {@link LocalTime} with the specified minute-of-day.\n     *   The second-of-minute and nano-of-second will be unchanged.\n     * * {@link ChronoField.HOUR_OF_AMPM} -\n     *   Returns a {@link LocalTime} with the specified hour-of-am-pm.\n     *   The AM/PM, minute-of-hour, second-of-minute and nano-of-second will be unchanged.\n     * * {@link ChronoField.CLOCK_HOUR_OF_AMPM} -\n     *   Returns a {@link LocalTime} with the specified clock-hour-of-am-pm.\n     *   The AM/PM, minute-of-hour, second-of-minute and nano-of-second will be unchanged.\n     * * {@link ChronoField.HOUR_OF_DAY} -\n     *   Returns a {@link LocalTime} with the specified hour-of-day.\n     *   The minute-of-hour, second-of-minute and nano-of-second will be unchanged.\n     * * {@link ChronoField.CLOCK_HOUR_OF_DAY} -\n     *   Returns a {@link LocalTime} with the specified clock-hour-of-day.\n     *   The minute-of-hour, second-of-minute and nano-of-second will be unchanged.\n     * * {@link ChronoField.AMPM_OF_DAY} -\n     *   Returns a {@link LocalTime} with the specified AM/PM.\n     *   The hour-of-am-pm, minute-of-hour, second-of-minute and nano-of-second will be unchanged.\n     *\n     * In all cases, if the new value is outside the valid range of values for the field\n     * then a {@link DateTimeException} will be thrown.\n     *\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.adjustInto}\n     * passing this as the argument. In this case, the field determines\n     * whether and how to adjust the instant.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {!TemporalField} field - the field to set in the result, not null\n     * @param {number} newValue - the new value of the field in the result\n     * @return {LocalTime} a {@link LocalTime} based on this with the specified field set, not null\n     * @throws {DateTimeException} if the field cannot be set\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    _withField(field, newValue) {\n        requireNonNull(field, 'field');\n        requireInstance(field, TemporalField, 'field');\n        if (field instanceof ChronoField) {\n            field.checkValidValue(newValue);\n            switch (field) {\n                case ChronoField.NANO_OF_SECOND: return this.withNano(newValue);\n                case ChronoField.NANO_OF_DAY: return LocalTime.ofNanoOfDay(newValue);\n                case ChronoField.MICRO_OF_SECOND: return this.withNano(newValue * 1000);\n                case ChronoField.MICRO_OF_DAY: return LocalTime.ofNanoOfDay(newValue * 1000);\n                case ChronoField.MILLI_OF_SECOND: return this.withNano( newValue * 1000000);\n                case ChronoField.MILLI_OF_DAY: return LocalTime.ofNanoOfDay(newValue * 1000000);\n                case ChronoField.SECOND_OF_MINUTE: return this.withSecond(newValue);\n                case ChronoField.SECOND_OF_DAY: return this.plusSeconds(newValue - this.toSecondOfDay());\n                case ChronoField.MINUTE_OF_HOUR: return this.withMinute(newValue);\n                case ChronoField.MINUTE_OF_DAY: return this.plusMinutes(newValue - (this._hour * 60 + this._minute));\n                case ChronoField.HOUR_OF_AMPM: return this.plusHours(newValue - MathUtil.intMod(this._hour, 12));\n                case ChronoField.CLOCK_HOUR_OF_AMPM: return this.plusHours((newValue === 12 ? 0 : newValue) - MathUtil.intMod(this._hour, 12));\n                case ChronoField.HOUR_OF_DAY: return this.withHour(newValue);\n                case ChronoField.CLOCK_HOUR_OF_DAY: return this.withHour((newValue === 24 ? 0 : newValue));\n                case ChronoField.AMPM_OF_DAY: return this.plusHours((newValue - MathUtil.intDiv(this._hour, 12)) * 12);\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.adjustInto(this, newValue);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalTime} with the hour-of-day value altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} [hour=0] - the hour-of-day to set in the result, from 0 to 23\n     * @return {LocalTime} a {@link LocalTime} based on this time with the requested hour, not null\n     * @throws {DateTimeException} if the hour value is invalid\n     */\n    withHour(hour=0) {\n        if (this._hour === hour) {\n            return this;\n        }\n        return new LocalTime(hour, this._minute, this._second, this._nano);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalTime} with the minute-of-hour value altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} [minute=0] - the minute-of-hour to set in the result, from 0 to 59\n     * @return {LocalTime} a {@link LocalTime} based on this time with the requested minute, not null\n     * @throws {DateTimeException} if the minute value is invalid\n     */\n    withMinute(minute=0) {\n        if (this._minute === minute) {\n            return this;\n        }\n        return new LocalTime(this._hour, minute, this._second, this._nano);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalTime} with the second-of-minute value altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} [second=0] - the second-of-minute to set in the result, from 0 to 59\n     * @return {LocalTime} a {@link LocalTime} based on this time with the requested second, not null\n     * @throws {DateTimeException} if the second value is invalid\n     */\n    withSecond(second=0) {\n        if (this._second === second) {\n            return this;\n        }\n        return new LocalTime(this._hour, this._minute, second, this._nano);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalTime} with the nano-of-second value altered.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} [nanoOfSecond=0] - the nano-of-second to set in the result, from 0 to 999,999,999\n     * @return {LocalTime} a {@link LocalTime} based on this time with the requested nanosecond, not null\n     * @throws {DateTimeException} if the nanos value is invalid\n     */\n    withNano(nanoOfSecond=0) {\n        if (this._nano === nanoOfSecond) {\n            return this;\n        }\n        return new LocalTime(this._hour, this._minute, this._second, nanoOfSecond);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalTime} with the time truncated.\n     *\n     * Truncating the time returns a copy of the original time with fields\n     * smaller than the specified unit set to zero.\n     * For example, truncating with the {@link ChronoUnit.MINUTES} minutes unit\n     * will set the second-of-minute and nano-of-second field to zero.\n     *\n     * The unit must have a duration (see {@link TemporalUnit#getDuration})\n     * that divides into the length of a standard day without remainder.\n     * This includes all supplied time units on {@link ChronoUnit} and\n     * {@link ChronoUnit.DAYS}. Other units throw an exception.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {!ChronoUnit} unit - the unit to truncate to, not null\n     * @return {LocalTime} a {@link LocalTime} based on this time with the time truncated, not null\n     * @throws {DateTimeException} if unable to truncate\n     */\n    truncatedTo(unit) {\n        requireNonNull(unit, 'unit');\n        if (unit === ChronoUnit.NANOS) {\n            return this;\n        }\n        const unitDur = unit.duration();\n        if (unitDur.seconds() > LocalTime.SECONDS_PER_DAY) {\n            throw new DateTimeException('Unit is too large to be used for truncation');\n        }\n        const dur = unitDur.toNanos();\n        if (MathUtil.intMod(LocalTime.NANOS_PER_DAY, dur) !== 0) {\n            throw new DateTimeException('Unit must divide into a standard day without remainder');\n        }\n        const nod = this.toNanoOfDay();\n        return LocalTime.ofNanoOfDay(MathUtil.intDiv(nod, dur) * dur);\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns a copy of this time with the specified period added.\n     *\n     * This method returns a new time based on this time with the specified period added.\n     * This can be used to add any period that is defined by a unit, for example to add hours, minutes or seconds.\n     * The unit is responsible for the details of the calculation, including the resolution\n     * of any edge cases in the calculation.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} amountToAdd - the amount of the unit to add to the result, may be negative\n     * @param {TemporalUnit} unit - the unit of the period to add, not null\n     * @return {LocalTime} a {@link LocalTime} based on this time with the specified period added, not null\n     * @throws {DateTimeException} if the unit cannot be added to this type\n     */\n    _plusUnit(amountToAdd, unit) {\n        requireNonNull(unit, 'unit');\n        if (unit instanceof ChronoUnit) {\n            switch (unit) {\n                case ChronoUnit.NANOS: return this.plusNanos(amountToAdd);\n                case ChronoUnit.MICROS: return this.plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MICROS_PER_DAY) * 1000);\n                case ChronoUnit.MILLIS: return this.plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MILLIS_PER_DAY) * 1000000);\n                case ChronoUnit.SECONDS: return this.plusSeconds(amountToAdd);\n                case ChronoUnit.MINUTES: return this.plusMinutes(amountToAdd);\n                case ChronoUnit.HOURS: return this.plusHours(amountToAdd);\n                case ChronoUnit.HALF_DAYS: return this.plusHours(MathUtil.intMod(amountToAdd, 2) * 12);\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.addTo(this, amountToAdd);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalTime} with the specified period in hours added.\n     *\n     * This adds the specified number of hours to this time, returning a new time.\n     * The calculation wraps around midnight.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} hoursToAdd - the hours to add, may be negative\n     * @return {LocalTime} a {@link LocalTime} based on this time with the hours added, not null\n     */\n    plusHours(hoursToAdd) {\n        if (hoursToAdd === 0) {\n            return this;\n        }\n\n        const newHour = MathUtil.intMod(MathUtil.intMod(hoursToAdd, LocalTime.HOURS_PER_DAY) + this._hour + LocalTime.HOURS_PER_DAY, LocalTime.HOURS_PER_DAY);\n        return new LocalTime(newHour, this._minute, this._second, this._nano);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalTime} with the specified period in minutes added.\n     *\n     * This adds the specified number of minutes to this time, returning a new time.\n     * The calculation wraps around midnight.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} minutesToAdd - the minutes to add, may be negative\n     * @return {LocalTime} a {@link LocalTime} based on this time with the minutes added, not null\n     */\n    plusMinutes(minutesToAdd) {\n        if (minutesToAdd === 0) {\n            return this;\n        }\n        const mofd = this._hour * LocalTime.MINUTES_PER_HOUR + this._minute;\n        const newMofd = MathUtil.intMod(MathUtil.intMod(minutesToAdd, LocalTime.MINUTES_PER_DAY) + mofd + LocalTime.MINUTES_PER_DAY, LocalTime.MINUTES_PER_DAY);\n        if (mofd === newMofd) {\n            return this;\n        }\n        const newHour = MathUtil.intDiv(newMofd, LocalTime.MINUTES_PER_HOUR);\n        const newMinute = MathUtil.intMod(newMofd, LocalTime.MINUTES_PER_HOUR);\n        return new LocalTime(newHour, newMinute, this._second, this._nano);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalTime} with the specified period in seconds added.\n     *\n     * This adds the specified number of seconds to this time, returning a new time.\n     * The calculation wraps around midnight.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} secondsToAdd - the seconds to add, may be negative\n     * @return {LocalTime} a {@link LocalTime} based on this time with the seconds added, not null\n     */\n    plusSeconds(secondsToAdd) {\n        if (secondsToAdd === 0) {\n            return this;\n        }\n        const sofd = this._hour * LocalTime.SECONDS_PER_HOUR +\n                    this._minute * LocalTime.SECONDS_PER_MINUTE + this._second;\n        const newSofd = MathUtil.intMod((MathUtil.intMod(secondsToAdd, LocalTime.SECONDS_PER_DAY) + sofd + LocalTime.SECONDS_PER_DAY), LocalTime.SECONDS_PER_DAY);\n        if (sofd === newSofd) {\n            return this;\n        }\n        const newHour = MathUtil.intDiv(newSofd, LocalTime.SECONDS_PER_HOUR);\n        const newMinute = MathUtil.intMod(MathUtil.intDiv(newSofd, LocalTime.SECONDS_PER_MINUTE), LocalTime.MINUTES_PER_HOUR);\n        const newSecond = MathUtil.intMod(newSofd, LocalTime.SECONDS_PER_MINUTE);\n        return new LocalTime(newHour, newMinute, newSecond, this._nano);\n    }\n\n    /**\n     * Returns a copy of this {@link LocalTime} with the specified period in nanoseconds added.\n     *\n     * This adds the specified number of nanoseconds to this time, returning a new time.\n     * The calculation wraps around midnight.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} nanosToAdd - the nanos to add, may be negative\n     * @return {LocalTime} a {@link LocalTime} based on this time with the nanoseconds added, not null\n     */\n    plusNanos(nanosToAdd) {\n        if (nanosToAdd === 0) {\n            return this;\n        }\n        const nofd = this.toNanoOfDay();\n        const newNofd = MathUtil.intMod((MathUtil.intMod(nanosToAdd, LocalTime.NANOS_PER_DAY) + nofd + LocalTime.NANOS_PER_DAY), LocalTime.NANOS_PER_DAY);\n        if (nofd === newNofd) {\n            return this;\n        }\n        const newHour = MathUtil.intDiv(newNofd, LocalTime.NANOS_PER_HOUR);\n        const newMinute = MathUtil.intMod(MathUtil.intDiv(newNofd, LocalTime.NANOS_PER_MINUTE), LocalTime.MINUTES_PER_HOUR);\n        const newSecond = MathUtil.intMod(MathUtil.intDiv(newNofd, LocalTime.NANOS_PER_SECOND), LocalTime.SECONDS_PER_MINUTE);\n        const newNano = MathUtil.intMod(newNofd, LocalTime.NANOS_PER_SECOND);\n        return new LocalTime(newHour, newMinute, newSecond, newNano);\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Returns a copy of this time with the specified period subtracted.\n     *\n     * This method returns a new time based on this time with the specified period subtracted.\n     * This can be used to subtract any period that is defined by a unit, for example to subtract hours, minutes or seconds.\n     * The unit is responsible for the details of the calculation, including the resolution\n     * of any edge cases in the calculation.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} amountToSubtract - the amount of the unit to subtract from the result, may be negative\n     * @param {ChronoUnit} unit - the unit of the period to subtract, not null\n     * @return {LocalTime} a {@link LocalTime} based on this time with the specified period subtracted, not null\n     * @throws {DateTimeException} if the unit cannot be added to this type\n     */\n    _minusUnit(amountToSubtract, unit) {\n        requireNonNull(unit, 'unit');\n        return this._plusUnit(-1 * amountToSubtract, unit);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link LocalTime} with the specified period in hours subtracted.\n     *\n     * This subtracts the specified number of hours from this time, returning a new time.\n     * The calculation wraps around midnight.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} hoursToSubtract - the hours to subtract, may be negative\n     * @return {LocalTime} a {@link LocalTime} based on this time with the hours subtracted, not null\n     */\n    minusHours(hoursToSubtract) {\n        return this.plusHours(-1 * MathUtil.intMod(hoursToSubtract, LocalTime.HOURS_PER_DAY));\n    }\n\n    /**\n     * Returns a copy of this {@link LocalTime} with the specified period in minutes subtracted.\n     *\n     * This subtracts the specified number of minutes from this time, returning a new time.\n     * The calculation wraps around midnight.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} minutesToSubtract - the minutes to subtract, may be negative\n     * @return {LocalTime} a {@link LocalTime} based on this time with the minutes subtracted, not null\n     */\n    minusMinutes(minutesToSubtract) {\n        return this.plusMinutes(-1 * MathUtil.intMod(minutesToSubtract, LocalTime.MINUTES_PER_DAY));\n    }\n\n    /**\n     * Returns a copy of this {@link LocalTime} with the specified period in seconds subtracted.\n     *\n     * This subtracts the specified number of seconds from this time, returning a new time.\n     * The calculation wraps around midnight.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} secondsToSubtract - the seconds to subtract, may be negative\n     * @return {LocalTime} a {@link LocalTime} based on this time with the seconds subtracted, not null\n     */\n    minusSeconds(secondsToSubtract) {\n        return this.plusSeconds(-1 * MathUtil.intMod(secondsToSubtract, LocalTime.SECONDS_PER_DAY));\n    }\n\n    /**\n     * Returns a copy of this {@link LocalTime} with the specified period in nanoseconds subtracted.\n     *\n     * This subtracts the specified number of nanoseconds from this time, returning a new time.\n     * The calculation wraps around midnight.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} nanosToSubtract - the nanos to subtract, may be negative\n     * @return {LocalTime} a {@link LocalTime} based on this time with the nanoseconds subtracted, not null\n     */\n    minusNanos(nanosToSubtract) {\n        return this.plusNanos(-1 * MathUtil.intMod(nanosToSubtract, LocalTime.NANOS_PER_DAY));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Queries this time using the specified query.\n     *\n     * This queries this time using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing this as the argument.\n     *\n     * @param {TemporalQuery} query - the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws {DateTimeException} if unable to query (defined by the query)\n     * @throws {ArithmeticException} if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        requireNonNull(query, 'query');\n        if (query === TemporalQueries.precision()) {\n            return ChronoUnit.NANOS;\n        } else if (query === TemporalQueries.localTime()) {\n            return this;\n        }\n        // inline TemporalAccessor.super.query(query) as an optimization\n        if (query === TemporalQueries.chronology() || query === TemporalQueries.zoneId() ||\n                query === TemporalQueries.zone() || query === TemporalQueries.offset() ||\n                query === TemporalQueries.localDate()) {\n            return null;\n        }\n        return query.queryFrom(this);\n    }\n\n    /**\n     * Adjusts the specified temporal object to have the same time as this object.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with the time changed to be the same as this.\n     *\n     * The adjustment is equivalent to using {@link Temporal.with}\n     * passing {@link ChronoField.NANO_OF_DAY} as the field.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal.with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisLocalTime.adjustInto(temporal);\n     *   temporal = temporal.with(thisLocalTime);\n     * </pre>\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalAdjuster} temporal - the target object to be adjusted, not null\n     * @return {Temporal} the adjusted object, not null\n     * @throws {DateTimeException} if unable to make the adjustment\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        return temporal.with(LocalTime.NANO_OF_DAY, this.toNanoOfDay());\n    }\n\n    /**\n     * Calculates the period between this time and another time in\n     * terms of the specified unit.\n     *\n     * This calculates the period between two times in terms of a single unit.\n     * The start and end points are this and the specified time.\n     * The result will be negative if the end is before the start.\n     * The {@link Temporal} passed to this method must be a {@link LocalTime}.\n     * For example, the period in hours between two times can be calculated\n     * using {@link startTime.until}.\n     *\n     * The calculation returns a whole number, representing the number of\n     * complete units between the two times.\n     * For example, the period in hours between 11:30 and 13:29 will only\n     * be one hour as it is one minute short of two hours.\n     *\n     * This method operates in association with {@link TemporalUnit.between}.\n     * The result of this method is a `long` representing the amount of\n     * the specified unit. By contrast, the result of {@link between} is an\n     * object that can be used directly in addition/subtraction:\n     * <pre>\n     *   long period = start.until(end, HOURS);   // this method\n     *   dateTime.plus(HOURS.between(start, end));      // use in plus/minus\n     * </pre>\n     *\n     * The calculation is implemented in this method for {@link ChronoUnit}.\n     * The units {@link ChronoUnit.NANOS}, {@link ChronoUnit.MICROS}, {@link ChronoUnit.MILLIS}, {@link ChronoUnit.SECONDS},\n     * {@link ChronoUnit.MINUTES}, {@link ChronoUnit.HOURS} and {@link ChronoUnit.HALF_DAYS} are supported.\n     * Other {@link ChronoUnit} values will throw an exception.\n     *\n     * If the unit is not a {@link ChronoUnit}, then the result of this method\n     * is obtained by invoking {@link TemporalUnit.between}\n     * passing this as the first argument and the input temporal as\n     * the second argument.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalAccessor} endExclusive - the end time, which is converted to a {@link LocalTime}, not null\n     * @param {TemporalUnit} unit - the unit to measure the period in, not null\n     * @return {number} the amount of the period between this time and the end time\n     * @throws {DateTimeException} if the period cannot be calculated\n     * @throws {ArithmeticException} if numeric overflow occurs\n     */\n    until(endExclusive, unit) {\n        requireNonNull(endExclusive, 'endExclusive');\n        requireNonNull(unit, 'unit');\n        const end = LocalTime.from(endExclusive);\n        if (unit instanceof ChronoUnit) {\n            const nanosUntil = end.toNanoOfDay() - this.toNanoOfDay();  // no overflow\n            switch (unit) {\n                case ChronoUnit.NANOS: return nanosUntil;\n                case ChronoUnit.MICROS: return MathUtil.intDiv(nanosUntil, 1000);\n                case ChronoUnit.MILLIS: return MathUtil.intDiv(nanosUntil, 1000000);\n                case ChronoUnit.SECONDS: return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_SECOND);\n                case ChronoUnit.MINUTES: return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_MINUTE);\n                case ChronoUnit.HOURS: return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_HOUR);\n                case ChronoUnit.HALF_DAYS: return MathUtil.intDiv(nanosUntil, (12 * LocalTime.NANOS_PER_HOUR));\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.between(this, end);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Combines this time with a date to create a {@link LocalDateTime}.\n     *\n     * This returns a {@link LocalDateTime} formed from this time at the specified date.\n     * All possible combinations of date and time are valid.\n     *\n     * @param {LocalDate} date - the date to combine with, not null\n     * @return {LocalDateTime} the local date-time formed from this time and the specified date, not null\n     */\n    atDate(date) {\n        return LocalDateTime.of(date, this);\n    }\n\n    /**\n     * Combines this time with an offset to create an {@link OffsetTime}.\n     *\n     * This returns an {@link OffsetTime} formed from this time at the specified offset.\n     * All possible combinations of time and offset are valid.\n     *\n     * @param {OffsetTime} offset - the offset to combine with, not null\n     * @return {OffsetTime} the offset time formed from this time and the specified offset, not null\n     */\n    atOffset(offset) {\n        return OffsetTime.of(this, offset);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Extracts the time as seconds of day, from `0` to `24 * 60 * 60 - 1`.\n     *\n     * @return {number} the second-of-day equivalent to this time\n     */\n    toSecondOfDay() {\n        let total = this._hour * LocalTime.SECONDS_PER_HOUR;\n        total += this._minute * LocalTime.SECONDS_PER_MINUTE;\n        total += this._second;\n        return total;\n    }\n\n    /**\n     * Extracts the time as nanos of day, from `0` to `24 * 60 * 60 * 1,000,000,000 - 1`.\n     *\n     * @return {number} the nano of day equivalent to this time\n     */\n    toNanoOfDay() {\n        let total = this._hour * LocalTime.NANOS_PER_HOUR;\n        total += this._minute * LocalTime.NANOS_PER_MINUTE;\n        total += this._second * LocalTime.NANOS_PER_SECOND;\n        total += this._nano;\n        return total;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Compares this {@link LocalTime} to another time.\n     *\n     * The comparison is based on the time-line position of the local times within a day.\n     * It is 'consistent with equals', as defined by {@link Comparable}.\n     *\n     * @param {LocalTime} other - the other time to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     * @throws {NullPointerException} if `other` is null\n     */\n    compareTo(other) {\n        requireNonNull(other, 'other');\n        requireInstance(other, LocalTime, 'other');\n        let cmp = MathUtil.compareNumbers(this._hour, other._hour);\n        if (cmp === 0) {\n            cmp = MathUtil.compareNumbers(this._minute, other._minute);\n            if (cmp === 0) {\n                cmp = MathUtil.compareNumbers(this._second, other._second);\n                if (cmp === 0) {\n                    cmp = MathUtil.compareNumbers(this._nano, other._nano);\n                }\n            }\n        }\n        return cmp;\n    }\n\n    /**\n     * Checks if this {@link LocalTime} is after the specified time.\n     *\n     * The comparison is based on the time-line position of the time within a day.\n     *\n     * @param {LocalTime} other - the other time to compare to, not null\n     * @return {boolean} true if this is after the specified time\n     * @throws {NullPointerException} if `other` is null\n     */\n    isAfter(other) {\n        return this.compareTo(other) > 0;\n    }\n\n    /**\n     * Checks if this {@link LocalTime} is before the specified time.\n     *\n     * The comparison is based on the time-line position of the time within a day.\n     *\n     * @param {LocalTime} other - the other time to compare to, not null\n     * @return {boolean} true if this point is before the specified time\n     * @throws {NullPointerException} if `other` is null\n     */\n    isBefore(other) {\n        return this.compareTo(other) < 0;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this time is equal to another time.\n     *\n     * The comparison is based on the time-line position of the time within a day.\n     *\n     * Only objects of type {@link LocalTime} are compared, other types return false.\n     * To compare the date of two {@link TemporalAccessor} instances, use\n     * {@link ChronoField#NANO_OF_DAY} as a comparator.\n     *\n     * @param {*} other - the object to check, null returns false\n     * @return {boolean} true if this is equal to the other time\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof LocalTime) {\n            return this._hour === other._hour && this._minute === other._minute &&\n                this._second === other._second && this._nano === other._nano;\n        }\n        return false;\n    }\n\n    /**\n     * A hash code for this time.\n     *\n     * @return {number} a suitable hash code\n     */\n    hashCode() {\n        const nod = this.toNanoOfDay();\n        return MathUtil.hash(nod);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Outputs this time as a string, such as `10:15`.\n     *\n     * The output will be one of the following ISO-8601 formats:\n     *\n     * * {@link HH:mm}\n     * * {@link HH:mm:ss}\n     * * {@link HH:mm:ss.SSS}\n     * * {@link HH:mm:ss.SSSSSS}\n     * * {@link HH:mm:ss.SSSSSSSSS}\n     *\n     * The format used will be the shortest that outputs the full value of\n     * the time where the omitted parts are implied to be zero.\n     *\n     * @return {string} a string representation of this time, not null\n     */\n    toString() {\n        let buf = '';\n        const hourValue = this._hour;\n        const minuteValue = this._minute;\n        const secondValue = this._second;\n        const nanoValue = this._nano;\n        buf += hourValue < 10 ? '0' : '';\n        buf += hourValue;\n        buf += minuteValue < 10 ? ':0' : ':';\n        buf += minuteValue;\n        if (secondValue > 0 || nanoValue > 0) {\n            buf += secondValue < 10 ? ':0' : ':';\n            buf += secondValue;\n            if (nanoValue > 0) {\n                buf += '.';\n                if(MathUtil.intMod(nanoValue, 1000000) === 0) {\n                    buf += (`${MathUtil.intDiv(nanoValue, 1000000) + 1000}`).substring(1);\n                } else if (MathUtil.intMod(nanoValue, 1000) === 0) {\n                    buf += (`${MathUtil.intDiv(nanoValue, 1000) + 1000000}`).substring(1);\n                } else {\n                    buf += (`${nanoValue + 1000000000}`).substring(1);\n                }\n            }\n        }\n        return buf;\n    }\n\n    /**\n     *\n     * @return {string} same as {@link LocalTime.toString}\n     */\n    toJSON() {\n        return this.toString();\n    }\n\n    /**\n     * Outputs this time as a string using the formatter.\n     *\n     * @param {DateTimeFormatter} formatter - the formatter to use, not null\n     * @return {string} the formatted time string, not null\n     * @throws {DateTimeException} if an error occurs during printing\n     */\n    format(formatter) {\n        requireNonNull(formatter, 'formatter');\n        return formatter.format(this);\n    }\n}\n\nexport function _init() {\n    /**\n     * Constants for the local time of each hour.\n     */\n    LocalTime.HOURS = [];\n    for (let hour = 0; hour < 24; hour++) {\n        LocalTime.of(hour, 0, 0, 0);\n    }\n\n    /**\n     * The minimum supported {@link LocalTime}, '00:00'.\n     * This is the time of midnight at the start of the day.\n     */\n    LocalTime.MIN = LocalTime.HOURS[0];\n    /**\n     * The maximum supported {@link LocalTime}, '23:59:59.999999999'.\n     * This is the time just before midnight at the end of the day.\n     */\n    LocalTime.MAX = new LocalTime(23, 59, 59, 999999999);\n    /**\n     * The time of midnight at the start of the day, '00:00'.\n     */\n    LocalTime.MIDNIGHT = LocalTime.HOURS[0];\n    /**\n     * The time of noon in the middle of the day, '12:00'.\n     */\n    LocalTime.NOON = LocalTime.HOURS[12];\n\n    LocalTime.FROM = createTemporalQuery('LocalTime.FROM', (temporal) => {\n        return LocalTime.from(temporal);\n    });\n}\n\n/**\n * Hours per day.\n */\nLocalTime.HOURS_PER_DAY = 24;\n/**\n * Minutes per hour.\n */\nLocalTime.MINUTES_PER_HOUR = 60;\n/**\n * Minutes per day.\n */\nLocalTime.MINUTES_PER_DAY = LocalTime.MINUTES_PER_HOUR * LocalTime.HOURS_PER_DAY;\n/**\n * Seconds per minute.\n */\nLocalTime.SECONDS_PER_MINUTE = 60;\n/**\n * Seconds per hour.\n */\nLocalTime.SECONDS_PER_HOUR = LocalTime.SECONDS_PER_MINUTE * LocalTime.MINUTES_PER_HOUR;\n/**\n * Seconds per day.\n */\nLocalTime.SECONDS_PER_DAY = LocalTime.SECONDS_PER_HOUR * LocalTime.HOURS_PER_DAY;\n/**\n * Milliseconds per day.\n */\nLocalTime.MILLIS_PER_DAY = LocalTime.SECONDS_PER_DAY * 1000;\n/**\n * Microseconds per day.\n */\nLocalTime.MICROS_PER_DAY = LocalTime.SECONDS_PER_DAY * 1000000;\n/**\n * Nanos per second.\n */\nLocalTime.NANOS_PER_SECOND = 1000000000;\n/**\n * Nanos per minute.\n */\nLocalTime.NANOS_PER_MINUTE = LocalTime.NANOS_PER_SECOND * LocalTime.SECONDS_PER_MINUTE;\n/**\n * Nanos per hour.\n */\nLocalTime.NANOS_PER_HOUR = LocalTime.NANOS_PER_MINUTE * LocalTime.MINUTES_PER_HOUR;\n/**\n * Nanos per day.\n */\nLocalTime.NANOS_PER_DAY = LocalTime.NANOS_PER_HOUR * LocalTime.HOURS_PER_DAY;\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull, requireInstance } from './assert';\nimport { DateTimeException, UnsupportedTemporalTypeException } from './errors';\n\nimport { Clock } from './Clock';\nimport { LocalTime } from './LocalTime';\nimport { ZonedDateTime } from './ZonedDateTime';\nimport { MathUtil } from './MathUtil';\nimport { OffsetDateTime } from './OffsetDateTime';\n\nimport { Temporal } from './temporal/Temporal';\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { TemporalUnit } from './temporal/TemporalUnit';\nimport { createTemporalQuery } from './temporal/TemporalQuery';\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\n\nconst NANOS_PER_MILLI = 1000000;\n\n/**\n * An instantaneous point on the time-line.\n *\n * This class models a single instantaneous point on the time-line.\n * This might be used to record event time-stamps in the application.\n *\n * Time-scale\n *\n * The length of the solar day is the standard way that humans measure time.\n * This has traditionally been subdivided into 24 hours of 60 minutes of 60 seconds,\n * forming a 86400 second day.\n *\n * Modern timekeeping is based on atomic clocks which precisely define an SI second\n * relative to the transitions of a Caesium atom. The length of an SI second was defined\n * to be very close to the 86400th fraction of a day.\n *\n * Unfortunately, as the Earth rotates the length of the day varies.\n * In addition, over time the average length of the day is getting longer as the Earth slows.\n * As a result, the length of a solar day in 2012 is slightly longer than 86400 SI seconds.\n * The actual length of any given day and the amount by which the Earth is slowing\n * are not predictable and can only be determined by measurement.\n * The UT1 time-scale captures the accurate length of day, but is only available some\n * time after the day has completed.\n *\n * The UTC time-scale is a standard approach to bundle up all the additional fractions\n * of a second from UT1 into whole seconds, known as *leap-seconds*.\n * A leap-second may be added or removed depending on the Earth's rotational changes.\n * As such, UTC permits a day to have 86399 SI seconds or 86401 SI seconds where\n * necessary in order to keep the day aligned with the Sun.\n *\n * The modern UTC time-scale was introduced in 1972, introducing the concept of whole leap-seconds.\n * Between 1958 and 1972, the definition of UTC was complex, with minor sub-second leaps and\n * alterations to the length of the notional second. As of 2012, discussions are underway\n * to change the definition of UTC again, with the potential to remove leap seconds or\n * introduce other changes.\n *\n * Given the complexity of accurate timekeeping described above, this Java API defines\n * its own time-scale, the *Java Time-Scale*.\n *\n * The Java Time-Scale divides each calendar day into exactly 86400\n * subdivisions, known as seconds.  These seconds may differ from the\n * SI second.  It closely matches the de facto international civil time\n * scale, the definition of which changes from time to time.\n *\n * The Java Time-Scale has slightly different definitions for different\n * segments of the time-line, each based on the consensus international\n * time scale that is used as the basis for civil time. Whenever the\n * internationally-agreed time scale is modified or replaced, a new\n * segment of the Java Time-Scale must be defined for it.  Each segment\n * must meet these requirements:\n *\n * * the Java Time-Scale shall closely match the underlying international\n *   civil time scale;\n * * the Java Time-Scale shall exactly match the international civil\n *   time scale at noon each day;\n * * the Java Time-Scale shall have a precisely-defined relationship to\n *   the international civil time scale.\n *\n * There are currently, as of 2013, two segments in the Java time-scale.\n *\n * For the segment from 1972-11-03 (exact boundary discussed below) until\n * further notice, the consensus international time scale is UTC (with\n * leap seconds).  In this segment, the Java Time-Scale is identical to\n * [UTC-SLS](http://www.cl.cam.ac.uk/~mgk25/time/utc-sls/).\n * This is identical to UTC on days that do not have a leap second.\n * On days that do have a leap second, the leap second is spread equally\n * over the last 1000 seconds of the day, maintaining the appearance of\n * exactly 86400 seconds per day.\n *\n * For the segment prior to 1972-11-03, extending back arbitrarily far,\n * the consensus international time scale is defined to be UT1, applied\n * proleptically, which is equivalent to the (mean) solar time on the\n * prime meridian (Greenwich). In this segment, the Java Time-Scale is\n * identical to the consensus international time scale. The exact\n * boundary between the two segments is the instant where UT1 = UTC\n * between 1972-11-03T00:00 and 1972-11-04T12:00.\n *\n * Implementations of the Java time-scale using the JSR-310 API are not\n * required to provide any clock that is sub-second accurate, or that\n * progresses monotonically or smoothly. Implementations are therefore\n * not required to actually perform the UTC-SLS slew or to otherwise be\n * aware of leap seconds. JSR-310 does, however, require that\n * implementations must document the approach they use when defining a\n * clock representing the current instant.\n * See {@link Clock} for details on the available clocks.\n *\n * The Java time-scale is used for all date-time classes.\n * This includes {@link Instant}, {@link LocalDate}, {@link LocalTime}, {@link OffsetDateTime},\n * {@link ZonedDateTime} and {@link Duration}.\n *\n * ### Static properties of Class {@link Instant}\n *\n * Instant.EPOCH\n *\n * Instant.MIN\n *\n * Instant.MAX\n *\n * Instant.MIN_SECONDS\n *\n * Instant.MAX_SECONDS\n *\n */\nexport class Instant extends Temporal {\n\n    /**\n     * Obtains the current instant from the system clock, or if specified\n     * the current instant from the specified clock.\n     *\n     * This will query the specified clock to obtain the current time.\n     *\n     * @param {Clock} [clock=Clock.systemUTC()] - the clock to use, defaults to the system clock\n     * @return {Instant} the current instant, not null\n     */\n    static now(clock = Clock.systemUTC()){\n        return clock.instant();\n    }\n\n    /**\n     * Obtains an instance of {@link Instant} using seconds from the\n     * epoch of 1970-01-01T00:00:00Z.\n     *\n     * @param {number} epochSecond - the number of seconds from 1970-01-01T00:00:00Z\n     * @param {number} nanoAdjustment nanoseconds start from the start of epochSecond, if null the nanosecond field is set to zero.\n     * @return {Instant} an instant, not null\n     * @throws DateTimeException if the instant exceeds the maximum or minimum instant\n     */\n    static ofEpochSecond(epochSecond, nanoAdjustment=0){\n        const secs = epochSecond + MathUtil.floorDiv(nanoAdjustment, LocalTime.NANOS_PER_SECOND);\n        const nos = MathUtil.floorMod(nanoAdjustment, LocalTime.NANOS_PER_SECOND);\n        return Instant._create(secs, nos);\n    }\n\n    /**\n     * Obtains an instance of {@link Instant} using milliseconds from the\n     * epoch of 1970-01-01T00:00:00Z.\n     *\n     * The seconds and nanoseconds are extracted from the specified milliseconds.\n     *\n     * @param {number} epochMilli - the number of milliseconds from 1970-01-01T00:00:00Z\n     * @return {Instant} an instant, not null\n     * @throws DateTimeException if the instant exceeds the maximum or minimum instant\n     */\n    static ofEpochMilli(epochMilli) {\n        const secs = MathUtil.floorDiv(epochMilli, 1000);\n        const mos = MathUtil.floorMod(epochMilli, 1000);\n        return Instant._create(secs, mos * 1000000);\n    }\n\n    /**\n     * Obtains an instance of {@link Instant} using microseconds from the\n     * epoch of 1970-01-01T00:00:00Z.\n     *\n     * @param {number} epochMicro - the number of microseconds from 1970-01-01T00:00:00Z\n     * @return {Instant} an instant, not null\n     * @throws DateTimeException if the instant exceeds the maximum or minimum instant\n     */\n    static ofEpochMicro(epochMicro) {\n        const secs = MathUtil.floorDiv(epochMicro, 1000000);\n        const mos = MathUtil.floorMod(epochMicro, 1000000);\n        return Instant._create(secs, mos * 1000);\n    }\n\n    /**\n     * Obtains an instance of {@link Instant} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link Instant}.\n     *\n     * The conversion extracts the {@link ChronoField#INSTANT_SECONDS}\n     * and {@link ChronoField#NANO_OF_SECOND} fields.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used as a query via method reference, {@link Instant::from}.\n     *\n     * @param {TemporalAccessor} temporal - the temporal object to convert, not null\n     * @return {Instant} the instant, not null\n     * @throws DateTimeException if unable to convert to an {@link Instant}\n     */\n    static from(temporal) {\n        try {\n            const instantSecs = temporal.getLong(ChronoField.INSTANT_SECONDS);\n            const nanoOfSecond = temporal.get(ChronoField.NANO_OF_SECOND);\n            return Instant.ofEpochSecond(instantSecs, nanoOfSecond);\n        } catch (ex) {\n            throw new DateTimeException(`Unable to obtain Instant from TemporalAccessor: ${ \n                temporal}, type ${typeof temporal}`, ex);\n        }\n    }\n\n    /**\n     * Obtains an instance of {@link Instant} from a text string such as\n     * `2007-12-03T10:15:30.000Z`.\n     *\n     * The string must represent a valid instant in UTC and is parsed using\n     * {@link DateTimeFormatter#ISO_INSTANT}.\n     *\n     * @param {string} text - the text to parse, not null\n     * @return {Instant} the parsed instant, not null\n     * @throws DateTimeParseException if the text cannot be parsed\n     */\n    static parse(text) {\n        return DateTimeFormatter.ISO_INSTANT.parse(text, Instant.FROM);\n    }\n\n    /**\n     *\n     * @param {number} seconds\n     * @param {number} nanoOfSecond\n     * @returns {Instant}\n     * @private\n     */\n    static _create(seconds, nanoOfSecond){\n        if(seconds === 0 && nanoOfSecond === 0){\n            return Instant.EPOCH;\n        }\n        return new Instant(seconds, nanoOfSecond);\n    }\n\n    /**\n     *\n     * @param {number} seconds\n     * @param {number} nanoOfSecond\n     * @private\n     */\n    static _validate(seconds, nanoOfSecond){\n        if (seconds < Instant.MIN_SECONDS || seconds > Instant.MAX_SECONDS) {\n            throw new DateTimeException('Instant exceeds minimum or maximum instant');\n        }\n        if (nanoOfSecond < 0 || nanoOfSecond > LocalTime.NANOS_PER_SECOND) {\n            throw new DateTimeException('Instant exceeds minimum or maximum instant');\n        }\n    }\n\n    /**\n     *\n     * @param {number} seconds\n     * @param {number} nanoOfSecond\n     * @private\n     */\n    constructor(seconds, nanoOfSecond){\n        super();\n        Instant._validate(seconds, nanoOfSecond);\n        this._seconds = MathUtil.safeToInt(seconds);\n        this._nanos = MathUtil.safeToInt(nanoOfSecond);\n    }\n\n    /**\n     * Checks if the specified field is supported.\n     *\n     * This checks if this instant can be queried for the specified field.\n     * If false, then calling {@link range} and {@link get} will throw an exception.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields are:\n     *\n     * * {@link NANO_OF_SECOND}\n     * * {@link MICRO_OF_SECOND}\n     * * {@link MILLI_OF_SECOND}\n     * * {@link INSTANT_SECONDS}\n     *\n     * All other {@link ChronoField} instances will return false.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.isSupportedBy}\n     * passing `this` as the argument.\n     * Whether the field is supported is determined by the field.\n     *\n     * @param {TemporalField|TemporalUnit} fieldOrUnit - the field to check, null returns false\n     * @return {boolean} true if the field is supported on this instant, false if not\n     */\n    isSupported(fieldOrUnit) {\n        if (fieldOrUnit instanceof ChronoField) {\n            return fieldOrUnit === ChronoField.INSTANT_SECONDS || fieldOrUnit === ChronoField.NANO_OF_SECOND || fieldOrUnit === ChronoField.MICRO_OF_SECOND || fieldOrUnit === ChronoField.MILLI_OF_SECOND;\n        }\n        if (fieldOrUnit instanceof ChronoUnit) {\n            return fieldOrUnit.isTimeBased() || fieldOrUnit === ChronoUnit.DAYS;\n        }\n        return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n    }\n\n    /**\n     * Gets the range of valid values for the specified field.\n     *\n     * The range object expresses the minimum and maximum valid values for a field.\n     * This instant is used to enhance the accuracy of the returned range.\n     * If it is not possible to return the range, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return\n     * appropriate range instances.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n     * passing `this` as the argument.\n     * Whether the range can be obtained is determined by the field.\n     *\n     * @param {TemporalField} field - the field to query the range for, not null\n     * @return {ValueRange} the range of valid values for the field, not null\n     * @throws DateTimeException if the range for the field cannot be obtained\n     */\n    range(field) {\n        return super.range(field);\n    }\n\n    /**\n     * Gets the value of the specified field from this instant as an `int`.\n     *\n     * This queries this instant for the value for the specified field.\n     * The returned value will always be within the valid range of values for the field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this date-time, except {@link INSTANT_SECONDS} which is too\n     * large to fit in an `int` and throws a {@link DateTimeException}.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    get(field) {\n        return this.getLong(field);\n    }\n\n    /**\n     * Gets the value of the specified field from this instant as a `long`.\n     *\n     * This queries this instant for the value for the specified field.\n     * If it is not possible to return the value, because the field is not supported\n     * or for some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the query is implemented here.\n     * The supported fields (see {@link isSupported}) will return valid\n     * values based on this date-time.\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.getFrom}\n     * passing `this` as the argument. Whether the value can be obtained,\n     * and what the value represents, is determined by the field.\n     *\n     * @param {TemporalField} field - the field to get, not null\n     * @return {number} the value for the field\n     * @throws DateTimeException if a value for the field cannot be obtained\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    getLong(field) {\n        if (field instanceof ChronoField) {\n            switch (field) {\n                case ChronoField.NANO_OF_SECOND: return this._nanos;\n                case ChronoField.MICRO_OF_SECOND: return MathUtil.intDiv(this._nanos, 1000);\n                case ChronoField.MILLI_OF_SECOND: return MathUtil.intDiv(this._nanos, NANOS_PER_MILLI);\n                case ChronoField.INSTANT_SECONDS: return this._seconds;\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.getFrom(this);\n    }\n\n    /**\n     * Gets the number of seconds from the Java epoch of 1970-01-01T00:00:00Z.\n     *\n     * The epoch second count is a simple incrementing count of seconds where\n     * second 0 is 1970-01-01T00:00:00Z.\n     * The nanosecond part of the day is returned by {@link getNanosOfSecond}.\n     *\n     * @return {number} the seconds from the epoch of 1970-01-01T00:00:00Z\n     */\n    epochSecond(){\n        return this._seconds;\n    }\n\n    /**\n     * Gets the number of nanoseconds, later along the time-line, from the start\n     * of the second.\n     *\n     * The nanosecond-of-second value measures the total number of nanoseconds from\n     * the second returned by {@link getEpochSecond}.\n     *\n     * @return {number} the nanoseconds within the second, always positive, never exceeds 999,999,999\n     */\n    nano(){\n        return this._nanos;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this instant with the specified field set to a new value.\n     *\n     * This returns a new {@link Instant}, based on this one, with the value\n     * for the specified field changed.\n     * If it is not possible to set the value, because the field is not supported or for\n     * some other reason, an exception is thrown.\n     *\n     * If the field is a {@link ChronoField} then the adjustment is implemented here.\n     * The supported fields behave as follows:\n     *\n     * * {@link NANO_OF_SECOND} -\n     *  Returns an {@link Instant} with the specified nano-of-second.\n     *  The epoch-second will be unchanged.\n     * * {@link MICRO_OF_SECOND} -\n     *  Returns an {@link Instant} with the nano-of-second replaced by the specified\n     *  micro-of-second multiplied by 1,000. The epoch-second will be unchanged.\n     * * {@link MILLI_OF_SECOND} -\n     *  Returns an {@link Instant} with the nano-of-second replaced by the specified\n     *  milli-of-second multiplied by 1,000,000. The epoch-second will be unchanged.\n     * * {@link INSTANT_SECONDS} -\n     *  Returns an {@link Instant} with the specified epoch-second.\n     *  The nano-of-second will be unchanged.\n     *\n     *\n     * In all cases, if the new value is outside the valid range of values for the field\n     * then a {@link DateTimeException} will be thrown.\n     *\n     * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n     *\n     * If the field is not a {@link ChronoField}, then the result of this method\n     * is obtained by invoking {@link TemporalField.adjustInto}\n     * passing `this` as the argument. In this case, the field determines\n     * whether and how to adjust the instant.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {TemporalField} field - the field to set in the result, not null\n     * @param {number} newValue - the new value of the field in the result\n     * @return {Instant} an {@link Instant} based on `this` with the specified field set, not null\n     * @throws DateTimeException if the field cannot be set\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    _withField(field, newValue) {\n        requireNonNull(field, 'field');\n        if (field instanceof ChronoField) {\n            field.checkValidValue(newValue);\n            switch (field) {\n                case ChronoField.MILLI_OF_SECOND: {\n                    const nval = newValue * NANOS_PER_MILLI;\n                    return (nval !== this._nanos? Instant._create(this._seconds, nval) : this);\n                }\n                case ChronoField.MICRO_OF_SECOND: {\n                    const nval = newValue * 1000;\n                    return (nval !== this._nanos? Instant._create(this._seconds, nval) : this);\n                }\n                case ChronoField.NANO_OF_SECOND: return (newValue !== this._nanos? Instant._create(this._seconds, newValue) : this);\n                case ChronoField.INSTANT_SECONDS: return (newValue !== this._seconds ? Instant._create(newValue, this._nanos) : this);\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported field: ${field}`);\n        }\n        return field.adjustInto(this, newValue);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a copy of this {@link Instant} truncated to the specified unit.\n     *\n     * Truncating the instant returns a copy of the original with fields\n     * smaller than the specified unit set to zero.\n     * The fields are calculated on the basis of using a UTC offset as seen\n     * in {@link toString}.\n     * For example, truncating with {@link ChronoUnit#MINUTES} will\n     * round down to the nearest minute, setting the seconds and nanoseconds to zero.\n     *\n     * The unit must have a duration (see {@link TemporalUnit#getDuration})\n     * that divides into the length of a standard day without remainder.\n     * This includes all supplied time units on {@link ChronoUnit} and\n     * {@link ChronoUnit#DAYS}. Other units throw an exception.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {!TemporalUnit} unit - the unit to truncate to, not null\n     * @return {Instant} an {@link Instant} based on this instant with the time truncated, not null\n     * @throws DateTimeException if the unit is invalid for truncation\n     */\n    truncatedTo(unit) {\n        requireNonNull(unit, 'unit');\n        if (unit === ChronoUnit.NANOS) {\n            return this;\n        }\n        const unitDur = unit.duration();\n        if (unitDur.seconds() > LocalTime.SECONDS_PER_DAY) {\n            throw new DateTimeException('Unit is too large to be used for truncation');\n        }\n        const dur = unitDur.toNanos();\n        if (MathUtil.intMod(LocalTime.NANOS_PER_DAY, dur) !== 0) {\n            throw new DateTimeException('Unit must divide into a standard day without remainder');\n        }\n        const nod = MathUtil.intMod(this._seconds, LocalTime.SECONDS_PER_DAY) * LocalTime.NANOS_PER_SECOND + this._nanos;\n        const result = MathUtil.intDiv(nod, dur) * dur;\n        return this.plusNanos(result - nod);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * @param {!number} amountToAdd\n     * @param {!TemporalUnit} unit\n     * @return {Instant}\n     * @throws DateTimeException\n     * @throws ArithmeticException\n     */\n    _plusUnit(amountToAdd, unit) {\n        requireNonNull(amountToAdd, 'amountToAdd');\n        requireNonNull(unit, 'unit');\n        requireInstance(unit, TemporalUnit);\n        if (unit instanceof ChronoUnit) {\n            switch (unit) {\n                case ChronoUnit.NANOS: return this.plusNanos(amountToAdd);\n                case ChronoUnit.MICROS: return this.plusMicros(amountToAdd);\n                case ChronoUnit.MILLIS: return this.plusMillis(amountToAdd);\n                case ChronoUnit.SECONDS: return this.plusSeconds(amountToAdd);\n                case ChronoUnit.MINUTES: return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_MINUTE));\n                case ChronoUnit.HOURS: return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_HOUR));\n                case ChronoUnit.HALF_DAYS: return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_DAY / 2));\n                case ChronoUnit.DAYS: return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_DAY));\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.addTo(this, amountToAdd);\n    }\n\n    /**\n     * Returns a copy of this instant with the specified duration in seconds added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} secondsToAdd  the seconds to add, positive or negative\n     * @return {Instant} an {@link Instant} based on this instant with the specified seconds added, not null\n     * @throws DateTimeException if the result exceeds the maximum or minimum instant\n     */\n    plusSeconds(secondsToAdd) {\n        return this._plus(secondsToAdd, 0);\n    }\n\n    /**\n     * Returns a copy of this instant with the specified duration in milliseconds added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} millisToAdd - the milliseconds to add, positive or negative\n     * @return {Instant} an {@link Instant} based on this instant with the specified milliseconds added, not null\n     * @throws DateTimeException if the result exceeds the maximum or minimum instant\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    plusMillis(millisToAdd) {\n        return this._plus(MathUtil.intDiv(millisToAdd, 1000), MathUtil.intMod(millisToAdd, 1000) * NANOS_PER_MILLI);\n    }\n\n    /**\n     * Returns a copy of this instant with the specified duration in nanoseconds added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} nanosToAdd - the nanoseconds to add, positive or negative\n     * @return {Instant} an {@link Instant} based on this instant with the specified nanoseconds added, not null\n     * @throws DateTimeException if the result exceeds the maximum or minimum instant\n     */\n    plusNanos(nanosToAdd) {\n        return this._plus(0, nanosToAdd);\n    }\n\n    /**\n     * Returns a copy of this instant with the specified duration in microseconds added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} microsToAdd - the microseconds to add, positive or negative\n     * @return {Instant} an {@link Instant} based on this instant with the specified microseconds added, not null\n     * @throws DateTimeException if the result exceeds the maximum or minimum instant\n     */\n    plusMicros(microsToAdd) {\n        return this._plus(MathUtil.intDiv(microsToAdd, 1000000), MathUtil.intMod(microsToAdd, 1000000) * 1000);\n    }\n\n    /**\n     * Returns a copy of this instant with the specified duration added.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} secondsToAdd - the seconds to add, positive or negative\n     * @param {number} nanosToAdd - the nanos to add, positive or negative\n     * @return {Instant} an {@link Instant} based on this instant with the specified seconds added, not null\n     * @throws DateTimeException if the result exceeds the maximum or minimum instant\n     */\n    _plus(secondsToAdd, nanosToAdd) {\n        if (secondsToAdd === 0 && nanosToAdd === 0) {\n            return this;\n        }\n        let epochSec = this._seconds + secondsToAdd;\n        epochSec = epochSec + MathUtil.intDiv(nanosToAdd, LocalTime.NANOS_PER_SECOND);\n        const nanoAdjustment = this._nanos + nanosToAdd % LocalTime.NANOS_PER_SECOND;\n        return Instant.ofEpochSecond(epochSec, nanoAdjustment);\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * @param {!number} amountToSubtract\n     * @param {!TemporalUnit} unit\n     * @return {Instant}\n     * @throws DateTimeException\n     * @throws ArithmeticException\n     */\n    _minusUnit(amountToSubtract, unit) {\n        return this._plusUnit(-1 * amountToSubtract, unit);\n    }\n\n    /**\n     * Returns a copy of this instant with the specified duration in seconds subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} secondsToSubtract - the seconds to subtract, positive or negative\n     * @return {Instant} an {@link Instant} based on this instant with the specified seconds subtracted, not null\n     * @throws DateTimeException if the result exceeds the maximum or minimum instant\n     */\n    minusSeconds(secondsToSubtract) {\n        return this.plusSeconds(secondsToSubtract * -1);\n    }\n\n    /**\n     * Returns a copy of this instant with the specified duration in milliseconds subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} millisToSubtract - the milliseconds to subtract, positive or negative\n     * @return {Instant} an {@link Instant} based on this instant with the specified milliseconds subtracted, not null\n     * @throws DateTimeException if the result exceeds the maximum or minimum instant\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusMillis(millisToSubtract) {\n        return this.plusMillis(-1 * millisToSubtract);\n    }\n\n    /**\n     * Returns a copy of this instant with the specified duration in nanoseconds subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} nanosToSubtract  the nanoseconds to subtract, positive or negative\n     * @return {Instant} an {@link Instant} based on this instant with the specified nanoseconds subtracted, not null\n     * @throws DateTimeException if the result exceeds the maximum or minimum instant\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusNanos(nanosToSubtract) {\n        return this.plusNanos(-1 * nanosToSubtract);\n    }\n\n    /**\n     * Returns a copy of this instant with the specified duration in microseconds subtracted.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {number} microsToSubtract  the microseconds to subtract, positive or negative\n     * @return {Instant} an {@link Instant} based on this instant with the specified microseconds subtracted, not null\n     * @throws DateTimeException if the result exceeds the maximum or minimum instant\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    minusMicros(microsToSubtract) {\n        return this.plusMicros(-1 * microsToSubtract);\n    }\n\n    //-------------------------------------------------------------------------\n    /**\n     * Queries this instant using the specified query.\n     *\n     * This queries this instant using the specified query strategy object.\n     * The {@link TemporalQuery} object defines the logic to be used to\n     * obtain the result. Read the documentation of the query to understand\n     * what the result of this method will be.\n     *\n     * The result of this method is obtained by invoking the\n     * {@link TemporalQuery#queryFrom} method on the\n     * specified query passing `this` as the argument.\n     *\n     * @param {!TemporalQuery} query - the query to invoke, not null\n     * @return {*} the query result, null may be returned (defined by the query)\n     * @throws DateTimeException if unable to query (defined by the query)\n     * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n     */\n    query(query) {\n        requireNonNull(query, 'query');\n        if (query === TemporalQueries.precision()) {\n            return ChronoUnit.NANOS;\n        }\n        // inline TemporalAccessor.super.query(query) as an optimization\n        if (query === TemporalQueries.localDate() || query === TemporalQueries.localTime() ||\n                query === TemporalQueries.chronology() || query === TemporalQueries.zoneId() ||\n                query === TemporalQueries.zone() || query === TemporalQueries.offset()) {\n            return null;\n        }\n        return query.queryFrom(this);\n    }\n\n    /**\n     * Adjusts the specified temporal object to have this instant.\n     *\n     * This returns a temporal object of the same observable type as the input\n     * with the instant changed to be the same as this.\n     *\n     * The adjustment is equivalent to using {@link Temporal#with}\n     * twice, passing {@link ChronoField#INSTANT_SECONDS} and\n     * {@link ChronoField#NANO_OF_SECOND} as the fields.\n     *\n     * In most cases, it is clearer to reverse the calling pattern by using\n     * {@link Temporal#with}:\n     * <pre>\n     *   // these two lines are equivalent, but the second approach is recommended\n     *   temporal = thisInstant.adjustInto(temporal);\n     *   temporal = temporal.with(thisInstant);\n     * </pre>\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {!Temporal} temporal - the target object to be adjusted, not null\n     * @return {Temporal} the adjusted object, not null\n     * @throws DateTimeException if unable to make the adjustment\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    adjustInto(temporal) {\n        requireNonNull(temporal, 'temporal');\n        return temporal.with(ChronoField.INSTANT_SECONDS, this._seconds).with(ChronoField.NANO_OF_SECOND, this._nanos);\n    }\n\n    /**\n     * Calculates the period between this instant and another instant in\n     * terms of the specified unit.\n     *\n     * This calculates the period between two instants in terms of a single unit.\n     * The start and end points are `this` and the specified instant.\n     * The result will be negative if the end is before the start.\n     * The calculation returns a whole number, representing the number of\n     * complete units between the two instants.\n     * The {@link Temporal} passed to this method is converted to a\n     * {@link Instant} using {@link from}.\n     * For example, the period in days between two dates can be calculated\n     * using `startInstant.until(endInstant, SECONDS)`.\n     *\n     * This method operates in association with {@link TemporalUnit#between}.\n     * The result of this method is a `long` representing the amount of\n     * the specified unit. By contrast, the result of {@link between} is an\n     * object that can be used directly in addition/subtraction:\n     * <pre>\n     *   long period = start.until(end, SECONDS);   // this method\n     *   dateTime.plus(SECONDS.between(start, end));      // use in plus/minus\n     * </pre>\n     *\n     * The calculation is implemented in this method for {@link ChronoUnit}.\n     * The units {@link NANOS}, {@link MICROS}, {@link MILLIS}, {@link SECONDS},\n     * {@link MINUTES}, {@link HOURS}, {@link HALF_DAYS} and {@link DAYS}\n     * are supported. Other {@link ChronoUnit} values will throw an exception.\n     *\n     * If the unit is not a {@link ChronoUnit}, then the result of this method\n     * is obtained by invoking {@link TemporalUnit.between}\n     * passing `this` as the first argument and the input temporal as\n     * the second argument.\n     *\n     * This instance is immutable and unaffected by this method call.\n     *\n     * @param {Temporal} endExclusive - the end date, which is converted to an {@link Instant}, not null\n     * @param {TemporalUnit} unit - the unit to measure the period in, not null\n     * @return {number} the amount of the period between this date and the end date\n     * @throws DateTimeException if the period cannot be calculated\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    until(endExclusive, unit) {\n        requireNonNull(endExclusive, 'endExclusive');\n        requireNonNull(unit, 'unit');\n        const end = Instant.from(endExclusive);\n        if (unit instanceof ChronoUnit) {\n            switch (unit) {\n                case ChronoUnit.NANOS: return this._nanosUntil(end);\n                case ChronoUnit.MICROS: return this._microsUntil(end);\n                case ChronoUnit.MILLIS: return MathUtil.safeSubtract(end.toEpochMilli(), this.toEpochMilli());\n                case ChronoUnit.SECONDS: return this._secondsUntil(end);\n                case ChronoUnit.MINUTES: return MathUtil.intDiv(this._secondsUntil(end), LocalTime.SECONDS_PER_MINUTE);\n                case ChronoUnit.HOURS: return MathUtil.intDiv(this._secondsUntil(end), LocalTime.SECONDS_PER_HOUR);\n                case ChronoUnit.HALF_DAYS: return MathUtil.intDiv(this._secondsUntil(end), (12 * LocalTime.SECONDS_PER_HOUR));\n                case ChronoUnit.DAYS: return MathUtil.intDiv(this._secondsUntil(end), LocalTime.SECONDS_PER_DAY);\n            }\n            throw new UnsupportedTemporalTypeException(`Unsupported unit: ${unit}`);\n        }\n        return unit.between(this, end);\n    }\n\n    /**\n     *\n     * @param {Temporal} end\n     * @returns {number}\n     * @private\n     */\n    _microsUntil(end) {\n        const secsDiff = MathUtil.safeSubtract(end.epochSecond(), this.epochSecond());\n        const totalMicros = MathUtil.safeMultiply(secsDiff, 1000000);\n        return MathUtil.safeAdd(totalMicros, MathUtil.intDiv(end.nano() - this.nano(), 1000));\n    }\n\n    /**\n     *\n     * @param {Temporal} end\n     * @returns {number}\n     * @private\n     */\n    _nanosUntil(end) {\n        const secsDiff = MathUtil.safeSubtract(end.epochSecond(), this.epochSecond());\n        const totalNanos = MathUtil.safeMultiply(secsDiff, LocalTime.NANOS_PER_SECOND);\n        return MathUtil.safeAdd(totalNanos, end.nano() - this.nano());\n    }\n\n    /**\n     *\n     * @param {Temporal} end\n     * @returns {number}\n     * @private\n     */\n    _secondsUntil(end) {\n        let secsDiff = MathUtil.safeSubtract(end.epochSecond(), this.epochSecond());\n        const nanosDiff = end.nano() - this.nano();\n        if (secsDiff > 0 && nanosDiff < 0) {\n            secsDiff--;\n        } else if (secsDiff < 0 && nanosDiff > 0) {\n            secsDiff++;\n        }\n        return secsDiff;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Combines this instant with an offset to create an {@link OffsetDateTime}.\n     *\n     * This returns an {@link OffsetDateTime} formed from this instant at the\n     * specified offset from UTC/Greenwich. An exception will be thrown if the\n     * instant is too large to fit into an offset date-time.\n     *\n     * This method is equivalent to {@link OffsetDateTime#ofInstant}.\n     *\n     * @param {ZoneOffset} offset - the offset to combine with, not null\n     * @return {OffsetDateTime} the offset date-time formed from this instant and the specified offset, not null\n     * @throws DateTimeException if the result exceeds the supported range\n     */\n    atOffset(offset) {\n        return OffsetDateTime.ofInstant(this, offset);\n    }\n\n    /**\n     * Combines this instant with a time-zone to create a {@link ZonedDateTime}.\n     *\n     * This returns an {@link ZonedDateTime} formed from this instant at the\n     * specified time-zone. An exception will be thrown if the instant is too\n     * large to fit into a zoned date-time.\n     *\n     * This method is equivalent to {@link ZonedDateTime#ofInstant}.\n     *\n     * @param {ZoneId} zone - the zone to combine with, not null\n     * @return {ZonedDateTime} the zoned date-time formed from this instant and the specified zone, not null\n     * @throws DateTimeException if the result exceeds the supported range\n     */\n    atZone(zone) {\n        return ZonedDateTime.ofInstant(this, zone);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Converts this instant to the number of milliseconds from the epoch\n     * of 1970-01-01T00:00:00Z.\n     *\n     * If this instant represents a point on the time-line too far in the future\n     * or past to fit in a `long` milliseconds, then an exception is thrown.\n     *\n     * If this instant has greater than millisecond precision, then the conversion\n     * will drop any excess precision information as though the amount in nanoseconds\n     * was subject to integer division by one million.\n     *\n     * @return {number} the number of milliseconds since the epoch of 1970-01-01T00:00:00Z\n     * @throws ArithmeticException if numeric overflow occurs\n     */\n    toEpochMilli() {\n        const millis = MathUtil.safeMultiply(this._seconds, 1000);\n        return millis + MathUtil.intDiv(this._nanos, NANOS_PER_MILLI);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Compares this instant to the specified instant.\n     *\n     * The comparison is based on the time-line position of the instants.\n     * It is \"consistent with equals\", as defined by {@link Comparable}.\n     *\n     * @param {Instant} otherInstant  the other instant to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     * @throws NullPointerException if otherInstant is null\n     */\n    compareTo(otherInstant) {\n        requireNonNull(otherInstant, 'otherInstant');\n        requireInstance(otherInstant, Instant, 'otherInstant');\n        const cmp = MathUtil.compareNumbers(this._seconds, otherInstant._seconds);\n        if (cmp !== 0) {\n            return cmp;\n        }\n        return this._nanos - otherInstant._nanos;\n    }\n\n    /**\n     * Checks if this instant is after the specified instant.\n     *\n     * The comparison is based on the time-line position of the instants.\n     *\n     * @param {Instant} otherInstant  the other instant to compare to, not null\n     * @return {boolean} true if this instant is after the specified instant\n     * @throws NullPointerException if otherInstant is null\n     */\n    isAfter(otherInstant) {\n        return this.compareTo(otherInstant) > 0;\n    }\n\n    /**\n     * Checks if this instant is before the specified instant.\n     *\n     * The comparison is based on the time-line position of the instants.\n     *\n     * @param {Instant} otherInstant  the other instant to compare to, not null\n     * @return {boolean} true if this instant is before the specified instant\n     * @throws NullPointerException if otherInstant is null\n     */\n    isBefore(otherInstant) {\n        return this.compareTo(otherInstant) < 0;\n    }\n\n    /**\n     * Checks if this instant is equal to the specified instant.\n     *\n     * The comparison is based on the time-line position of the instants.\n     *\n     * @param {*} other - the other instant, null/ undefined returns false\n     * @return {boolean} true if the other instant is equal to this one\n     */\n    equals(other) {\n        if(this === other){\n            return true;\n        }\n        if(other instanceof Instant){\n            return this.epochSecond() === other.epochSecond() &&\n                this.nano() === other.nano();\n        }\n        return false;\n    }\n\n    /**\n     * Returns a hash code for this instant.\n     *\n     * @return {number} a suitable hash code\n     */\n    hashCode() {\n        return MathUtil.hashCode(this._seconds, this._nanos);\n    }\n\n    /**\n     * A string representation of this instant using ISO-8601 representation.\n     *\n     * The format used is the same as {@link DateTimeFormatter#ISO_INSTANT}.\n     *\n     * @return {string} an ISO-8601 representation of this instant, not null\n     */\n    toString(){\n        return DateTimeFormatter.ISO_INSTANT.format(this);\n    }\n\n    /**\n     *\n     * @return {string} same as {@link LocalDate.toString}\n     */\n    toJSON() {\n        return this.toString();\n    }\n}\n\nexport function _init() {\n    Instant.MIN_SECONDS = -31619119219200; // -1000000-01-01T00:00:00Z\n    Instant.MAX_SECONDS = 31494816403199; // +1000000-12-31T23:59:59.999999999Z\n    Instant.EPOCH = new Instant(0, 0);\n    Instant.MIN = Instant.ofEpochSecond(Instant.MIN_SECONDS, 0);\n    Instant.MAX = Instant.ofEpochSecond(Instant.MAX_SECONDS, 999999999);\n    Instant.FROM = createTemporalQuery('Instant.FROM', (temporal) => {\n        return Instant.from(temporal);\n    });\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { abstractMethodFail, requireNonNull } from './assert';\nimport { Instant } from './Instant';\nimport { ZoneId } from './ZoneId';\nimport { ZoneOffset } from './ZoneOffset';\n\n/**\n * A clock providing access to the current instant, date and time using a time-zone.\n *\n * Instances of this class are used to find the current instant, which can be\n * interpreted using the stored time-zone to find the current date and time.\n * As such, a clock can be used instead of {@link System#currentTimeMillis}\n * and {@link TimeZone#getDefault}.\n *\n * Use of a {@link Clock} is optional. All key date-time classes also have a\n * `now()` factory method that uses the system clock in the default time zone.\n * The primary purpose of this abstraction is to allow alternate clocks to be\n * plugged in as and when required. Applications use an object to obtain the\n * current time rather than a static method. This can simplify testing.\n *\n * Best practice for applications is to pass a {@link Clock} into any method\n * that requires the current instant.\n *\n * This approach allows an alternate clock, such as {@link fixed}\n * or {@link offset} to be used during testing.\n *\n * The {@link system} factory methods provide clocks based on the best available\n * system clock This may use {@link System#currentTimeMillis}, or a higher\n * resolution clock if one is available.\n *\n * The javascript Clock implementation differs from the openjdk.\n *\n * Javascript only provides the UTC millis of epoch and the ZoneOffset in minutes of the system default time.\n * Javascript do not provide the system default ZoneId.\n *\n * the system default ZoneId is only guessable by the ZoneOffset, like moment-timezone does by returning one ZoneId\n * with the same ZoneOffset.\n *\n * Therefore we are doing a shortcut here, by defining a SystemUTCClock and a SystemDefaultClock, the Clock itself\n * is returning the ZoneOffset and not the ZoneRules as in the jdk. We should change it, when introducing the iana\n * timezone database and implementing the timezone domains.\n *\n */\n\nexport class Clock {\n    /**\n     * Obtains a clock that returns the current instant using the\n     * system clock, converting to date and time using the Date.getTime() UTC millis.\n     *\n     * This clock, rather than {@link systemDefaultZone}, should be used when\n     * you need the current instant without the date or time.\n     *\n     * @return {Clock} a clock that uses the system clock in the UTC zone, not null\n     */\n    static systemUTC() {\n        return new SystemClock(ZoneOffset.UTC);\n    }\n\n    /**\n     * Obtains a clock that returns the current instant using the best available\n     * system clock, converting to date and time using the default time-zone.\n     *\n     * This clock is based on the available system clock using the Date.getTime() UTC millis\n     *\n     * Using this method hard codes a dependency to the default time-zone into your application.\n     *\n     * The UTC clock (see {@link systemUTC}) should be used when you need the current instant\n     * without the date or time.\n     *\n     *\n     * @return {Clock} a clock that uses the system clock in the default zone, not null\n     * @see ZoneId#systemDefault()\n     */\n    static systemDefaultZone() {\n        return new SystemClock(ZoneId.systemDefault());\n    }\n\n    /**\n     *\n     * @param {ZoneId} zone\n     * @return {Clock} a clock that uses the specified time zone\n     */\n    static system(zone){\n        return new SystemClock(zone);\n    }\n\n    /**\n     * Obtains a clock that always returns the same instant.\n     *\n     * This clock simply returns the specified instant.\n     * As such, it is not a clock in the conventional sense.\n     * The main use case for this is in testing, where the fixed clock ensures\n     * tests are not dependent on the current clock.\n     *\n     * @param {Instant} fixedInstant  the instant to use as the clock, not null\n     * @param {ZoneId} zoneId  the zoneOffset to use as zone Offset, not null\n     * @return {Clock} a clock that always returns the same instant, not null\n     */\n    static fixed(fixedInstant, zoneId) {\n        return new FixedClock(fixedInstant, zoneId);\n    }\n    \n    /**\n     * Obtains a clock that returns instants from the specified clock with the\n     * specified duration added\n     * <p>\n     * This clock wraps another clock, returning instants that are later by the\n     * specified duration. If the duration is negative, the instants will be\n     * earlier than the current date and time.\n     * The main use case for this is to simulate running in the future or in the past.\n     * <p>\n     * A duration of zero would have no offsetting effect.\n     * Passing zero will return the underlying clock.\n     * <p>\n     * The returned implementation is immutable, thread-safe and {@code Serializable}\n     * providing that the base clock is.\n     *\n     * @param baseClock  the base clock to add the duration to, not null\n     * @param duration  the duration to add, not null\n     * @return a clock based on the base clock with the duration added, not null\n     */\n    static offset(baseClock, duration) {\n        return new OffsetClock(baseClock, duration);   \n    }\n\n    /**\n      * Gets the current millisecond instant of the clock.\n      *\n      * This returns the millisecond-based instant, measured from 1970-01-01T00:00Z (UTC).\n      * This is equivalent to the definition of {@link Date#getTime}.\n      *\n      * Most applications should avoid this method and use {@link Instant} to represent\n      * an instant on the time-line rather than a raw millisecond value.\n      * This method is provided to allow the use of the clock in high performance use cases\n      * where the creation of an object would be unacceptable.\n      *\n      * The default implementation currently calls {@link instant}.\n      *\n      * @return the current millisecond instant from this clock, measured from\n      *  the Java epoch of 1970-01-01T00:00Z (UTC), not null\n      */\n    millis(){\n        abstractMethodFail('Clock.millis');\n    }\n\n    /**\n     * Gets the current instant of the clock.\n     *\n     * This returns an instant representing the current instant as defined by the clock.\n     *\n     * @return {Instant} the current instant from this clock, not null\n     */\n    instant(){\n        abstractMethodFail('Clock.instant');\n    }\n\n    zone(){\n        abstractMethodFail('Clock.zone');\n    }\n    \n    /**\n     * Returns a copy of this clock with a different time-zone.\n     * <p>\n     * A clock will typically obtain the current instant and then convert that\n     * to a date or time using a time-zone. This method returns a clock with\n     * similar properties but using a different time-zone.\n     *\n     * @return a clock based on this clock with the specified time-zone, not null\n     */\n    withZone(){\n        abstractMethodFail('Clock.withZone');\n    }\n}\n\n/**\n * Implementation of a clock that always returns the latest time from\n * {@link Date#getTime}.\n *\n * @private\n */\nclass SystemClock extends Clock {\n    /**\n     *\n     * @param {!ZoneId} zone\n     */\n    constructor(zone){\n        requireNonNull(zone, 'zone');\n        super();\n        this._zone = zone;\n    }\n\n    /**\n     *\n     * @returns {!ZoneId}\n     */\n    zone() {\n        return this._zone;\n    }\n\n    /**\n     *\n     * @returns {number}\n     */\n    millis() {\n        return new Date().getTime();\n    }\n\n    /**\n     *\n     * @returns {Instant}\n     */\n    instant() {\n        return Instant.ofEpochMilli(this.millis());\n    }\n    \n    equals(obj) {    \n        if (obj instanceof SystemClock) {            \n            return this._zone.equals(obj._zone);\n        }\n        return false;    \n    }  \n      \n    withZone(zone) {\n        if (zone.equals(this._zone)) {  // intentional NPE\n            return this;\n        }\n        return new SystemClock(zone);\n    }      \n\n    /**\n     *\n     * @returns {string}\n     */\n    toString(){\n        return `SystemClock[${this._zone.toString()}]`;\n    }\n\n}\n\n/**\n * Implementation of a clock that always returns the same instant.\n * This is typically used for testing.\n * @private\n */\nclass FixedClock extends Clock{\n    constructor(fixedInstant, zoneId) {\n        super();\n        this._instant = fixedInstant;\n        this._zoneId = zoneId;\n    }\n\n    instant() {\n        return this._instant;\n    }\n\n    millis(){\n        return this._instant.toEpochMilli();\n    }\n\n    zone() {\n        return this._zoneId;\n    }\n\n    toString(){\n        return 'FixedClock[]';\n    }\n    \n    equals(obj) {    \n        if (obj instanceof FixedClock) {            \n            return this._instant.equals(obj._instant) && this._zoneId.equals(obj._zoneId);\n        }\n        return false;    \n    }\n\n    withZone(zone) {\n        if (zone.equals(this._zoneId)) {  // intentional NPE\n            return this;\n        }\n        return new FixedClock(this._instant, zone);\n    }      \n    \n}\n\n\n/**\n * Implementation of a clock that adds an offset to an underlying clock.\n */\nclass OffsetClock extends Clock {\n    constructor(baseClock, offset) {\n        super();\n        this._baseClock = baseClock;\n        this._offset = offset;\n    }\n   \n    zone() {\n        return this._baseClock.zone();\n    }\n        \n    withZone(zone) {\n        if (zone.equals(this._baseClock.zone())) {  // intentional NPE\n            return this;\n        }\n        return new OffsetClock(this._baseClock.withZone(zone), this._offset);\n    }\n    \n    millis() {\n        return this._baseClock.millis() + this._offset.toMillis();\n    }\n    \n    instant() {\n        return this._baseClock.instant().plus(this._offset);\n    }\n        \n    equals(obj) {\n        if (obj instanceof OffsetClock) {            \n            return this._baseClock.equals(obj._baseClock) && this._offset.equals(obj._offset);\n        }\n        return false;\n    }\n    \n    toString() {\n        return `OffsetClock[${this._baseClock},${this._offset}]`;\n    }\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from '../assert';\nimport { IllegalArgumentException } from '../errors';\n\nimport { Duration } from '../Duration';\nimport { LocalDateTime } from '../LocalDateTime';\n\n/**\n * A transition between two offsets caused by a discontinuity in the local time-line.\n *\n * A transition between two offsets is normally the result of a daylight savings cutover.\n * The discontinuity is normally a gap in spring and an overlap in autumn.\n * {@link ZoneOffsetTransition} models the transition between the two offsets.\n *\n * Gaps occur where there are local date-times that simply do not not exist.\n * An example would be when the offset changes from `+03:00` to `+04:00`.\n * This might be described as 'the clocks will move forward one hour tonight at 1am'.\n *\n * Overlaps occur where there are local date-times that exist twice.\n * An example would be when the offset changes from `+04:00` to `+03:00`.\n * This might be described as 'the clocks will move back one hour tonight at 2am'.\n *\n */\nexport class ZoneOffsetTransition {\n\n    //-----------------------------------------------------------------------\n    /**\n     * Obtains an instance defining a transition between two offsets.\n     *\n     * Applications should normally obtain an instance from {@link ZoneRules}.\n     * This factory is only intended for use when creating {@link ZoneRules}.\n     *\n     * @param {LocalDateTime} transition - the transition date-time at the transition, which never\n     *  actually occurs, expressed local to the before offset, not null\n     * @param {ZoneOffset} offsetBefore - the offset before the transition, not null\n     * @param {ZoneOffset} offsetAfter - the offset at and after the transition, not null\n     * @return {ZoneOffsetTransition} the transition, not null\n     * @throws IllegalArgumentException if {@link offsetBefore} and {@link offsetAfter}\n     *         are equal, or {@link transition.getNano} returns non-zero value\n     */\n    static of(transition, offsetBefore, offsetAfter) {\n        return new ZoneOffsetTransition(transition, offsetBefore, offsetAfter);\n    }\n\n    /**\n     * Creates an instance defining a transition between two offsets.\n     * Creates an instance from epoch-second if transition is not a LocalDateTimeInstance\n     *\n     * @param {(LocalDateTime \\ number)} transition - the transition date-time with the offset before the transition, not null\n     * @param {ZoneOffset} offsetBefore - the offset before the transition, not null\n     * @param {ZoneOffset} offsetAfter - the offset at and after the transition, not null\n     * @private\n     */\n    constructor(transition, offsetBefore, offsetAfter) {\n        requireNonNull(transition, 'transition');\n        requireNonNull(offsetBefore, 'offsetBefore');\n        requireNonNull(offsetAfter, 'offsetAfter');\n        if (offsetBefore.equals(offsetAfter)) {\n            throw new IllegalArgumentException('Offsets must not be equal');\n        }\n        if (transition.nano() !== 0) {\n            throw new IllegalArgumentException('Nano-of-second must be zero');\n        }\n        if(transition instanceof LocalDateTime) {\n            this._transition = transition;\n        } else {\n            this._transition = LocalDateTime.ofEpochSecond(transition, 0, offsetBefore);\n        }\n        this._offsetBefore = offsetBefore;\n        this._offsetAfter = offsetAfter;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the transition instant.\n     *\n     * This is the instant of the discontinuity, which is defined as the first\n     * instant that the 'after' offset applies.\n     *\n     * The methods {@link getInstant}, {@link getDateTimeBefore} and {@link getDateTimeAfter}\n     * all represent the same instant.\n     *\n     * @return {Instant} the transition instant, not null\n     */\n    instant() {\n        return this._transition.toInstant(this._offsetBefore);\n    }\n\n    /**\n     * Gets the transition instant as an epoch second.\n     *\n     * @return {number} the transition epoch second\n     */\n    toEpochSecond() {\n        return this._transition.toEpochSecond(this._offsetBefore);\n    }\n\n    //-------------------------------------------------------------------------\n    /**\n     * Gets the local transition date-time, as would be expressed with the 'before' offset.\n     *\n     * This is the date-time where the discontinuity begins expressed with the 'before' offset.\n     * At this instant, the 'after' offset is actually used, therefore the combination of this\n     * date-time and the 'before' offset will never occur.\n     *\n     * The combination of the 'before' date-time and offset represents the same instant\n     * as the 'after' date-time and offset.\n     *\n     * @return {LocalDateTime} the transition date-time expressed with the before offset, not null\n     */\n    dateTimeBefore(){\n        return this._transition;\n    }\n\n    /**\n     * Gets the local transition date-time, as would be expressed with the 'after' offset.\n     *\n     * This is the first date-time after the discontinuity, when the new offset applies.\n     *\n     * The combination of the 'before' date-time and offset represents the same instant\n     * as the 'after' date-time and offset.\n     *\n     * @return {LocalDateTime} the transition date-time expressed with the after offset, not null\n     */\n    dateTimeAfter() {\n        return this._transition.plusSeconds(this.durationSeconds());\n    }\n\n    /**\n     * Gets the offset before the transition.\n     *\n     * This is the offset in use before the instant of the transition.\n     *\n     * @return {ZoneOffset} the offset before the transition, not null\n     */\n    offsetBefore() {\n        return this._offsetBefore;\n    }\n\n    /**\n     * Gets the offset after the transition.\n     *\n     * This is the offset in use on and after the instant of the transition.\n     *\n     * @return {ZoneOffset} the offset after the transition, not null\n     */\n    offsetAfter() {\n        return this._offsetAfter;\n    }\n\n    /**\n     * Gets the duration of the transition.\n     *\n     * In most cases, the transition duration is one hour, however this is not always the case.\n     * The duration will be positive for a gap and negative for an overlap.\n     * Time-zones are second-based, so the nanosecond part of the duration will be zero.\n     *\n     * @return {Duration} the duration of the transition, positive for gaps, negative for overlaps\n     */\n    duration() {\n        return Duration.ofSeconds(this.durationSeconds());\n    }\n\n    /**\n     * Gets the duration of the transition in seconds.\n     *\n     * @return {number} the duration in seconds\n     */\n    durationSeconds() {\n        return this._offsetAfter.totalSeconds() - this._offsetBefore.totalSeconds();\n    }\n\n    /**\n     * Does this transition represent a gap in the local time-line.\n     *\n     * Gaps occur where there are local date-times that simply do not not exist.\n     * An example would be when the offset changes from `+01:00` to `+02:00`.\n     * This might be described as 'the clocks will move forward one hour tonight at 1am'.\n     *\n     * @return {boolean} true if this transition is a gap, false if it is an overlap\n     */\n    isGap() {\n        return this._offsetAfter.totalSeconds() > this._offsetBefore.totalSeconds();\n    }\n\n    /**\n     * Does this transition represent a gap in the local time-line.\n     *\n     * Overlaps occur where there are local date-times that exist twice.\n     * An example would be when the offset changes from `+02:00` to `+01:00`.\n     * This might be described as 'the clocks will move back one hour tonight at 2am'.\n     *\n     * @return {boolean} true if this transition is an overlap, false if it is a gap\n     */\n    isOverlap() {\n        return this._offsetAfter.totalSeconds() < this._offsetBefore.totalSeconds();\n    }\n\n    /**\n     * Checks if the specified offset is valid during this transition.\n     *\n     * This checks to see if the given offset will be valid at some point in the transition.\n     * A gap will always return false.\n     * An overlap will return true if the offset is either the before or after offset.\n     *\n     * @param {ZoneOffset} offset - the offset to check, null returns false\n     * @return {boolean} true if the offset is valid during the transition\n     */\n    isValidOffset(offset) {\n        return this.isGap() ? false : (this._offsetBefore.equals(offset) || this._offsetAfter.equals(offset));\n    }\n\n    /**\n     * Gets the valid offsets during this transition.\n     *\n     * A gap will return an empty list, while an overlap will return both offsets.\n     *\n     * @return {ZoneOffset[]} the list of valid offsets\n     */\n    validOffsets() {\n        if (this.isGap()){\n            return [];\n        } else {\n            return [this._offsetBefore, this._offsetAfter];\n        }\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Compares this transition to another based on the transition instant.\n     *\n     * This compares the instants of each transition.\n     * The offsets are ignored, making this order inconsistent with equals.\n     *\n     * @param {ZoneOffsetTransition} transition - the transition to compare to, not null\n     * @return {number} the comparator value, negative if less, positive if greater\n     */\n    compareTo(transition) {\n        return this.instant().compareTo(transition.instant());\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Checks if this object equals another.\n     *\n     * The entire state of the object is compared.\n     *\n     * @param {*} other - the other object to compare to, null returns false\n     * @return true if equal\n     */\n    equals(other) {\n        if (other === this) {\n            return true;\n        }\n        if (other instanceof ZoneOffsetTransition) {\n            const d = other;\n            return this._transition.equals(d._transition) &&\n                this._offsetBefore.equals(d.offsetBefore()) && this._offsetAfter.equals(d.offsetAfter());\n        }\n        return false;\n    }\n\n    /**\n     * Returns a suitable hash code.\n     *\n     * @return {number} the hash code\n     */\n    hashCode() {\n        return this._transition.hashCode() ^ this._offsetBefore.hashCode() ^ (this._offsetAfter.hashCode()>>>16);\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Returns a string describing this object.\n     *\n     * @return {string} a string for debugging, not null\n     */\n    toString() {\n        return `Transition[${this.isGap() ? 'Gap' : 'Overlap' \n        } at ${this._transition.toString()}${this._offsetBefore.toString() \n        } to ${this._offsetAfter}]`;\n    }\n\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { ZoneRules } from './ZoneRules';\nimport { ZoneOffset } from '../ZoneOffset';\nimport { DateTimeException } from '../errors';\n\nexport class SystemDefaultZoneRules extends ZoneRules {\n\n    isFixedOffset(){\n        return false;\n    }\n\n    /**\n     *\n     * @param {Instant} instant\n     * @returns {ZoneOffset}\n     */\n    offsetOfInstant(instant){\n        const offsetInMinutes = new Date(instant.toEpochMilli()).getTimezoneOffset();\n        return ZoneOffset.ofTotalMinutes(offsetInMinutes * -1);\n    }\n\n    /**\n     *\n     * @param {number} epochMilli\n     * @returns {ZoneOffset}\n     */\n    offsetOfEpochMilli(epochMilli){\n        const offsetInMinutes = new Date(epochMilli).getTimezoneOffset();\n        return ZoneOffset.ofTotalMinutes(offsetInMinutes * -1);\n    }\n\n    /**\n     * This implementation is NOT returning the best value in a gap or overlap situation\n     * as specified at {@link ZoneRules.offsetOfLocalDateTime}.\n     *\n     * The calculated offset depends Date.prototype.getTimezoneOffset and its not specified\n     * at the ECMA-262 specification how to handle daylight savings gaps/ overlaps.\n     *\n     * The Chrome Browser version 49 is returning the next transition offset in a gap/overlap situation,\n     * other browsers/ engines might do it in the same way.\n     *\n     * @param {LocalDateTime} localDateTime\n     * @returns {ZoneOffset}\n     */\n    offsetOfLocalDateTime(localDateTime){\n        const epochMilli = localDateTime.toEpochSecond(ZoneOffset.UTC) * 1000;\n        const offsetInMinutesBeforePossibleTransition = new Date(epochMilli).getTimezoneOffset();\n        const epochMilliSystemZone = epochMilli + offsetInMinutesBeforePossibleTransition * 60000;\n        const offsetInMinutesAfterPossibleTransition = new Date(epochMilliSystemZone).getTimezoneOffset();\n        return ZoneOffset.ofTotalMinutes(offsetInMinutesAfterPossibleTransition * -1);\n    }\n\n    /**\n     *\n     * @param localDateTime\n     * @return {ZoneOffset[]}\n     */\n    validOffsets(localDateTime){\n        return [this.offsetOfLocalDateTime(localDateTime)];\n    }\n\n    /**\n     * @return null, not supported\n     */\n    transition(){\n        return null;\n    }\n\n    /**\n     *\n     * @param instant\n     * @return {ZoneOffset}\n     */\n    standardOffset(instant){\n        return this.offsetOfInstant(instant);\n    }\n\n    /**\n     * @throws DateTimeException not supported\n     */\n    daylightSavings(){\n        this._throwNotSupported();\n    }\n\n    /**\n     * @throws DateTimeException not supported\n     */\n    isDaylightSavings(){\n        this._throwNotSupported();\n    }\n\n    /**\n     *\n     * @param {LocalDateTime} dateTime\n     * @param {ZoneOffset} offset\n     * @return {boolean}\n     */\n    isValidOffset(dateTime, offset) {\n        return this.offsetOfLocalDateTime(dateTime).equals(offset);\n    }\n\n    /**\n     * @throws DateTimeException not supported\n     */\n    nextTransition(){\n        this._throwNotSupported();\n    }\n\n    /**\n     * @throws DateTimeException not supported\n     */\n    previousTransition(){\n        this._throwNotSupported();\n    }\n\n    /**\n     * @throws DateTimeException not supported\n     */\n    transitions(){\n        this._throwNotSupported();\n    }\n\n    /**\n     * @throws DateTimeException not supported\n     */\n    transitionRules(){\n        this._throwNotSupported();\n    }\n\n    /**\n     * @throws DateTimeException not supported\n     */\n    _throwNotSupported(){\n        throw new DateTimeException('not supported operation');\n    }\n    //-----------------------------------------------------------------------\n    /**\n     *\n     * @param {*} other\n     * @returns {boolean}\n     */\n    equals(other) {\n        if (this === other || other instanceof SystemDefaultZoneRules) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return 'SYSTEM';\n    }\n\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { SystemDefaultZoneRules } from './SystemDefaultZoneRules';\nimport { ZoneId } from '../ZoneId';\n\nexport class SystemDefaultZoneId extends ZoneId {\n\n    constructor(){\n        super();\n        this._rules = new SystemDefaultZoneRules();\n    }\n\n    rules(){\n        return this._rules;\n    }\n\n    equals(other){\n        if(this === other){\n            return true;\n        }\n        return false;\n    }\n\n    id(){\n        return 'SYSTEM';\n    }\n\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from './assert';\nimport { DateTimeException, IllegalArgumentException } from './errors';\nimport { StringUtil } from './StringUtil';\n\nimport { ZoneOffset } from './ZoneOffset';\nimport { ZoneRegion } from './ZoneRegion';\nimport { ZoneId } from './ZoneId';\n\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { SystemDefaultZoneId } from './zone/SystemDefaultZoneId';\nimport { ZoneRulesProvider } from './zone/ZoneRulesProvider';\n\n/**\n * @see {@link ZoneId}\n *\n * Helper class to avoid dependency cycles.\n * Static methods of the class ZoneIdFactory are added automatically to class ZoneId.\n * @private\n */\nexport class ZoneIdFactory {\n\n    /**\n     * Gets the system default time-zone.\n     *\n     *\n     * @return {ZoneId} the zone ID, not null\n     */\n    static systemDefault() {\n        return SYSTEM_DEFAULT_ZONE_ID_INSTANCE;\n    }\n\n    /**\n     * Gets the set of available zone IDs.\n     *\n     * This set includes the string form of all available region-based IDs.\n     * Offset-based zone IDs are not included in the returned set.\n     * The ID can be passed to {@link of} to create a {@link ZoneId}.\n     *\n     * The set of zone IDs can increase over time, although in a typical application\n     * the set of IDs is fixed. Each call to this method is thread-safe.\n     *\n     * @return {string[]} a modifiable copy of the set of zone IDs, not null\n     */\n    static getAvailableZoneIds() {\n        return ZoneRulesProvider.getAvailableZoneIds();\n    }\n\n    /**\n     * Obtains an instance of {@link ZoneId} from an ID ensuring that the\n     * ID is valid and available for use.\n     *\n     * This method parses the ID producing a {@link ZoneId} or {@link ZoneOffset}.\n     * A {@link ZoneOffset} is returned if the ID is 'Z', or starts with '+' or '-'.\n     * The result will always be a valid ID for which {@link ZoneRules} can be obtained.\n     *\n     * Parsing matches the zone ID step by step as follows.\n     *\n     * * If the zone ID equals 'Z', the result is {@link ZoneOffset.UTC}.\n     * * If the zone ID consists of a single letter, the zone ID is invalid\n     *   and {@link DateTimeException} is thrown.\n     * * If the zone ID starts with '+' or '-', the ID is parsed as a\n     *   {@link ZoneOffset} using {@link ZoneOffset#of}.\n     * * If the zone ID equals 'GMT', 'UTC' or 'UT' then the result is a {@link ZoneId}\n     *   with the same ID and rules equivalent to {@link ZoneOffset.UTC}.\n     * * If the zone ID starts with 'UTC+', 'UTC-', 'GMT+', 'GMT-', 'UT+' or 'UT-'\n     *   then the ID is a prefixed offset-based ID. The ID is split in two, with\n     *   a two or three letter prefix and a suffix starting with the sign.\n     *   The suffix is parsed as a {@link ZoneOffset}.\n     *   The result will be a {@link ZoneId} with the specified UTC/GMT/UT prefix\n     *   and the normalized offset ID as per {@link ZoneOffset#getId}.\n     *   The rules of the returned {@link ZoneId} will be equivalent to the\n     *   parsed {@link ZoneOffset}.\n     * * All other IDs are parsed as region-based zone IDs. Region IDs must\n     *   match the regular expression `[A-Za-z][A-Za-z0-9~/._+-]+`,\n     *   otherwise a {@link DateTimeException} is thrown. If the zone ID is not\n     *   in the configured set of IDs, {@link ZoneRulesException} is thrown.\n     *   The detailed format of the region ID depends on the group supplying the data.\n     *   The default set of data is supplied by the IANA Time Zone Database (TZDB).\n     *   This has region IDs of the form '{area}/{city}', such as 'Europe/Paris' or 'America/New_York'.\n     *   This is compatible with most IDs from {@link java.util.TimeZone}.\n     *\n     * @param {string} zoneId  the time-zone ID, not null\n     * @return {ZoneId} the zone ID, not null\n     * @throws DateTimeException if the zone ID has an invalid format\n     * @throws ZoneRulesException if the zone ID is a region ID that cannot be found\n     */\n    static of(zoneId) {\n        requireNonNull(zoneId, 'zoneId');\n        if (zoneId === 'Z') {\n            return ZoneOffset.UTC;\n        }\n        if (zoneId.length === 1) {\n            throw new DateTimeException(`Invalid zone: ${zoneId}`);\n        }\n        if (StringUtil.startsWith(zoneId, '+') || StringUtil.startsWith(zoneId, '-')) {\n            return ZoneOffset.of(zoneId);\n        }\n        if (zoneId === 'UTC' || zoneId === 'GMT' || zoneId === 'GMT0' || zoneId === 'UT') {\n            return new ZoneRegion(zoneId, ZoneOffset.UTC.rules());\n        }\n        if (StringUtil.startsWith(zoneId, 'UTC+') || StringUtil.startsWith(zoneId, 'GMT+') ||\n                StringUtil.startsWith(zoneId, 'UTC-') || StringUtil.startsWith(zoneId, 'GMT-')) {\n            const offset = ZoneOffset.of(zoneId.substring(3));\n            if (offset.totalSeconds() === 0) {\n                return new ZoneRegion(zoneId.substring(0, 3), offset.rules());\n            }\n            return new ZoneRegion(zoneId.substring(0, 3) + offset.id(), offset.rules());\n        }\n        if (StringUtil.startsWith(zoneId, 'UT+') || StringUtil.startsWith(zoneId, 'UT-')) {\n            const offset = ZoneOffset.of(zoneId.substring(2));\n            if (offset.totalSeconds() === 0) {\n                return new ZoneRegion('UT', offset.rules());\n            }\n            return new ZoneRegion(`UT${offset.id()}`, offset.rules());\n        }\n        // javascript special case\n        if(zoneId === 'SYSTEM'){\n            return ZoneId.systemDefault();\n        }\n        return ZoneRegion.ofId(zoneId);\n    }\n\n    /**\n     * Obtains an instance of {@link ZoneId} wrapping an offset.\n     *\n     * If the prefix is 'GMT', 'UTC', or 'UT' a {@link ZoneId}\n     * with the prefix and the non-zero offset is returned.\n     * If the prefix is empty `''` the {@link ZoneOffset} is returned.\n     *\n     * @param {string} prefix  the time-zone ID, not null\n     * @param {ZoneOffset} offset  the offset, not null\n     * @return {ZoneId} the zone ID, not null\n     * @throws IllegalArgumentException if the prefix is not one of\n     *     'GMT', 'UTC', or 'UT', or ''\n     */\n    static ofOffset(prefix, offset) {\n        requireNonNull(prefix, 'prefix');\n        requireNonNull(offset, 'offset');\n        if (prefix.length === 0) {\n            return offset;\n        }\n        if (prefix === 'GMT' || prefix === 'UTC' || prefix === 'UT') {\n            if (offset.totalSeconds() === 0) {\n                return new ZoneRegion(prefix, offset.rules());\n            }\n            return new ZoneRegion(prefix + offset.id(), offset.rules());\n        }\n        throw new IllegalArgumentException(`Invalid prefix, must be GMT, UTC or UT: ${prefix}`);\n    }\n\n\n    /**\n     * Obtains an instance of {@link ZoneId} from a temporal object.\n     *\n     * A {@link TemporalAccessor} represents some form of date and time information.\n     * This factory converts the arbitrary temporal object to an instance of {@link ZoneId}.\n     *\n     * The conversion will try to obtain the zone in a way that favours region-based\n     * zones over offset-based zones using {@link TemporalQueries#zone}.\n     *\n     * This method matches the signature of the functional interface {@link TemporalQuery}\n     * allowing it to be used in queries via method reference, {@link ZoneId::from}.\n     *\n     * @param {!TemporalAccessor} temporal - the temporal object to convert, not null\n     * @return {ZoneId} the zone ID, not null\n     * @throws DateTimeException if unable to convert to a {@link ZoneId}\n     */\n    static from(temporal) {\n        requireNonNull(temporal, 'temporal');\n        const obj = temporal.query(TemporalQueries.zone());\n        if (obj == null) {\n            throw new DateTimeException(`Unable to obtain ZoneId from TemporalAccessor: ${ \n                temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`);\n        }\n        return obj;\n    }\n}\n\nlet SYSTEM_DEFAULT_ZONE_ID_INSTANCE = null;\n\nexport function _init(){\n    SYSTEM_DEFAULT_ZONE_ID_INSTANCE = new SystemDefaultZoneId();\n\n    // a bit magic to stay a bit more to the threeten bp impl.\n    ZoneId.systemDefault = ZoneIdFactory.systemDefault;\n    ZoneId.getAvailableZoneIds = ZoneIdFactory.getAvailableZoneIds;\n    ZoneId.of = ZoneIdFactory.of;\n    ZoneId.ofOffset = ZoneIdFactory.ofOffset;\n    ZoneId.from = ZoneIdFactory.from;\n    ZoneOffset.from = ZoneIdFactory.from;\n\n    // short cut\n    ZoneId.SYSTEM = SYSTEM_DEFAULT_ZONE_ID_INSTANCE;\n    ZoneId.UTC = ZoneOffset.ofTotalSeconds(0);\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { _init as ZoneOffsetInit } from './ZoneOffset';\nimport { _init as DayOfWeekInit } from './DayOfWeek';\nimport { _init as DurationInit } from './Duration';\nimport { _init as InstantInit } from './Instant';\nimport { _init as LocalDateInit } from './LocalDate';\nimport { _init as LocalTimeInit } from './LocalTime';\nimport { _init as LocalDateTimeInit } from './LocalDateTime';\nimport { _init as MonthInit } from './Month';\nimport { _init as MonthDayInit } from './MonthDay';\nimport { _init as OffsetDateTimeInit } from './OffsetDateTime';\nimport { _init as OffsetTimeInit } from './OffsetTime';\nimport { _init as PeriodInit } from './Period';\nimport { _init as YearInit } from './Year';\nimport { _init as YearConstantsInit } from './YearConstants';\nimport { _init as YearMonthInit } from './YearMonth';\nimport { _init as ZonedDateTimeInit } from './ZonedDateTime';\nimport { _init as IsoChronologyInit } from './chrono/IsoChronology';\nimport { _init as DateTimeFormatterInit } from './format/DateTimeFormatter';\nimport { _init as ChronoFieldInit } from './temporal/ChronoField';\nimport { _init as ChronoUnitInit } from './temporal/ChronoUnit';\nimport { _init as IsoFieldsInit } from './temporal/IsoFields';\nimport { _init as DateTimeFormatterBuilderInit } from './format/DateTimeFormatterBuilder';\n\nimport { _init as TemporalQueriesInit } from './temporal/TemporalQueriesFactory';\nimport { _init as ZoneIdInit } from './ZoneIdFactory';\n\nlet isInit = false;\n\nfunction init() {\n\n    if (isInit) {\n        return;\n    }\n\n    isInit = true;\n\n    YearConstantsInit();\n    DurationInit();\n    ChronoUnitInit();\n    ChronoFieldInit();\n    LocalTimeInit();\n    IsoFieldsInit();\n    TemporalQueriesInit();\n    DayOfWeekInit();\n    InstantInit();\n    LocalDateInit();\n    LocalDateTimeInit();\n    YearInit();\n    MonthInit();\n    YearMonthInit();\n    MonthDayInit();\n    PeriodInit();\n    ZoneOffsetInit();\n    ZonedDateTimeInit();\n    ZoneIdInit();\n    IsoChronologyInit();\n    DateTimeFormatterInit();\n    DateTimeFormatterBuilderInit();\n    OffsetDateTimeInit();\n    OffsetTimeInit();\n}\n\ninit();\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { ChronoField } from './ChronoField';\nimport { createTemporalQuery } from './TemporalQuery';\nimport { TemporalQueries } from './TemporalQueries';\n\nimport { LocalDate } from '../LocalDate';\nimport { LocalTime } from '../LocalTime';\nimport { ZoneOffset } from '../ZoneOffset';\n\n\nexport function _init() {\n    //-----------------------------------------------------------------------\n    /**\n     * A strict query for the {@link ZoneId}.\n     */\n    TemporalQueries.ZONE_ID = createTemporalQuery('ZONE_ID', (temporal) => {\n        return temporal.query(TemporalQueries.ZONE_ID);\n    });\n\n    /**\n     * A query for the {@link Chronology}.\n     */\n    TemporalQueries.CHRONO = createTemporalQuery('CHRONO', (temporal) => {\n        return temporal.query(TemporalQueries.CHRONO);\n    });\n\n    /**\n     * A query for the smallest supported unit.\n     */\n    TemporalQueries.PRECISION = createTemporalQuery('PRECISION', (temporal) => {\n        return temporal.query(TemporalQueries.PRECISION);\n    });\n\n    //-----------------------------------------------------------------------\n    /**\n     * A query for {@link ZoneOffset} returning null if not found.\n     */\n    TemporalQueries.OFFSET = createTemporalQuery('OFFSET', (temporal) => {\n        if (temporal.isSupported(ChronoField.OFFSET_SECONDS)) {\n            return ZoneOffset.ofTotalSeconds(temporal.get(ChronoField.OFFSET_SECONDS));\n        }\n        return null;\n    });\n\n    /**\n     * A lenient query for the {@link ZoneId}, falling back to the {@link ZoneOffset}.\n     */\n    TemporalQueries.ZONE = createTemporalQuery('ZONE', (temporal) => {\n        const zone = temporal.query(TemporalQueries.ZONE_ID);\n        return (zone != null ? zone : temporal.query(TemporalQueries.OFFSET));\n    });\n\n    /**\n     * A query for {@link LocalDate} returning null if not found.\n     */\n    TemporalQueries.LOCAL_DATE = createTemporalQuery('LOCAL_DATE', (temporal) => {\n        if (temporal.isSupported(ChronoField.EPOCH_DAY)) {\n            return LocalDate.ofEpochDay(temporal.getLong(ChronoField.EPOCH_DAY));\n        }\n        return null;\n    });\n\n    /**\n     * A query for {@link LocalTime} returning null if not found.\n     */\n    TemporalQueries.LOCAL_TIME = createTemporalQuery('LOCAL_TIME', (temporal) => {\n        if (temporal.isSupported(ChronoField.NANO_OF_DAY)) {\n            return LocalTime.ofNanoOfDay(temporal.getLong(ChronoField.NANO_OF_DAY));\n        }\n        return null;\n    });\n}\n","/*\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { IllegalArgumentException } from './errors';\n\nimport { LocalDate } from './LocalDate';\nimport { LocalDateTime } from './LocalDateTime';\nimport { ZonedDateTime } from './ZonedDateTime';\nimport { ZoneId } from './ZoneId';\nimport { Instant } from './Instant';\n\nclass ToNativeJsConverter {\n    /**\n     * @param {!(LocalDate|LocalDateTime|ZonedDateTime|Instant)} temporal - a joda temporal instance\n     * @param {ZoneId} [zone] - the zone of the temporal,\n     *  the default value for LocalDate and LocalDateTime is ZoneId.systemDefault().\n     */\n    constructor(temporal, zone){\n        let zonedDateTime;\n\n        if(temporal instanceof Instant) {\n            this.instant = temporal;\n            return;\n        } else if(temporal instanceof LocalDate) {\n            zone = zone == null ?  ZoneId.systemDefault() : zone;\n            zonedDateTime = temporal.atStartOfDay(zone);\n        } else if (temporal instanceof LocalDateTime) {\n            zone = zone == null ? ZoneId.systemDefault() : zone;\n            zonedDateTime = temporal.atZone(zone);\n        } else if (temporal instanceof ZonedDateTime) {\n            if (zone == null) {\n                zonedDateTime = temporal;\n            } else {\n                zonedDateTime = temporal.withZoneSameInstant(zone);\n            }\n        } else {\n            throw new IllegalArgumentException(`unsupported instance for convert operation:${temporal}`);\n        }\n\n        this.instant = zonedDateTime.toInstant();\n    }\n\n    /**\n     *\n     * @returns {Date}\n     */\n    toDate() {\n        return new Date(this.instant.toEpochMilli());\n    }\n\n    /**\n     *\n     * @returns {number}\n     */\n    toEpochMilli() {\n        return this.instant.toEpochMilli();\n    }\n}\n\n/**\n * converts a LocalDate, LocalDateTime or ZonedDateTime to a native Javascript Date.\n *\n * In a first step the temporal is converted to an Instant by adding implicit values.\n * \n * A LocalDate is implicit set to a LocalDateTime at start of day. \n * A LocalDateTime is implicit set to a ZonedDateTime with \n * the passed zone or if null, with the system default time zone. \n * A ZonedDateTime is converted to an Instant, if a zone is specified the zonedDateTime is adjusted to this \n * zone, keeping the same Instant.\n *\n * In a second step the instant is converted to a native Javascript Date\n *\n * default zone for LocalDate and LocalDateTime is ZoneId.systemDefault().\n *\n * @example\n * convert(localDate).toDate() // returns a javascript Date\n * convert(localDate).toEpochMilli()   // returns the epochMillis\n *\n * @param {!(LocalDate|LocalDateTime|ZonedDateTime)} temporal - a joda temporal instance\n * @param {ZoneId} [zone] - the zone of the temporal\n * @returns {ToNativeJsConverter}\n */\nexport function convert(temporal, zone){\n    return new ToNativeJsConverter(temporal, zone);\n}\n","/*\n * @copyright (c) 2015-present, Philipp Thürwächter, Pattrick Hüper & js-joda contributors\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { requireNonNull } from './assert';\nimport { IllegalArgumentException } from './errors';\nimport { Instant, ZoneId } from './js-joda';\n\n/**\n * Creates ZonedDateTime from a javascript Date or a moment instance.\n * @param {!(Date|moment)} date - a javascript Date or a moment instance\n * @param {ZoneId} [zone = ZoneId.systemDefault()] - the zone of the returned ZonedDateTime, defaults to ZoneId.systemDefault()\n * @returns {ZonedDateTime}\n */\nexport function nativeJs(date, zone = ZoneId.systemDefault()) {\n    requireNonNull(date, 'date');\n    requireNonNull(zone, 'zone');\n    if(date instanceof Date) {\n        return Instant.ofEpochMilli(date.getTime()).atZone(zone);\n    } else if(typeof date.toDate === 'function' &&  date.toDate() instanceof Date) {\n        return Instant.ofEpochMilli(date.toDate().getTime()).atZone(zone);\n    }\n    throw new IllegalArgumentException('date must be a javascript Date or a moment instance');\n}\n","/**\n * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {\n    ArithmeticException,\n    DateTimeException,\n    DateTimeParseException,\n    IllegalArgumentException,\n    IllegalStateException,\n    UnsupportedTemporalTypeException,\n    NullPointerException\n} from './errors';\n\nimport { Clock } from './Clock';\nimport { DayOfWeek } from './DayOfWeek';\nimport { Duration } from './Duration';\nimport { Instant } from './Instant';\nimport { LocalDate } from './LocalDate';\nimport { LocalTime } from './LocalTime';\nimport { LocalDateTime } from './LocalDateTime';\nimport { Month } from './Month';\nimport { MonthDay } from './MonthDay';\nimport { OffsetDateTime } from './OffsetDateTime';\nimport { OffsetTime } from './OffsetTime';\nimport { Period } from './Period';\nimport { Year } from './Year';\nimport { YearConstants } from './YearConstants';\nimport { YearMonth } from './YearMonth';\nimport { ZonedDateTime } from './ZonedDateTime';\nimport { ZoneOffset } from './ZoneOffset';\nimport { ZoneId } from './ZoneId';\nimport { ZoneRegion } from './ZoneRegion';\n\nimport { ZoneOffsetTransition } from './zone/ZoneOffsetTransition';\nimport { ZoneRules } from './zone/ZoneRules';\nimport { ZoneRulesProvider } from './zone/ZoneRulesProvider';\n\nimport { ChronoLocalDate } from './chrono/ChronoLocalDate';\nimport { ChronoLocalDateTime } from './chrono/ChronoLocalDateTime';\nimport { ChronoZonedDateTime } from './chrono/ChronoZonedDateTime';\nimport { IsoChronology } from './chrono/IsoChronology';\n\nimport { ChronoField } from './temporal/ChronoField';\nimport { ChronoUnit } from './temporal/ChronoUnit';\nimport { IsoFields } from './temporal/IsoFields';\nimport { Temporal } from './temporal/Temporal';\nimport { TemporalAccessor } from './temporal/TemporalAccessor';\nimport { TemporalAdjuster } from './temporal/TemporalAdjuster';\nimport { TemporalAdjusters } from './temporal/TemporalAdjusters';\nimport { TemporalAmount } from './temporal/TemporalAmount';\nimport { TemporalField } from './temporal/TemporalField';\nimport { TemporalQueries } from './temporal/TemporalQueries';\nimport { TemporalQuery } from './temporal/TemporalQuery';\nimport { TemporalUnit } from './temporal/TemporalUnit';\nimport { ValueRange } from './temporal/ValueRange';\n\nimport { DateTimeFormatter } from './format/DateTimeFormatter';\nimport { DateTimeFormatterBuilder } from './format/DateTimeFormatterBuilder';\nimport { DecimalStyle } from './format/DecimalStyle';\nimport { ParsePosition } from './format/ParsePosition';\nimport { ResolverStyle } from './format/ResolverStyle';\nimport { SignStyle } from './format/SignStyle';\nimport { TextStyle } from './format/TextStyle';\n\n// init static properties\nimport './_init';\n\n// private/internal exports, e.g. for use in plugins\nimport { MathUtil } from './MathUtil';\nimport { StringUtil } from './StringUtil';\nimport { DateTimeBuilder } from './format/DateTimeBuilder';\nimport { DateTimeParseContext } from './format/DateTimeParseContext';\nimport { DateTimePrintContext } from './format/DateTimePrintContext';\nimport { StringBuilder } from './format/StringBuilder';\nimport * as assert from './assert';\n\nimport { convert } from './convert';\nimport { nativeJs } from './nativeJs';\nimport { bindUse } from './use';\n\nconst _ = {\n    assert,\n    DateTimeBuilder,\n    DateTimeParseContext,\n    DateTimePrintContext,\n    MathUtil,\n    StringUtil,\n    StringBuilder,\n};\n\nconst jsJodaExports = {\n    _,\n    convert,\n    nativeJs,\n    ArithmeticException,\n    DateTimeException,\n    DateTimeParseException,\n    IllegalArgumentException,\n    IllegalStateException,\n    UnsupportedTemporalTypeException,\n    NullPointerException,\n    Clock,\n    DayOfWeek,\n    Duration,\n    Instant,\n    LocalDate,\n    LocalTime,\n    LocalDateTime,\n    OffsetTime,\n    OffsetDateTime,\n    Month,\n    MonthDay,\n    ParsePosition,\n    Period,\n    Year,\n    YearConstants,\n    YearMonth,\n    ZonedDateTime,\n    ZoneOffset,\n    ZoneId,\n    ZoneRegion,\n    ZoneOffsetTransition,\n    ZoneRules,\n    ZoneRulesProvider,\n    ChronoLocalDate,\n    ChronoLocalDateTime,\n    ChronoZonedDateTime,\n    IsoChronology,\n    ChronoField,\n    ChronoUnit,\n    IsoFields,\n    Temporal,\n    TemporalAccessor,\n    TemporalAdjuster,\n    TemporalAdjusters,\n    TemporalAmount,\n    TemporalField,\n    TemporalQueries,\n    TemporalQuery,\n    TemporalUnit,\n    ValueRange,\n    DateTimeFormatter,\n    DateTimeFormatterBuilder,\n    DecimalStyle,\n    ResolverStyle,\n    SignStyle,\n    TextStyle,\n};\n\n/**\n * @private\n *\n * @type { function(function(jsJoda: JsJoda) }\n */\nconst use = bindUse(jsJodaExports);\njsJodaExports.use = use;\n\nexport {\n    _,\n    use,\n    convert,\n    nativeJs,\n    ArithmeticException,\n    DateTimeException,\n    DateTimeParseException,\n    IllegalArgumentException,\n    IllegalStateException,\n    UnsupportedTemporalTypeException,\n    NullPointerException,\n    Clock,\n    DayOfWeek,\n    Duration,\n    Instant,\n    LocalDate,\n    LocalTime,\n    LocalDateTime,\n    Month,\n    MonthDay,\n    OffsetTime,\n    OffsetDateTime,\n    Period,\n    ParsePosition,\n    Year,\n    YearConstants,\n    YearMonth,\n    ZonedDateTime,\n    ZoneOffset,\n    ZoneId,\n    ZoneRegion,\n    ZoneOffsetTransition,\n    ZoneRules,\n    ZoneRulesProvider,\n    ChronoLocalDate,\n    ChronoLocalDateTime,\n    ChronoZonedDateTime,\n    IsoChronology,\n    ChronoField,\n    ChronoUnit,\n    IsoFields,\n    Temporal,\n    TemporalAccessor,\n    TemporalAdjuster,\n    TemporalAdjusters,\n    TemporalAmount,\n    TemporalField,\n    TemporalQueries,\n    TemporalQuery,\n    TemporalUnit,\n    ValueRange,\n    DateTimeFormatter,\n    DateTimeFormatterBuilder,\n    DecimalStyle,\n    ResolverStyle,\n    SignStyle,\n    TextStyle,\n};\n","/**\n * @private\n *\n * @param jsJoda\n * @returns { function(jsJoda: JsJoda) }\n */\nexport function bindUse(jsJoda) {\n    const used = [];\n\n    /**\n     * use\n     *\n     * Provides a way to extend the internals of js-joda\n     *\n     * @param {function} fn - function to extend js-joda public api\n     * @returns {this} for chaining\n     */\n    return function use(fn) {\n        if (!~used.indexOf(fn)) {\n            fn(jsJoda);\n            used.push(fn);\n        }\n        return jsJoda;\n    };\n}\n","/*\n * @copyright (c) 2016-present, Philipp Thürwächter, Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {\n    LocalDateTime, Instant, ZoneOffset, ZoneOffsetTransition, ZoneRules\n} from '@js-joda/core';\n\nexport class MomentZoneRules extends ZoneRules{\n    constructor(tzdbInfo){\n        super();\n        this._tzdbInfo = tzdbInfo;\n        this._ldtUntils = new LDTUntils(this._tzdbInfo.untils, this._tzdbInfo.offsets);\n    }\n    /**\n     * Checks of the zone rules are fixed, such that the offset never varies.\n     *\n     * @return {boolean} true if the time-zone is fixed and the offset never changes\n     */\n    isFixedOffset(){\n        return this._tzdbInfo.offsets.length === 1;\n    }\n\n    //-----------------------------------------------------------------------\n\n    /**\n     * Gets the offset applicable at the specified instant in these rules.\n     * <p>\n     * The mapping from an instant to an offset is simple, there is only\n     * one valid offset for each instant.\n     * This method returns that offset.\n     *\n     * @param {Instant} instant - the instant to find the offset for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffset} the offset, not null\n     */\n    offsetOfInstant(instant){\n        const epochMilli = instant.toEpochMilli();\n        return this.offsetOfEpochMilli(epochMilli);\n    }\n\n    /**\n     * Gets the offset applicable at the specified epochMilli in these rules.\n     *\n     * The method is for javascript performance optimisation.\n     *\n     * @param {number} epochMilli - the epoch millisecond to find the offset for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffset} the offset, not null\n     */\n    offsetOfEpochMilli(epochMilli){\n        const index  = binarySearch(this._tzdbInfo.untils, epochMilli);\n        return ZoneOffset.ofTotalSeconds(this._offsetByIndexInSeconds(index));\n    }\n\n\n    /**\n     * Gets a suitable offset for the specified local date-time in these rules.\n     * <p>\n     * The mapping from a local date-time to an offset is not straightforward.\n     * There are three cases:\n     * <p><ul>\n     * <li>Normal, with one valid offset. For the vast majority of the year, the normal\n     *  case applies, where there is a single valid offset for the local date-time.</li>\n     * <li>Gap, with zero valid offsets. This is when clocks jump forward typically\n     *  due to the spring daylight savings change from \"winter\" to \"summer\".\n     *  In a gap there are local date-time values with no valid offset.</li>\n     * <li>Overlap, with two valid offsets. This is when clocks are set back typically\n     *  due to the autumn daylight savings change from \"summer\" to \"winter\".\n     *  In an overlap there are local date-time values with two valid offsets.</li>\n     * </ul><p>\n     * Thus, for any given local date-time there can be zero, one or two valid offsets.\n     * This method returns the single offset in the Normal case, and in the Gap or Overlap\n     * case it returns the offset before the transition.\n     * <p>\n     * Since, in the case of Gap and Overlap, the offset returned is a \"best\" value, rather\n     * than the \"correct\" value, it should be treated with care. Applications that care\n     * about the correct offset should use a combination of this method,\n     * {@link #getValidOffsets(LocalDateTime)} and {@link #getTransition(LocalDateTime)}.\n     *\n     * @param {LocalDateTime} localDateTime - the local date-time to query, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffset} the best available offset for the local date-time, not null\n     */\n    offsetOfLocalDateTime(localDateTime){\n        const info = this._offsetInfo(localDateTime);\n        if (info instanceof ZoneOffsetTransition) {\n            return info.offsetBefore();\n        }\n        return info;\n    }\n\n    _offsetInfo(localDateTime) {\n        const index  = ldtBinarySearch(this._ldtUntils, localDateTime);\n        const offsetIndex = index >> 1;\n\n        if (index % 2 === 1){\n            const ldtBefore = this._ldtUntils.get(Math.max(index-1, 0));\n            const ldtAfter = this._ldtUntils.get(Math.min(index, this._ldtUntils.size-1));\n            const offsetBefore = ZoneOffset.ofTotalSeconds(this._offsetByIndexInSeconds(offsetIndex));\n            const offsetAfter = ZoneOffset.ofTotalSeconds(this._offsetByIndexInSeconds(Math.min(offsetIndex+1, this._tzdbInfo.offsets.length-1)));\n            // console.log(offsetBefore.toString(), offsetAfter.toString());\n            if (offsetBefore.compareTo(offsetAfter) > 0) {\n                // gap\n                // console.log('gap', ldtBefore.toString(), localDateTime.toString(), ldtAfter.toString());\n                return ZoneOffsetTransition.of(ldtBefore, offsetBefore, offsetAfter);\n            } else {\n                // overlap\n                // console.log('overlap', ldtBefore.toString(), localDateTime.toString(), ldtAfter.toString());\n                return ZoneOffsetTransition.of(ldtAfter, offsetBefore, offsetAfter);\n            }\n        }\n        return ZoneOffset.ofTotalSeconds(this._offsetByIndexInSeconds(offsetIndex));\n    }\n\n    _offsetByIndexInSeconds(index){\n        return -offsetInSeconds(this._tzdbInfo.offsets[index]);\n    }\n\n    /**\n     * Gets the offset applicable at the specified local date-time in these rules.\n     * <p>\n     * The mapping from a local date-time to an offset is not straightforward.\n     * There are three cases:\n     * <p><ul>\n     * <li>Normal, with one valid offset. For the vast majority of the year, the normal\n     *  case applies, where there is a single valid offset for the local date-time.</li>\n     * <li>Gap, with zero valid offsets. This is when clocks jump forward typically\n     *  due to the spring daylight savings change from \"winter\" to \"summer\".\n     *  In a gap there are local date-time values with no valid offset.</li>\n     * <li>Overlap, with two valid offsets. This is when clocks are set back typically\n     *  due to the autumn daylight savings change from \"summer\" to \"winter\".\n     *  In an overlap there are local date-time values with two valid offsets.</li>\n     * </ul><p>\n     * Thus, for any given local date-time there can be zero, one or two valid offsets.\n     * This method returns that list of valid offsets, which is a list of size 0, 1 or 2.\n     * In the case where there are two offsets, the earlier offset is returned at index 0\n     * and the later offset at index 1.\n     * <p>\n     * There are various ways to handle the conversion from a {@code LocalDateTime}.\n     * One technique, using this method, would be:\n     * <pre>\n     *  List<ZoneOffset> validOffsets = rules.getOffset(localDT);\n     *  if (validOffsets.size() == 1) {\n     *    // Normal case: only one valid offset\n     *    zoneOffset = validOffsets.get(0);\n     *  } else {\n     *    // Gap or Overlap: determine what to do from transition (which will be non-null)\n     *    ZoneOffsetTransition trans = rules.getTransition(localDT);\n     *  }\n     * </pre>\n     * <p>\n     * In theory, it is possible for there to be more than two valid offsets.\n     * This would happen if clocks to be put back more than once in quick succession.\n     * This has never happened in the history of time-zones and thus has no special handling.\n     * However, if it were to happen, then the list would return more than 2 entries.\n     *\n     * @param {LocalDateTime} localDateTime - the local date-time to query for valid offsets, not null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffsetTransition | ZoneOffset[]} the list of valid offsets, may be immutable, not null\n     */\n    validOffsets(localDateTime){\n        const info = this._offsetInfo(localDateTime);\n        if (info instanceof ZoneOffsetTransition) {\n            return info.validOffsets();\n        }\n        return [info];\n    }\n\n    /**\n     * Gets the offset transition applicable at the specified local date-time in these rules.\n     * <p>\n     * The mapping from a local date-time to an offset is not straightforward.\n     * There are three cases:\n     * <p><ul>\n     * <li>Normal, with one valid offset. For the vast majority of the year, the normal\n     *  case applies, where there is a single valid offset for the local date-time.</li>\n     * <li>Gap, with zero valid offsets. This is when clocks jump forward typically\n     *  due to the spring daylight savings change from \"winter\" to \"summer\".\n     *  In a gap there are local date-time values with no valid offset.</li>\n     * <li>Overlap, with two valid offsets. This is when clocks are set back typically\n     *  due to the autumn daylight savings change from \"summer\" to \"winter\".\n     *  In an overlap there are local date-time values with two valid offsets.</li>\n     * </ul><p>\n     * A transition is used to model the cases of a Gap or Overlap.\n     * The Normal case will return null.\n     * <p>\n     * There are various ways to handle the conversion from a {@code LocalDateTime}.\n     * One technique, using this method, would be:\n     * <pre>\n     *  ZoneOffsetTransition trans = rules.getTransition(localDT);\n     *  if (trans != null) {\n     *    // Gap or Overlap: determine what to do from transition\n     *  } else {\n     *    // Normal case: only one valid offset\n     *    zoneOffset = rule.getOffset(localDT);\n     *  }\n     * </pre>\n     *\n     * @param {LocalDateTime} localDateTime  the local date-time to query for offset transition, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffsetTransition} the offset transition, null if the local date-time is not in transition\n     */\n    // eslint-disable-next-line no-unused-vars\n    transition(localDateTime){\n        const info = this._offsetInfo(localDateTime);\n        if (info instanceof ZoneOffsetTransition) {\n            return info;\n        }\n        return null;\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the standard offset for the specified instant in this zone.\n     * <p>\n     * This provides access to historic information on how the standard offset\n     * has changed over time.\n     * The standard offset is the offset before any daylight saving time is applied.\n     * This is typically the offset applicable during winter.\n     *\n     * @param {Instant} instant - the instant to find the offset information for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffset} the standard offset, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    standardOffset(instant){\n        notSupported('ZoneRules.standardOffset');\n    }\n\n    /**\n     * Gets the amount of daylight savings in use for the specified instant in this zone.\n     * <p>\n     * This provides access to historic information on how the amount of daylight\n     * savings has changed over time.\n     * This is the difference between the standard offset and the actual offset.\n     * Typically the amount is zero during winter and one hour during summer.\n     * Time-zones are second-based, so the nanosecond part of the duration will be zero.\n     *\n     * @param {Instant} instant - the instant to find the daylight savings for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {Duration} the difference between the standard and actual offset, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    daylightSavings(instant){\n        notSupported('ZoneRules.daylightSavings');\n    }\n\n    /**\n     * Checks if the specified instant is in daylight savings.\n     * <p>\n     * This checks if the standard and actual offsets are the same at the specified instant.\n     *\n     * @param {Instant} instant - the instant to find the offset information for, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {boolean} the standard offset, not null\n     */\n    // eslint-disable-next-line no-unused-vars\n    isDaylightSavings(instant) {\n        notSupported('ZoneRules.isDaylightSavings');\n    }\n\n    /**\n     * Checks if the offset date-time is valid for these rules.\n     * <p>\n     * To be valid, the local date-time must not be in a gap and the offset\n     * must match the valid offsets.\n     *\n     * @param {LocalDateTime} localDateTime - the date-time to check, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @param {ZoneOffset} offset - the offset to check, null returns false\n     * @return {boolean} true if the offset date-time is valid for these rules\n     */\n    isValidOffset(localDateTime, offset){\n        return this.validOffsets(localDateTime).some( o => o.equals(offset));\n    }\n\n    //-----------------------------------------------------------------------\n    /**\n     * Gets the next transition after the specified instant.\n     * <p>\n     * This returns details of the next transition after the specified instant.\n     * For example, if the instant represents a point where \"Summer\" daylight savings time\n     * applies, then the method will return the transition to the next \"Winter\" time.\n     *\n     * @param {Instant} instant - the instant to get the next transition after, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffsetTransition} the next transition after the specified instant, null if this is after the last transition\n     */\n    // eslint-disable-next-line no-unused-vars\n    nextTransition(instant){\n        notSupported('ZoneRules.nextTransition');\n    }\n\n    /**\n     * Gets the previous transition before the specified instant.\n     * <p>\n     * This returns details of the previous transition after the specified instant.\n     * For example, if the instant represents a point where \"summer\" daylight saving time\n     * applies, then the method will return the transition from the previous \"winter\" time.\n     *\n     * @param {Instant} instant - the instant to get the previous transition after, not null, but null\n     *  may be ignored if the rules have a single offset for all instants\n     * @return {ZoneOffsetTransition} the previous transition after the specified instant, null if this is before the first transition\n     */\n    // eslint-disable-next-line no-unused-vars\n    previousTransition(instant){\n        notSupported('ZoneRules.previousTransition');\n    }\n\n    /**\n     * Gets the complete list of fully defined transitions.\n     * <p>\n     * The complete set of transitions for this rules instance is defined by this method\n     * and {@link #getTransitionRules()}. This method returns those transitions that have\n     * been fully defined. These are typically historical, but may be in the future.\n     * <p>\n     * The list will be empty for fixed offset rules and for any time-zone where there has\n     * only ever been a single offset. The list will also be empty if the transition rules are unknown.\n     *\n     * @return {ZoneOffsetTransition[]} an immutable list of fully defined transitions, not null\n     */\n    transitions(){\n        notSupported('ZoneRules.transitions');\n    }\n\n    /**\n     * Gets the list of transition rules for years beyond those defined in the transition list.\n     * <p>\n     * The complete set of transitions for this rules instance is defined by this method\n     * and {@link #getTransitions()}. This method returns instances of {@link ZoneOffsetTransitionRule}\n     * that define an algorithm for when transitions will occur.\n     * <p>\n     * For any given {@code ZoneRules}, this list contains the transition rules for years\n     * beyond those years that have been fully defined. These rules typically refer to future\n     * daylight saving time rule changes.\n     * <p>\n     * If the zone defines daylight savings into the future, then the list will normally\n     * be of size two and hold information about entering and exiting daylight savings.\n     * If the zone does not have daylight savings, or information about future changes\n     * is uncertain, then the list will be empty.\n     * <p>\n     * The list will be empty for fixed offset rules and for any time-zone where there is no\n     * daylight saving time. The list will also be empty if the transition rules are unknown.\n     *\n     * @return {ZoneOffsetTransitionRule[]} an immutable list of transition rules, not null\n     */\n    transitionRules(){\n        notSupported('ZoneRules.transitionRules');\n    }\n\n    /**\n     *\n     * @param other\n     * @returns {boolean}\n     */\n    equals(other) {\n        if (this === other) {\n            return true;\n        }\n        if (other instanceof MomentZoneRules) {\n            return this._tzdbInfo === other._tzdbInfo;\n        }\n        return false;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this._tzdbInfo.name;\n    }\n}\n\nclass LDTUntils {\n    constructor(_tzdbUntils, tzdbOffsets) {\n        this._tzdbUntils = _tzdbUntils;\n        this._tzdbOffsets = tzdbOffsets;\n        this._ldtUntils = [];\n        this.size = this._tzdbUntils.length * 2;\n    }\n\n\n    _generateTupple(index) {\n        const epochMillis = this._tzdbUntils[index];\n        if (epochMillis === Infinity) {\n            return [LocalDateTime.MAX, LocalDateTime.MAX];\n        }\n        const instant = Instant.ofEpochMilli(epochMillis);\n\n        const offset1 = offsetInSeconds(this._tzdbOffsets[index]);\n        const zone1 = ZoneOffset.ofTotalSeconds(-offset1);\n        const ldt1 = LocalDateTime.ofInstant(instant, zone1);\n\n        const nextIndex = Math.min(index + 1, this._tzdbOffsets.length - 1);\n        const offset2 = offsetInSeconds(this._tzdbOffsets[nextIndex]);\n        const zone2 = ZoneOffset.ofTotalSeconds(-offset2);\n        const ldt2 = LocalDateTime.ofInstant(instant, zone2);\n\n        if(offset1 > offset2) {\n            return [ldt1, ldt2];\n        } else {\n            return [ldt2, ldt1];\n        }\n    }\n\n    _getTupple(index){\n        if (this._ldtUntils[index] == null) {\n            this._ldtUntils[index] = this._generateTupple(index);\n        }\n        return this._ldtUntils[index];\n    }\n\n    get(index) {\n        const ldtTupple = this._getTupple(index >> 1);\n        return ldtTupple[index % 2];\n    }\n}\n\n// modified bin-search, to always find existing indices for non-empty arrays\n// value in array at index is larger than input value (or last index of array)\nfunction ldtBinarySearch(array, value) {\n    let hi = array.size - 1, lo = -1, mid;\n    while (hi - lo > 1) {\n        if (!value.isBefore(array.get(mid = hi + lo >> 1))) {\n            lo = mid;\n        } else {\n            hi = mid;\n        }\n    }\n    return hi;\n}\n\nfunction offsetInSeconds(tzdbOffset){\n    return roundDown(+tzdbOffset*60);\n}\n\nfunction roundDown(r){\n    if (r < 0) {\n        return Math.ceil(r);\n    } else {\n        return Math.floor(r);\n    }\n}\n\n// modified bin-search, to always find existing indices for non-empty arrays\n// value in array at index is larger than input value (or last index of array)\nfunction binarySearch(array, value) {\n    let hi = array.length - 1, lo = -1, mid;\n    while (hi - lo > 1) {\n        if (array[mid = hi + lo >> 1] <= value) {\n            lo = mid;\n        } else {\n            hi = mid;\n        }\n    }\n    return hi;\n}\n\nfunction notSupported(msg){\n    throw new Error(`not supported: ${msg}`);\n}\n","/*\n * @copyright (c) 2016-present, Philipp Thürwächter, Pattrick Hüper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {\n    DateTimeException,\n    ZoneRulesProvider,\n} from '@js-joda/core';\n\nimport { MomentZoneRules } from './MomentZoneRules';\n\nimport { unpack } from './unpack';\n\nlet TZDB_DATA;\nlet TZDB_VERSION;\nconst AVAILABLE_ZONE_IDS = [];\n\nconst zones = {};\nconst links = {};\n\nexport class MomentZoneRulesProvider extends ZoneRulesProvider {\n    /**\n     * Gets the rules for the zone ID.\n     * <p>\n     * This returns the latest available rules for the zone ID.\n     * <p>\n     * This method relies on time-zone data provider files that are configured.\n     *\n     * @param {string} zoneId\n     * @return {ZoneRules}\n     */\n    static getRules(zoneId){\n        const tzdbZoneInfo = zones[links[zoneId]];\n        if(tzdbZoneInfo == null){\n            throw new DateTimeException(`Unknown time-zone ID: ${zoneId}`);\n        }\n        return new MomentZoneRules(tzdbZoneInfo);\n    }\n\n\n    /**\n     * Gets the set of available zone IDs.\n     * <p>\n     * These zone IDs are loaded and available for use by {@code ZoneId}.\n     *\n     * @return {string[]} a modifiable copy of the set of zone IDs, not null\n     */\n    static getAvailableZoneIds(){\n        return AVAILABLE_ZONE_IDS;\n    }\n\n    /**\n     *\n     * @return {string} the tzdb version.\n     */\n    static getVersion() {\n        return TZDB_VERSION;\n    }\n\n    /**\n     * Provides the packed tzdb data,\n     * the data has the same format as provided from moment-timezone.\n     *\n     * @return {object} the packed tzdb data.\n     */\n    static getTzdbData(){\n        return TZDB_DATA;\n    }\n\n    /**\n     * Sets the packed tzdb data.\n     * Accepts tzdb data in the same format as provided from moment-timezone.\n     *\n     * @param packedJson\n     */\n    static loadTzdbData(packedJson){\n        TZDB_DATA = packedJson;\n        TZDB_VERSION = packedJson.version;\n\n        for (const packedZoneInfo of packedJson.zones) {\n            const tzdbZoneInfo = unpack(packedZoneInfo);\n            AVAILABLE_ZONE_IDS.push(tzdbZoneInfo.name);\n            zones[tzdbZoneInfo.name] = tzdbZoneInfo;\n            links[tzdbZoneInfo.name] = tzdbZoneInfo.name;\n        }\n\n        for (const packedLink of packedJson.links) {\n            const link = packedLink.split('|');\n            AVAILABLE_ZONE_IDS.push(link[1]);\n            links[link[1]] = link[0];\n        }\n    }\n}\n","/* eslint-disable no-var */\n\n//! moment-timezone.js\n//! version : 0.5.2\n//! author : Tim Wood\n//! license : MIT\n//! github.com/moment/moment-timezone\n\n/************************************\n Unpacking\n ************************************/\n\n/**\n * @private\n *\n * @param charCode\n * @returns {number}\n */\nfunction charCodeToInt(charCode) {\n    if (charCode > 96) {\n        return charCode - 87;\n    } else if (charCode > 64) {\n        return charCode - 29;\n    }\n    return charCode - 48;\n}\n\nfunction unpackBase60(string) {\n    var i = 0,\n        parts = string.split('.'),\n        whole = parts[0],\n        fractional = parts[1] || '',\n        multiplier = 1,\n        num,\n        out = 0,\n        sign = 1;\n\n    // handle negative numbers\n    if (string.charCodeAt(0) === 45) {\n        i = 1;\n        sign = -1;\n    }\n\n    // handle digits before the decimal\n    for (i; i < whole.length; i++) {\n        num = charCodeToInt(whole.charCodeAt(i));\n        out = 60 * out + num;\n    }\n\n    // handle digits after the decimal\n    for (i = 0; i < fractional.length; i++) {\n        multiplier = multiplier / 60;\n        num = charCodeToInt(fractional.charCodeAt(i));\n        out += num * multiplier;\n    }\n\n    return out * sign;\n}\n\nfunction arrayToInt (array) {\n    for (var i = 0; i < array.length; i++) {\n        array[i] = unpackBase60(array[i]);\n    }\n}\n\nfunction intToUntil (array, length) {\n    for (var i = 0; i < length; i++) {\n        array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds\n    }\n\n    array[length - 1] = Infinity;\n}\n\nfunction mapIndices (source, indices) {\n    var out = [], i;\n\n    for (i = 0; i < indices.length; i++) {\n        out[i] = source[indices[i]];\n    }\n\n    return out;\n}\n\n/**\n * @private\n *\n * @param string\n * @returns {{offsets: *[], abbrs: *[], name, untils: *, population: number}}\n */\nexport function unpack (string) {\n    var data = string.split('|'),\n        offsets = data[2].split(' '),\n        indices = data[3].split(''),\n        untils  = data[4].split(' ');\n\n    arrayToInt(offsets);\n    arrayToInt(indices);\n    arrayToInt(untils);\n\n    intToUntil(untils, indices.length);\n\n    return {\n        name       : data[0],\n        abbrs      : mapIndices(data[1].split(' '), indices),\n        offsets    : mapIndices(offsets, indices),\n        untils     : untils,\n        population : data[5] | 0\n    };\n}\n\n","/*\n * @copyright (c) 2016-present, Philipp Thürwächter, Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport latest from './tzdbData';\n\nimport { MomentZoneRulesProvider } from './MomentZoneRulesProvider';\nimport autoPlug from './auto-plug';\n\nMomentZoneRulesProvider.loadTzdbData(latest);\n\nautoPlug();\n","/*\n * @copyright (c) 2016-present, Philipp Thürwächter, Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { use } from '@js-joda/core';\n\nimport plug from './plug';\n\n/**\n * @private\n */\nexport default function autoPlug() {\n    use(plug);\n}\n\n","/*\n * @copyright (c) 2016-present, Philipp Thürwächter, Pattrick Hüper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport { MomentZoneRulesProvider } from './MomentZoneRulesProvider';\nimport extendSystemDefaultZoneId from './system-default-zone';\n\n/**\n * @private\n */\nexport default function (jsJoda) {\n    jsJoda.ZoneRulesProvider.getRules = MomentZoneRulesProvider.getRules;\n    jsJoda.ZoneRulesProvider.getAvailableZoneIds = MomentZoneRulesProvider.getAvailableZoneIds;\n    jsJoda.ZoneRulesProvider.getTzdbData = MomentZoneRulesProvider.getTzdbData;\n    jsJoda.ZoneRulesProvider.loadTzdbData = MomentZoneRulesProvider.loadTzdbData;\n\n    extendSystemDefaultZoneId(jsJoda.ZoneId);\n    return jsJoda;\n}\n","/**\n * @private\n *\n * @param ZoneId\n * @returns {null|*}\n */\nfunction getResolvedZoneId(ZoneId) {\n    try {\n        const resolvedTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n        return ZoneId.of(resolvedTimeZone);\n    } catch (err) {\n        // ignore\n    }\n    return null;\n}\n\n/**\n * @private\n *\n * @param ZoneId\n */\nexport default function extendSystemDefaultZoneId(ZoneId) {\n    const resolvedZoneId = getResolvedZoneId(ZoneId);\n\n    if (resolvedZoneId == null) {\n        return;\n    }\n\n    ZoneId.systemDefault = function () {\n        return resolvedZoneId;\n    };\n}\n","/*!\n * Chart.js v3.8.0\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function(...args) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}());\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : value / dimension;\nconst toDimension = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\n  }\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n  const idx = key.indexOf(dot, start);\n  return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n  if (key === emptyString) {\n    return obj;\n  }\n  let pos = 0;\n  let idx = indexOfDotOrLength(key, pos);\n  while (obj && idx > pos) {\n    obj = obj[key.slice(pos, idx)];\n    pos = idx + 1;\n    idx = indexOfDotOrLength(key, pos);\n  }\n  return obj;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < (-0.5 * PI)) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n  easeInOutBounce: t => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n  return false;\n}\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n}\nvar defaults = new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n});\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  let type, xOffset, yOffset, size, cornerRadius;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n  default:\n    ctx.arc(x, y, radius, 0, TAU);\n    ctx.closePath();\n    break;\n  case 'triangle':\n    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    ctx.closePath();\n    break;\n  case 'rectRounded':\n    cornerRadius = radius * 0.516;\n    size = radius - cornerRadius;\n    xOffset = Math.cos(rad + QUARTER_PI) * size;\n    yOffset = Math.sin(rad + QUARTER_PI) * size;\n    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n    ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n    ctx.closePath();\n    break;\n  case 'rect':\n    if (!rotation) {\n      size = Math.SQRT1_2 * radius;\n      ctx.rect(x - size, y - size, 2 * size, 2 * size);\n      break;\n    }\n    rad += QUARTER_PI;\n  case 'rectRot':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    ctx.closePath();\n    break;\n  case 'crossRot':\n    rad += QUARTER_PI;\n  case 'cross':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'star':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    rad += QUARTER_PI;\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'line':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    break;\n  case 'dash':\n    ctx.moveTo(x, y);\n    ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n    break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\nfunction addRoundedRectPath(ctx, rect) {\n  const {x, y, w, h, radius} = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n  case 'px':\n    return value;\n  case '%':\n    value /= 100;\n    break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = '';\n  }\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n  return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop];\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array(count);\n  let i, ilen, index, item;\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n      : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n      : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const {offsetX, offsetY} = source;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n  if ('native' in evt) {\n    return evt;\n  }\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect();\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\nconst supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n    : mode === 'after' ? t < 1 ? p1.y : p2.y\n    : t > 0 ? p2.y : p1.y\n  };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\nconst getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    },\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  let {start, end, loop} = segment;\n  let i, ilen;\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n  return result;\n}\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { toFont as $, _rlookupByKey as A, _isPointInArea as B, getAngleFromPoint as C, toPadding as D, each as E, getMaximumSize as F, _getParentNode as G, HALF_PI as H, readUsedSize as I, throttled as J, supportsEventListenerOptions as K, _isDomSupported as L, log10 as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, toDegrees as S, TAU as T, _measureText as U, _int16Range as V, _alignPixel as W, clipArea as X, renderText as Y, unclipArea as Z, _arrayUnique as _, resolve as a, QUARTER_PI as a$, _toLeftRightCenter as a0, _alignStartEnd as a1, overrides as a2, merge as a3, _capitalize as a4, descriptors as a5, isFunction as a6, _attachContext as a7, _createResolver as a8, _descriptors as a9, _textX as aA, restoreTextDirection as aB, noop as aC, distanceBetweenPoints as aD, _setMinAndMaxByKey as aE, niceNum as aF, almostWhole as aG, almostEquals as aH, _decimalPlaces as aI, _longestText as aJ, _filterBetween as aK, _lookup as aL, isPatternOrGradient as aM, getHoverColor as aN, clone$1 as aO, _merger as aP, _mergerIf as aQ, _deprecated as aR, toFontString as aS, splineCurve as aT, splineCurveMonotone as aU, getStyle as aV, fontString as aW, toLineHeight as aX, PITAU as aY, INFINITY as aZ, RAD_PER_DEG as a_, mergeIf as aa, uid as ab, debounce as ac, retinaScale as ad, clearCanvas as ae, setsEqual as af, _elementsEqual as ag, _isClickEvent as ah, _isBetween as ai, _readValueToProps as aj, _updateBezierControlPoints as ak, _computeSegments as al, _boundSegments as am, _steppedInterpolation as an, _bezierInterpolation as ao, _pointInLine as ap, _steppedLineTo as aq, _bezierCurveTo as ar, drawPoint as as, addRoundedRectPath as at, toTRBL as au, toTRBLCorners as av, _boundSegment as aw, _normalizeAngle as ax, getRtlAdapter as ay, overrideTextDirection as az, isArray as b, TWO_THIRDS_PI as b0, _angleDiff as b1, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n","/*!\n * Chart.js v3.8.0\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _isPointInArea, C as getAngleFromPoint, D as toPadding, E as each, F as getMaximumSize, G as _getParentNode, I as readUsedSize, J as throttled, K as supportsEventListenerOptions, L as _isDomSupported, M as log10, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as toDegrees, U as _measureText, V as _int16Range, W as _alignPixel, X as clipArea, Y as renderText, Z as unclipArea, $ as toFont, a0 as _toLeftRightCenter, a1 as _alignStartEnd, a2 as overrides, a3 as merge, a4 as _capitalize, a5 as descriptors, a6 as isFunction, a7 as _attachContext, a8 as _createResolver, a9 as _descriptors, aa as mergeIf, ab as uid, ac as debounce, ad as retinaScale, ae as clearCanvas, af as setsEqual, ag as _elementsEqual, ah as _isClickEvent, ai as _isBetween, aj as _readValueToProps, ak as _updateBezierControlPoints, al as _computeSegments, am as _boundSegments, an as _steppedInterpolation, ao as _bezierInterpolation, ap as _pointInLine, aq as _steppedLineTo, ar as _bezierCurveTo, as as drawPoint, at as addRoundedRectPath, au as toTRBL, av as toTRBLCorners, aw as _boundSegment, ax as _normalizeAngle, ay as getRtlAdapter, az as overrideTextDirection, aA as _textX, aB as restoreTextDirection, aC as noop, aD as distanceBetweenPoints, aE as _setMinAndMaxByKey, aF as niceNum, aG as almostWhole, aH as almostEquals, aI as _decimalPlaces, aJ as _longestText, aK as _filterBetween, aL as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    let remaining = 0;\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n    this._active = from !== to && (loop || (elapsed < duration));\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n    this._target[prop] = this._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n  delay: undefined,\n  duration: 1000,\n  easing: 'easeOutQuart',\n  fn: undefined,\n  from: undefined,\n  loop: undefined,\n  to: undefined,\n  type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  },\n});\ndefaults.describe('animations', {\n  _fallback: 'animation',\n});\ndefaults.set('transitions', {\n  active: {\n    animation: {\n      duration: 400\n    }\n  },\n  resize: {\n    animation: {\n      duration: 0\n    }\n  },\n  show: {\n    animations: {\n      colors: {\n        from: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        duration: 0\n      },\n    }\n  },\n  hide: {\n    animations: {\n      colors: {\n        to: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        easing: 'linear',\n        fn: v => v | 0\n      },\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n  if (value === null) {\n    return;\n  }\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n  }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.initialize();\n  }\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n  }\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        break;\n      }\n    }\n    if (sorted) {\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n  update(mode) {}\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    const context = () => this.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\n    }\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n  _getStacks(last, dataIndex) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const metasets = iScale.getMatchingVisibleMetas(this._type);\n    const stacked = iScale.options.stacked;\n    const ilen = metasets.length;\n    const stacks = [];\n    let i, item;\n    for (i = 0; i < ilen; ++i) {\n      item = metasets[i];\n      if (!item.controller.options.grouped) {\n        continue;\n      }\n      if (typeof dataIndex !== 'undefined') {\n        const val = item.controller.getParsed(dataIndex)[\n          item.controller._cachedMeta.vScale.axis\n        ];\n        if (isNullOrUndef(val) || isNaN(val)) {\n          continue;\n        }\n      }\n      if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n        stacks.push(item.stack);\n      }\n      if (item.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1;\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount);\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n      offset: true,\n      grid: {\n        offset: true\n      }\n    },\n    _value_: {\n      type: 'linear',\n      beginAtZero: true,\n    }\n  }\n};\n\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    let startAngle = this._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n      this.updateElement(arc, i, properties, mode);\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n    return total;\n  }\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n    if (!arcs) {\n      return 0;\n    }\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n  getMaxOffset(arcs) {\n    let max = 0;\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: false\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n    },\n  },\n  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== 'spacing',\n  _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\n\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n    this.updateElements(points, start, count, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false,\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n    },\n    _value_: {\n      type: 'linear',\n    },\n  }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        _lookupByKey(_parsed, iScale.axis, min).lo,\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n    return range;\n  }\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n    const defaultAngle = 360 / this.countVisibleElements();\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: true\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n    },\n  },\n  indexAxis: 'r',\n  startAngle: 0,\n};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n        }\n      }\n    }\n  },\n  scales: {\n    r: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      beginAtZero: true,\n      grid: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      startAngle: 0\n    }\n  }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n    line.points = points;\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, undefined, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  },\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear',\n    }\n  }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  evaluateInteractionItems,\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n      return elements;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {\n  }\n}\n\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\n    }\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\n    drawOnChartArea: true,\n    drawTicks: true,\n    tickLength: 8,\n    tickWidth: (_ctx, options) => options.lineWidth,\n    tickColor: (_ctx, options) => options.color,\n    offset: false,\n    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\n  ticks: {\n    minRotation: 0,\n    maxRotation: 50,\n    mirror: false,\n    textStrokeWidth: 0,\n    textStrokeColor: '',\n    padding: 3,\n    display: true,\n    autoSkip: true,\n    autoSkipPadding: 3,\n    labelOffset: 0,\n    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2,\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n  _fallback: false,\n  _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n  _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n  _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\n  }\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n  return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n  parse(raw, index) {\n    return raw;\n  }\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n        if (isHorizontal) {\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const {min, max} = this;\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n  getContext(index) {\n    const ticks = this.ticks || [];\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = grid.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n      if (isHorizontal) {\n        x = pixel;\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        }\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor,\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign: tickTextAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop,\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n    return align;\n  }\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n    return {textAlign, x};\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n  drawBorder() {\n    const {chart, ctx, options: {grid}} = this;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n    if (!title.display) {\n      return;\n    }\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n\nclass TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\n    }\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each('register', args);\n  }\n  remove(...args) {\n    this._each('unregister', args);\n  }\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        each(arg, item => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    return this.plugins;\n  }\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n}\nvar registry = new Registry();\n\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\n  }\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\nfunction allPlugins(config) {\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n    }\n  }\n  return plugins;\n}\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n  const result = [];\n  const context = chart.getContext();\n  for (let i = 0; i < plugins.length; i++) {\n    const plugin = plugins[i];\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, plugin, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const firstIDs = Object.create(null);\n  const scales = Object.create(null);\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n    const scopes = new Set();\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n  chartOptionScopes() {\n    const {options, type} = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nvar version = \"3.8.0\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\nclass Chart {\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n      );\n    }\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins('beforeInit');\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins('afterInit');\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins('resize', {size: newSize});\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass.prototype, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins('beforeElementsUpdate');\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins('afterUpdate', {mode});\n    this._layers.sort(compare2Level('z', '_idx'));\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n    this.render();\n  }\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    this.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n    return [];\n  }\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n    this._stop();\n    this.config.clearCache();\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n    this.notifyPlugins('destroy');\n    delete instances[this.id];\n    this.notifyPlugins('afterDestroy');\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      this.attached = true;\n      this.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove('resize', listener);\n      this._stop();\n      this._resize(0, 0);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (spacing) {\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n  if (outerEnd > 0) {\n    const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n  }\n  const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n  ctx.lineTo(p4.x, p4.y);\n  if (innerEnd > 0) {\n    const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n  }\n  ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n  if (innerStart > 0) {\n    const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n  }\n  const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n  ctx.lineTo(p8.x, p8.y);\n  if (outerStart > 0) {\n    const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const {x, y, startAngle, pixelMargin, fullCircles} = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n  const {options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const inner = options.borderAlign === 'inner';\n  if (!borderWidth) {\n    return;\n  }\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = this.options.spacing / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n    return (betweenAngles && withinRadius);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference',\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderJoinStyle: undefined,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\n}\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n    if (!segments.length) {\n      return;\n    }\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || (this.points.length - start);\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderWidth: 3,\n  capBezierPoints: true,\n  cubicInterpolationMode: 'default',\n  fill: false,\n  spanGaps: false,\n  stepped: false,\n  tension: 0,\n};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  size(options) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n  let left, right, top, bottom, half;\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n  return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n  const enableBorder = enableBorderRadius || isObject(value);\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n    ctx.save();\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n    maxArea = area = -1;\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {value: data});\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n  return {start, count};\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n  return target;\n}\nfunction _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n  let value;\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n\nfunction _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n\nfunction _getTarget(source) {\n  const {chart, fill, line} = source;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n  if (isNumberFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n  return null;\n}\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis});\n    unclipArea(ctx);\n  }\n}\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, {line, target, color: below, scale, property});\n  ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\n  }\n}\nfunction clipBounds(ctx, scale, bounds) {\n  const {top, bottom} = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\nvar index = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n      source.line.updateControlPoints(area, source.axis);\n      if (draw) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (source) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const {options, ctx} = this;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight});\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight});\n    return totalWidth;\n  }\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {color: fontColor, padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxWidth * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n        drawPoint(ctx, drawOptions, centerX, centerY);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n    };\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n      rtlHelper.setWidth(this.width);\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    if (!titleOpts.display) {\n      return;\n    }\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n    const x = _alignStartEnd(position, left, left + maxWidth);\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n\nclass Title extends Element {\n  constructor(config) {\n    super();\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\n    }\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\n}\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {width, height};\n}\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart || config._chart;\n    this._chart = this.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\n    }\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const {callbacks} = options;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = labelColors.borderWidth || 1;\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n  _willRender() {\n    return !!this.opacity;\n  }\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n      if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n        return;\n      }\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\n      }\n    }\n  },\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: {\n      beforeTitle: noop,\n      title(tooltipItems) {\n        if (tooltipItems.length > 0) {\n          const item = tooltipItems[0];\n          const labels = item.chart.data.labels;\n          const labelCount = labels ? labels.length : 0;\n          if (this && this.options && this.options.mode === 'dataset') {\n            return item.dataset.label || '';\n          } else if (item.label) {\n            return item.label;\n          } else if (labelCount > 0 && item.dataIndex < labelCount) {\n            return labels[item.dataIndex];\n          }\n        }\n        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\n      beforeLabel: noop,\n      label(tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n          return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n          label += value;\n        }\n        return label;\n      },\n      labelColor(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          borderColor: options.borderColor,\n          backgroundColor: options.backgroundColor,\n          borderWidth: options.borderWidth,\n          borderDash: options.borderDash,\n          borderDashOffset: options.borderDashOffset,\n          borderRadius: 0,\n        };\n      },\n      labelTextColor() {\n        return this.options.bodyColor;\n      },\n      labelPointStyle(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          pointStyle: options.pointStyle,\n          rotation: options.rotation,\n        };\n      },\n      afterLabel: noop,\n      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n  additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n      if (niceMin < min) {\n        j++;\n      }\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n  for (; j < numSpaces; ++j) {\n    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n  }\n  if (maxDefined && includeBounds && niceMax !== max) {\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n  return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({value: tickVal, major: isMajor(tickVal)});\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || (exp === endExp && significand < endSignificand));\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({value: lastTick, major: isMajor(tickVal)});\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n    const {backdropColor} = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      const backdropLeft = left - padding.left;\n      const backdropTop = top - padding.top;\n      const backdropWidth = right - left + padding.width;\n      const backdropHeight = bottom - top + padding.height;\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: backdropLeft,\n          y: backdropTop,\n          w: backdropWidth,\n          h: backdropHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n      }\n    }\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const {color, lineWidth} = gridLineOpts;\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid} = opts;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\n\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\n  }\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  afterAutoSkip() {\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return (this._cache.data = this.normalize(timestamps));\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\n\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n    if (items.length < 2) {\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","const {\n  entries,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!freeze) {\n  freeze = function <T>(x: T): T {\n    return x;\n  };\n}\n\nif (!seal) {\n  seal = function <T>(x: T): T {\n    return x;\n  };\n}\n\nif (!apply) {\n  apply = function <T>(\n    func: (thisArg: any, ...args: any[]) => T,\n    thisArg: any,\n    ...args: any[]\n  ): T {\n    return func.apply(thisArg, args);\n  };\n}\n\nif (!construct) {\n  construct = function <T>(Func: new (...args: any[]) => T, ...args: any[]): T {\n    return new Func(...args);\n  };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\nconst arraySplice = unapply(Array.prototype.splice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply<T>(\n  func: (thisArg: any, ...args: any[]) => T\n): (thisArg: any, ...args: any[]) => T {\n  return (thisArg: any, ...args: any[]): T => {\n    if (thisArg instanceof RegExp) {\n      thisArg.lastIndex = 0;\n    }\n\n    return apply(func, thisArg, args);\n  };\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct<T>(\n  Func: new (...args: any[]) => T\n): (...args: any[]) => T {\n  return (...args: any[]): T => construct(Func, args);\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(\n  set: Record<string, any>,\n  array: readonly any[],\n  transformCaseFunc: ReturnType<typeof unapply<string>> = stringToLowerCase\n): Record<string, any> {\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          (array as any[])[l] = lcElement;\n        }\n\n        element = lcElement;\n      }\n    }\n\n    set[element] = true;\n  }\n\n  return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray<T>(array: T[]): Array<T | null> {\n  for (let index = 0; index < array.length; index++) {\n    const isPropertyExist = objectHasOwnProperty(array, index);\n\n    if (!isPropertyExist) {\n      array[index] = null;\n    }\n  }\n\n  return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone<T extends Record<string, any>>(object: T): T {\n  const newObject = create(null);\n\n  for (const [property, value] of entries(object)) {\n    const isPropertyExist = objectHasOwnProperty(object, property);\n\n    if (isPropertyExist) {\n      if (Array.isArray(value)) {\n        newObject[property] = cleanArray(value);\n      } else if (\n        value &&\n        typeof value === 'object' &&\n        value.constructor === Object\n      ) {\n        newObject[property] = clone(value);\n      } else {\n        newObject[property] = value;\n      }\n    }\n  }\n\n  return newObject;\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter<T extends Record<string, any>>(\n  object: T,\n  prop: string\n): ReturnType<typeof unapply<any>> | (() => null) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n\n    object = getPrototypeOf(object);\n  }\n\n  function fallbackValue(): null {\n    return null;\n  }\n\n  return fallbackValue;\n}\n\nexport {\n  // Array\n  arrayForEach,\n  arrayIndexOf,\n  arrayLastIndexOf,\n  arrayPop,\n  arrayPush,\n  arraySlice,\n  arraySplice,\n  // Object\n  entries,\n  freeze,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n  isFrozen,\n  setPrototypeOf,\n  seal,\n  clone,\n  create,\n  objectHasOwnProperty,\n  // RegExp\n  regExpTest,\n  // String\n  stringIndexOf,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringToString,\n  stringTrim,\n  // Errors\n  typeErrorCreate,\n  // Other\n  lookupGetter,\n  addToSet,\n  // Reflect\n  unapply,\n  unconstruct,\n};\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'a',\n  'abbr',\n  'acronym',\n  'address',\n  'area',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'bdi',\n  'bdo',\n  'big',\n  'blink',\n  'blockquote',\n  'body',\n  'br',\n  'button',\n  'canvas',\n  'caption',\n  'center',\n  'cite',\n  'code',\n  'col',\n  'colgroup',\n  'content',\n  'data',\n  'datalist',\n  'dd',\n  'decorator',\n  'del',\n  'details',\n  'dfn',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'element',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'font',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hgroup',\n  'hr',\n  'html',\n  'i',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'map',\n  'mark',\n  'marquee',\n  'menu',\n  'menuitem',\n  'meter',\n  'nav',\n  'nobr',\n  'ol',\n  'optgroup',\n  'option',\n  'output',\n  'p',\n  'picture',\n  'pre',\n  'progress',\n  'q',\n  'rp',\n  'rt',\n  'ruby',\n  's',\n  'samp',\n  'search',\n  'section',\n  'select',\n  'shadow',\n  'slot',\n  'small',\n  'source',\n  'spacer',\n  'span',\n  'strike',\n  'strong',\n  'style',\n  'sub',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'template',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'track',\n  'tt',\n  'u',\n  'ul',\n  'var',\n  'video',\n  'wbr',\n] as const);\n\nexport const svg = freeze([\n  'svg',\n  'a',\n  'altglyph',\n  'altglyphdef',\n  'altglyphitem',\n  'animatecolor',\n  'animatemotion',\n  'animatetransform',\n  'circle',\n  'clippath',\n  'defs',\n  'desc',\n  'ellipse',\n  'enterkeyhint',\n  'exportparts',\n  'filter',\n  'font',\n  'g',\n  'glyph',\n  'glyphref',\n  'hkern',\n  'image',\n  'inputmode',\n  'line',\n  'lineargradient',\n  'marker',\n  'mask',\n  'metadata',\n  'mpath',\n  'part',\n  'path',\n  'pattern',\n  'polygon',\n  'polyline',\n  'radialgradient',\n  'rect',\n  'stop',\n  'style',\n  'switch',\n  'symbol',\n  'text',\n  'textpath',\n  'title',\n  'tref',\n  'tspan',\n  'view',\n  'vkern',\n] as const);\n\nexport const svgFilters = freeze([\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feDistantLight',\n  'feDropShadow',\n  'feFlood',\n  'feFuncA',\n  'feFuncB',\n  'feFuncG',\n  'feFuncR',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMergeNode',\n  'feMorphology',\n  'feOffset',\n  'fePointLight',\n  'feSpecularLighting',\n  'feSpotLight',\n  'feTile',\n  'feTurbulence',\n] as const);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n  'animate',\n  'color-profile',\n  'cursor',\n  'discard',\n  'font-face',\n  'font-face-format',\n  'font-face-name',\n  'font-face-src',\n  'font-face-uri',\n  'foreignobject',\n  'hatch',\n  'hatchpath',\n  'mesh',\n  'meshgradient',\n  'meshpatch',\n  'meshrow',\n  'missing-glyph',\n  'script',\n  'set',\n  'solidcolor',\n  'unknown',\n  'use',\n] as const);\n\nexport const mathMl = freeze([\n  'math',\n  'menclose',\n  'merror',\n  'mfenced',\n  'mfrac',\n  'mglyph',\n  'mi',\n  'mlabeledtr',\n  'mmultiscripts',\n  'mn',\n  'mo',\n  'mover',\n  'mpadded',\n  'mphantom',\n  'mroot',\n  'mrow',\n  'ms',\n  'mspace',\n  'msqrt',\n  'mstyle',\n  'msub',\n  'msup',\n  'msubsup',\n  'mtable',\n  'mtd',\n  'mtext',\n  'mtr',\n  'munder',\n  'munderover',\n  'mprescripts',\n] as const);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n  'maction',\n  'maligngroup',\n  'malignmark',\n  'mlongdiv',\n  'mscarries',\n  'mscarry',\n  'msgroup',\n  'mstack',\n  'msline',\n  'msrow',\n  'semantics',\n  'annotation',\n  'annotation-xml',\n  'mprescripts',\n  'none',\n] as const);\n\nexport const text = freeze(['#text'] as const);\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'accept',\n  'action',\n  'align',\n  'alt',\n  'autocapitalize',\n  'autocomplete',\n  'autopictureinpicture',\n  'autoplay',\n  'background',\n  'bgcolor',\n  'border',\n  'capture',\n  'cellpadding',\n  'cellspacing',\n  'checked',\n  'cite',\n  'class',\n  'clear',\n  'color',\n  'cols',\n  'colspan',\n  'controls',\n  'controlslist',\n  'coords',\n  'crossorigin',\n  'datetime',\n  'decoding',\n  'default',\n  'dir',\n  'disabled',\n  'disablepictureinpicture',\n  'disableremoteplayback',\n  'download',\n  'draggable',\n  'enctype',\n  'enterkeyhint',\n  'exportparts',\n  'face',\n  'for',\n  'headers',\n  'height',\n  'hidden',\n  'high',\n  'href',\n  'hreflang',\n  'id',\n  'inert',\n  'inputmode',\n  'integrity',\n  'ismap',\n  'kind',\n  'label',\n  'lang',\n  'list',\n  'loading',\n  'loop',\n  'low',\n  'max',\n  'maxlength',\n  'media',\n  'method',\n  'min',\n  'minlength',\n  'multiple',\n  'muted',\n  'name',\n  'nonce',\n  'noshade',\n  'novalidate',\n  'nowrap',\n  'open',\n  'optimum',\n  'part',\n  'pattern',\n  'placeholder',\n  'playsinline',\n  'popover',\n  'popovertarget',\n  'popovertargetaction',\n  'poster',\n  'preload',\n  'pubdate',\n  'radiogroup',\n  'readonly',\n  'rel',\n  'required',\n  'rev',\n  'reversed',\n  'role',\n  'rows',\n  'rowspan',\n  'spellcheck',\n  'scope',\n  'selected',\n  'shape',\n  'size',\n  'sizes',\n  'slot',\n  'span',\n  'srclang',\n  'start',\n  'src',\n  'srcset',\n  'step',\n  'style',\n  'summary',\n  'tabindex',\n  'title',\n  'translate',\n  'type',\n  'usemap',\n  'valign',\n  'value',\n  'width',\n  'wrap',\n  'xmlns',\n  'slot',\n] as const);\n\nexport const svg = freeze([\n  'accent-height',\n  'accumulate',\n  'additive',\n  'alignment-baseline',\n  'amplitude',\n  'ascent',\n  'attributename',\n  'attributetype',\n  'azimuth',\n  'basefrequency',\n  'baseline-shift',\n  'begin',\n  'bias',\n  'by',\n  'class',\n  'clip',\n  'clippathunits',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'cx',\n  'cy',\n  'd',\n  'dx',\n  'dy',\n  'diffuseconstant',\n  'direction',\n  'display',\n  'divisor',\n  'dur',\n  'edgemode',\n  'elevation',\n  'end',\n  'exponent',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'filterunits',\n  'flood-color',\n  'flood-opacity',\n  'font-family',\n  'font-size',\n  'font-size-adjust',\n  'font-stretch',\n  'font-style',\n  'font-variant',\n  'font-weight',\n  'fx',\n  'fy',\n  'g1',\n  'g2',\n  'glyph-name',\n  'glyphref',\n  'gradientunits',\n  'gradienttransform',\n  'height',\n  'href',\n  'id',\n  'image-rendering',\n  'in',\n  'in2',\n  'intercept',\n  'k',\n  'k1',\n  'k2',\n  'k3',\n  'k4',\n  'kerning',\n  'keypoints',\n  'keysplines',\n  'keytimes',\n  'lang',\n  'lengthadjust',\n  'letter-spacing',\n  'kernelmatrix',\n  'kernelunitlength',\n  'lighting-color',\n  'local',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'markerheight',\n  'markerunits',\n  'markerwidth',\n  'maskcontentunits',\n  'maskunits',\n  'max',\n  'mask',\n  'mask-type',\n  'media',\n  'method',\n  'mode',\n  'min',\n  'name',\n  'numoctaves',\n  'offset',\n  'operator',\n  'opacity',\n  'order',\n  'orient',\n  'orientation',\n  'origin',\n  'overflow',\n  'paint-order',\n  'path',\n  'pathlength',\n  'patterncontentunits',\n  'patterntransform',\n  'patternunits',\n  'points',\n  'preservealpha',\n  'preserveaspectratio',\n  'primitiveunits',\n  'r',\n  'rx',\n  'ry',\n  'radius',\n  'refx',\n  'refy',\n  'repeatcount',\n  'repeatdur',\n  'restart',\n  'result',\n  'rotate',\n  'scale',\n  'seed',\n  'shape-rendering',\n  'slope',\n  'specularconstant',\n  'specularexponent',\n  'spreadmethod',\n  'startoffset',\n  'stddeviation',\n  'stitchtiles',\n  'stop-color',\n  'stop-opacity',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke',\n  'stroke-width',\n  'style',\n  'surfacescale',\n  'systemlanguage',\n  'tabindex',\n  'tablevalues',\n  'targetx',\n  'targety',\n  'transform',\n  'transform-origin',\n  'text-anchor',\n  'text-decoration',\n  'text-rendering',\n  'textlength',\n  'type',\n  'u1',\n  'u2',\n  'unicode',\n  'values',\n  'viewbox',\n  'visibility',\n  'version',\n  'vert-adv-y',\n  'vert-origin-x',\n  'vert-origin-y',\n  'width',\n  'word-spacing',\n  'wrap',\n  'writing-mode',\n  'xchannelselector',\n  'ychannelselector',\n  'x',\n  'x1',\n  'x2',\n  'xmlns',\n  'y',\n  'y1',\n  'y2',\n  'z',\n  'zoomandpan',\n] as const);\n\nexport const mathMl = freeze([\n  'accent',\n  'accentunder',\n  'align',\n  'bevelled',\n  'close',\n  'columnsalign',\n  'columnlines',\n  'columnspan',\n  'denomalign',\n  'depth',\n  'dir',\n  'display',\n  'displaystyle',\n  'encoding',\n  'fence',\n  'frame',\n  'height',\n  'href',\n  'id',\n  'largeop',\n  'length',\n  'linethickness',\n  'lspace',\n  'lquote',\n  'mathbackground',\n  'mathcolor',\n  'mathsize',\n  'mathvariant',\n  'maxsize',\n  'minsize',\n  'movablelimits',\n  'notation',\n  'numalign',\n  'open',\n  'rowalign',\n  'rowlines',\n  'rowspacing',\n  'rowspan',\n  'rspace',\n  'rquote',\n  'scriptlevel',\n  'scriptminsize',\n  'scriptsizemultiplier',\n  'selection',\n  'separator',\n  'separators',\n  'stretchy',\n  'subscriptshift',\n  'supscriptshift',\n  'symmetric',\n  'voffset',\n  'width',\n  'xmlns',\n]);\n\nexport const xml = freeze([\n  'xlink:href',\n  'xml:id',\n  'xlink:title',\n  'xml:space',\n  'xmlns:xlink',\n] as const);\n","import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n  /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n  /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n","/* eslint-disable @typescript-eslint/indent */\n\nimport type {\n  TrustedHTML,\n  TrustedTypesWindow,\n} from 'trusted-types/lib/index.js';\nimport type { Config, UseProfilesConfig } from './config';\nimport * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n  addToSet,\n  clone,\n  entries,\n  freeze,\n  arrayForEach,\n  arrayLastIndexOf,\n  arrayPop,\n  arrayPush,\n  arraySplice,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringToString,\n  stringIndexOf,\n  stringTrim,\n  regExpTest,\n  typeErrorCreate,\n  lookupGetter,\n  create,\n  objectHasOwnProperty,\n} from './utils.js';\n\nexport type { Config } from './config';\n\ndeclare const VERSION: string;\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n  element: 1,\n  attribute: 2,\n  text: 3,\n  cdataSection: 4,\n  entityReference: 5, // Deprecated\n  entityNode: 6, // Deprecated\n  progressingInstruction: 7,\n  comment: 8,\n  document: 9,\n  documentType: 10,\n  documentFragment: 11,\n  notation: 12, // Deprecated\n};\n\nconst getGlobal = function (): WindowLike {\n  return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function (\n  trustedTypes: TrustedTypePolicyFactory,\n  purifyHostElement: HTMLScriptElement\n) {\n  if (\n    typeof trustedTypes !== 'object' ||\n    typeof trustedTypes.createPolicy !== 'function'\n  ) {\n    return null;\n  }\n\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n    suffix = purifyHostElement.getAttribute(ATTR_NAME);\n  }\n\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      },\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn(\n      'TrustedTypes policy ' + policyName + ' could not be created.'\n    );\n    return null;\n  }\n};\n\nconst _createHooksMap = function (): HooksMap {\n  return {\n    afterSanitizeAttributes: [],\n    afterSanitizeElements: [],\n    afterSanitizeShadowDOM: [],\n    beforeSanitizeAttributes: [],\n    beforeSanitizeElements: [],\n    beforeSanitizeShadowDOM: [],\n    uponSanitizeAttribute: [],\n    uponSanitizeElement: [],\n    uponSanitizeShadowNode: [],\n  };\n};\n\nfunction createDOMPurify(window: WindowLike = getGlobal()): DOMPurify {\n  const DOMPurify: DOMPurify = (root: WindowLike) => createDOMPurify(root);\n\n  DOMPurify.version = VERSION;\n\n  DOMPurify.removed = [];\n\n  if (\n    !window ||\n    !window.document ||\n    window.document.nodeType !== NODE_TYPE.document ||\n    !window.Element\n  ) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n\n    return DOMPurify;\n  }\n\n  let { document } = window;\n\n  const originalDocument = document;\n  const currentScript: HTMLScriptElement =\n    originalDocument.currentScript as HTMLScriptElement;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || (window as any).MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes,\n  } = window;\n\n  const ElementPrototype = Element.prototype;\n\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const remove = lookupGetter(ElementPrototype, 'remove');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n\n  let trustedTypesPolicy;\n  let emptyHTML = '';\n\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName,\n  } = document;\n  const { importNode } = originalDocument;\n\n  let hooks = _createHooksMap();\n\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported =\n    typeof entries === 'function' &&\n    typeof getParentNode === 'function' &&\n    implementation &&\n    implementation.createHTMLDocument !== undefined;\n\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT,\n  } = EXPRESSIONS;\n\n  let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n    ...TAGS.html,\n    ...TAGS.svg,\n    ...TAGS.svgFilters,\n    ...TAGS.mathMl,\n    ...TAGS.text,\n  ]);\n\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n    ...ATTRS.html,\n    ...ATTRS.svg,\n    ...ATTRS.mathMl,\n    ...ATTRS.xml,\n  ]);\n\n  /*\n   * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(\n    create(null, {\n      tagNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n      attributeNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n      allowCustomizedBuiltInElements: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: false,\n      },\n    })\n  );\n\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n\n  /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n  const EXTRA_ELEMENT_HANDLING = Object.seal(\n    create(null, {\n      tagCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n      attributeCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n    })\n  );\n\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n  /* Decide if self-closing tags in attributes are allowed.\n   * Usually removed due to a mXSS issue in jQuery 3.0 */\n  let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n\n  /* Output should be safe even for XML used within HTML and alike.\n   * This means, DOMPurify removes comments when containing risky content.\n   */\n  let SAFE_FOR_XML = true;\n\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES: UseProfilesConfig | false = {};\n\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n    'annotation-xml',\n    'audio',\n    'colgroup',\n    'desc',\n    'foreignobject',\n    'head',\n    'iframe',\n    'math',\n    'mi',\n    'mn',\n    'mo',\n    'ms',\n    'mtext',\n    'noembed',\n    'noframes',\n    'noscript',\n    'plaintext',\n    'script',\n    'style',\n    'svg',\n    'template',\n    'thead',\n    'title',\n    'video',\n    'xmp',\n  ]);\n\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n    'audio',\n    'video',\n    'img',\n    'source',\n    'image',\n    'track',\n  ]);\n\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n    'alt',\n    'class',\n    'for',\n    'id',\n    'label',\n    'name',\n    'pattern',\n    'placeholder',\n    'role',\n    'summary',\n    'title',\n    'value',\n    'style',\n    'xmlns',\n  ]);\n\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n    {},\n    [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n    stringToString\n  );\n\n  let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n    'mi',\n    'mo',\n    'mn',\n    'ms',\n    'mtext',\n  ]);\n\n  let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n    'title',\n    'style',\n    'font',\n    'a',\n    'script',\n  ]);\n\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE: null | DOMParserSupportedType = null;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc: null | Parameters<typeof addToSet>[2] = null;\n\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG: Config | null = null;\n\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n\n  const formElement = document.createElement('form');\n\n  const isRegexOrFunction = function (\n    testValue: unknown\n  ): testValue is Function | RegExp {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n\n  /**\n   * _parseConfig\n   *\n   * @param cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function (cfg: Config = {}): void {\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n\n    PARSER_MEDIA_TYPE =\n      // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n        ? DEFAULT_PARSER_MEDIA_TYPE\n        : cfg.PARSER_MEDIA_TYPE;\n\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc =\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n        ? stringToString\n        : stringToLowerCase;\n\n    /* Set configuration parameters */\n    ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS')\n      ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n      : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR')\n      ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n      : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES')\n      ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n      : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR')\n      ? addToSet(\n          clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n          cfg.ADD_URI_SAFE_ATTR,\n          transformCaseFunc\n        )\n      : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS')\n      ? addToSet(\n          clone(DEFAULT_DATA_URI_TAGS),\n          cfg.ADD_DATA_URI_TAGS,\n          transformCaseFunc\n        )\n      : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS')\n      ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n      : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS')\n      ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n      : clone({});\n    FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR')\n      ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n      : clone({});\n    USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES')\n      ? cfg.USE_PROFILES\n      : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || EXPRESSIONS.IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    MATHML_TEXT_INTEGRATION_POINTS =\n      cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n    HTML_INTEGRATION_POINTS =\n      cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n        'boolean'\n    ) {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n        cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, TAGS.text);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, TAGS.html);\n        addToSet(ALLOWED_ATTR, ATTRS.html);\n      }\n\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, TAGS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n    }\n\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (typeof cfg.ADD_TAGS === 'function') {\n        EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n      } else {\n        if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n          ALLOWED_TAGS = clone(ALLOWED_TAGS);\n        }\n\n        addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n      }\n    }\n\n    if (cfg.ADD_ATTR) {\n      if (typeof cfg.ADD_ATTR === 'function') {\n        EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n      } else {\n        if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n          ALLOWED_ATTR = clone(ALLOWED_ATTR);\n        }\n\n        addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n      }\n    }\n\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n\n    if (cfg.ADD_FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n\n      addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n    }\n\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n\n    if (cfg.TRUSTED_TYPES_POLICY) {\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n        throw typeErrorCreate(\n          'TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.'\n        );\n      }\n\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n        throw typeErrorCreate(\n          'TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.'\n        );\n      }\n\n      // Overwrite existing TrustedTypes policy.\n      trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n      // Sign local variables required by `sanitize`.\n      emptyHTML = trustedTypesPolicy.createHTML('');\n    } else {\n      // Uninitialized policy, attempt to initialize the internal dompurify policy.\n      if (trustedTypesPolicy === undefined) {\n        trustedTypesPolicy = _createTrustedTypesPolicy(\n          trustedTypes,\n          currentScript\n        );\n      }\n\n      // If creating the internal policy succeeded sign internal variables.\n      if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n        emptyHTML = trustedTypesPolicy.createHTML('');\n      }\n    }\n\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n\n    CONFIG = cfg;\n  };\n\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, [\n    ...TAGS.svg,\n    ...TAGS.svgFilters,\n    ...TAGS.svgDisallowed,\n  ]);\n  const ALL_MATHML_TAGS = addToSet({}, [\n    ...TAGS.mathMl,\n    ...TAGS.mathMlDisallowed,\n  ]);\n\n  /**\n   * @param element a DOM element whose namespace is being checked\n   * @returns Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function (element: Element): boolean {\n    let parent = getParentNode(element);\n\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template',\n      };\n    }\n\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return (\n          tagName === 'svg' &&\n          (parentTagName === 'annotation-xml' ||\n            MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n        );\n      }\n\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (\n        parent.namespaceURI === SVG_NAMESPACE &&\n        !HTML_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      if (\n        parent.namespaceURI === MATHML_NAMESPACE &&\n        !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return (\n        !ALL_MATHML_TAGS[tagName] &&\n        (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n      );\n    }\n\n    // For XHTML and XML documents that support custom namespaces\n    if (\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n      ALLOWED_NAMESPACES[element.namespaceURI]\n    ) {\n      return true;\n    }\n\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n\n  /**\n   * _forceRemove\n   *\n   * @param node a DOM node\n   */\n  const _forceRemove = function (node: Node): void {\n    arrayPush(DOMPurify.removed, { element: node });\n\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      getParentNode(node).removeChild(node);\n    } catch (_) {\n      remove(node);\n    }\n  };\n\n  /**\n   * _removeAttribute\n   *\n   * @param name an Attribute name\n   * @param element a DOM node\n   */\n  const _removeAttribute = function (name: string, element: Element): void {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: element.getAttributeNode(name),\n        from: element,\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: element,\n      });\n    }\n\n    element.removeAttribute(name);\n\n    // We void attribute values for unremovable \"is\" attributes\n    if (name === 'is') {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(element);\n        } catch (_) {}\n      } else {\n        try {\n          element.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n\n  /**\n   * _initDocument\n   *\n   * @param dirty - a string of dirty markup\n   * @return a DOM, filled with the dirty markup\n   */\n  const _initDocument = function (dirty: string): Document {\n    /* Create a HTML document */\n    let doc = null;\n    let leadingWhitespace = null;\n\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n\n    if (\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n      NAMESPACE === HTML_NAMESPACE\n    ) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty =\n        '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' +\n        dirty +\n        '</body></html>';\n    }\n\n    const dirtyPayload = trustedTypesPolicy\n      ? trustedTypesPolicy.createHTML(dirty)\n      : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT\n          ? emptyHTML\n          : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n\n    const body = doc.body || doc.documentElement;\n\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(\n        document.createTextNode(leadingWhitespace),\n        body.childNodes[0] || null\n      );\n    }\n\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(\n        doc,\n        WHOLE_DOCUMENT ? 'html' : 'body'\n      )[0];\n    }\n\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n\n  /**\n   * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n   *\n   * @param root The root element or node to start traversing on.\n   * @return The created NodeIterator\n   */\n  const _createNodeIterator = function (root: Node): NodeIterator {\n    return createNodeIterator.call(\n      root.ownerDocument || root,\n      root,\n      // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT |\n        NodeFilter.SHOW_COMMENT |\n        NodeFilter.SHOW_TEXT |\n        NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n        NodeFilter.SHOW_CDATA_SECTION,\n      null\n    );\n  };\n\n  /**\n   * _isClobbered\n   *\n   * @param element element to check for clobbering attacks\n   * @return true if clobbered, false if safe\n   */\n  const _isClobbered = function (element: Element): boolean {\n    return (\n      element instanceof HTMLFormElement &&\n      (typeof element.nodeName !== 'string' ||\n        typeof element.textContent !== 'string' ||\n        typeof element.removeChild !== 'function' ||\n        !(element.attributes instanceof NamedNodeMap) ||\n        typeof element.removeAttribute !== 'function' ||\n        typeof element.setAttribute !== 'function' ||\n        typeof element.namespaceURI !== 'string' ||\n        typeof element.insertBefore !== 'function' ||\n        typeof element.hasChildNodes !== 'function')\n    );\n  };\n\n  /**\n   * Checks whether the given object is a DOM node.\n   *\n   * @param value object to check whether it's a DOM node\n   * @return true is object is a DOM node\n   */\n  const _isNode = function (value: unknown): value is Node {\n    return typeof Node === 'function' && value instanceof Node;\n  };\n\n  function _executeHooks<T extends HookFunction>(\n    hooks: HookFunction[],\n    currentNode: Parameters<T>[0],\n    data: Parameters<T>[1]\n  ): void {\n    arrayForEach(hooks, (hook: T) => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  }\n\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   * @param currentNode to check for permission to exist\n   * @return true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function (currentNode: any): boolean {\n    let content = null;\n\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n\n    /* Execute a hook if present */\n    _executeHooks(hooks.uponSanitizeElement, currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS,\n    });\n\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (\n      SAFE_FOR_XML &&\n      currentNode.hasChildNodes() &&\n      !_isNode(currentNode.firstElementChild) &&\n      regExpTest(/<[/\\w!]/g, currentNode.innerHTML) &&\n      regExpTest(/<[/\\w!]/g, currentNode.textContent)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any occurrence of processing instructions */\n    if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any kind of possibly harmful comments */\n    if (\n      SAFE_FOR_XML &&\n      currentNode.nodeType === NODE_TYPE.comment &&\n      regExpTest(/<[/\\w]/g, currentNode.data)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove element if anything forbids its presence */\n    if (\n      !(\n        EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function &&\n        EXTRA_ELEMENT_HANDLING.tagCheck(tagName)\n      ) &&\n      (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])\n    ) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n          regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n        ) {\n          return false;\n        }\n\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n        ) {\n          return false;\n        }\n      }\n\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if (\n      (tagName === 'noscript' ||\n        tagName === 'noembed' ||\n        tagName === 'noframes') &&\n      regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n        content = stringReplace(content, expr, ' ');\n      });\n\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n        currentNode.textContent = content;\n      }\n    }\n\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n\n    return false;\n  };\n\n  /**\n   * _isValidAttribute\n   *\n   * @param lcTag Lowercase tag name of containing element.\n   * @param lcName Lowercase attribute name.\n   * @param value Attribute value.\n   * @return Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function (\n    lcTag: string,\n    lcName: string,\n    value: string\n  ): boolean {\n    /* Make sure attribute cannot clobber */\n    if (\n      SANITIZE_DOM &&\n      (lcName === 'id' || lcName === 'name') &&\n      (value in document || value in formElement)\n    ) {\n      return false;\n    }\n\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (\n      ALLOW_DATA_ATTR &&\n      !FORBID_ATTR[lcName] &&\n      regExpTest(DATA_ATTR, lcName)\n    ) {\n      // This attribute is safe\n    } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n      // This attribute is safe\n      /* Check if ADD_ATTR function allows this attribute */\n    } else if (\n      EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function &&\n      EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)\n    ) {\n      // This attribute is safe\n      /* Otherwise, check the name is permitted */\n    } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n        // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n        // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n        (_isBasicCustomElement(lcTag) &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n          ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n            (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)))) ||\n        // Alternative, second condition checks if it's an `is`-attribute, AND\n        // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        (lcName === 'is' &&\n          CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n      ) {\n        // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n        // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n      } else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n      // This attribute is safe\n      /* Check no script, data or unknown possibly unsafe URI\n        unless we know URI values are safe for that attribute */\n    } else if (\n      regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Keep image data URIs alive if src/xlink:href is allowed */\n      /* Further prevent gadget XSS for dynamically built script tags */\n    } else if (\n      (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n      lcTag !== 'script' &&\n      stringIndexOf(value, 'data:') === 0 &&\n      DATA_URI_TAGS[lcTag]\n    ) {\n      // This attribute is safe\n      /* Allow unknown protocols: This provides support for links that\n        are handled by protocol handlers which may be unknown ahead of\n        time, e.g. fb:, spotify: */\n    } else if (\n      ALLOW_UNKNOWN_PROTOCOLS &&\n      !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Check for binary attributes */\n    } else if (value) {\n      return false;\n    } else {\n      // Binary attributes are safe at this point\n      /* Anything else, presume unsafe, do not add it back */\n    }\n\n    return true;\n  };\n\n  /**\n   * _isBasicCustomElement\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   *\n   * @param tagName name of the tag of the node to sanitize\n   * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n   */\n  const _isBasicCustomElement = function (tagName: string): RegExpMatchArray {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param currentNode to sanitize\n   */\n  const _sanitizeAttributes = function (currentNode: Element): void {\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n\n    const { attributes } = currentNode;\n\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes || _isClobbered(currentNode)) {\n      return;\n    }\n\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n      forceKeepAttr: undefined,\n    };\n    let l = attributes.length;\n\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      const attr = attributes[l];\n      const { name, namespaceURI, value: attrValue } = attr;\n      const lcName = transformCaseFunc(name);\n\n      const initValue = attrValue;\n      let value = name === 'value' ? initValue : stringTrim(initValue);\n\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n      value = hookEvent.attrValue;\n\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n\n      /* Work around a security issue with comments inside attributes */\n      if (\n        SAFE_FOR_XML &&\n        regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)\n      ) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n      if (lcName === 'attributename' && stringMatch(value, 'href')) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n          value = stringReplace(value, expr, ' ');\n        });\n      }\n\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Handle attributes that require Trusted Types */\n      if (\n        trustedTypesPolicy &&\n        typeof trustedTypes === 'object' &&\n        typeof trustedTypes.getAttributeType === 'function'\n      ) {\n        if (namespaceURI) {\n          /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n        } else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML': {\n              value = trustedTypesPolicy.createHTML(value);\n              break;\n            }\n\n            case 'TrustedScriptURL': {\n              value = trustedTypesPolicy.createScriptURL(value);\n              break;\n            }\n\n            default: {\n              break;\n            }\n          }\n        }\n      }\n\n      /* Handle invalid data-* attribute set by try-catching it */\n      if (value !== initValue) {\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n\n          if (_isClobbered(currentNode)) {\n            _forceRemove(currentNode);\n          } else {\n            arrayPop(DOMPurify.removed);\n          }\n        } catch (_) {\n          _removeAttribute(name, currentNode);\n        }\n      }\n    }\n\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n  };\n\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function (fragment: DocumentFragment): void {\n    let shadowNode = null;\n    const shadowIterator = _createNodeIterator(fragment);\n\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n\n    while ((shadowNode = shadowIterator.nextNode())) {\n      /* Execute a hook if present */\n      _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n\n      /* Sanitize tags and elements */\n      _sanitizeElements(shadowNode);\n\n      /* Check attributes next */\n      _sanitizeAttributes(shadowNode);\n\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n    }\n\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n  };\n\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty, cfg = {}) {\n    let body = null;\n    let importedNode = null;\n    let currentNode = null;\n    let returnNode = null;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      if (typeof dirty.toString === 'function') {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      } else {\n        throw typeErrorCreate('toString is not a function');\n      }\n    }\n\n    /* Return dirty HTML if DOMPurify cannot run */\n    if (!DOMPurify.isSupported) {\n      return dirty;\n    }\n\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if ((dirty as Node).nodeName) {\n        const tagName = transformCaseFunc((dirty as Node).nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate(\n            'root node is forbidden and cannot be sanitized in-place'\n          );\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (\n        importedNode.nodeType === NODE_TYPE.element &&\n        importedNode.nodeName === 'BODY'\n      ) {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (\n        !RETURN_DOM &&\n        !SAFE_FOR_TEMPLATES &&\n        !WHOLE_DOCUMENT &&\n        // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1\n      ) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n          ? trustedTypesPolicy.createHTML(dirty)\n          : dirty;\n      }\n\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n\n    /* Get node iterator */\n    const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n    /* Now start iterating over the created document */\n    while ((currentNode = nodeIterator.nextNode())) {\n      /* Sanitize tags and elements */\n      _sanitizeElements(currentNode);\n\n      /* Check attributes next */\n      _sanitizeAttributes(currentNode);\n\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n    }\n\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n\n      return returnNode;\n    }\n\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n    /* Serialize doctype if allowed */\n    if (\n      WHOLE_DOCUMENT &&\n      ALLOWED_TAGS['!doctype'] &&\n      body.ownerDocument &&\n      body.ownerDocument.doctype &&\n      body.ownerDocument.doctype.name &&\n      regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n    ) {\n      serializedHTML =\n        '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n        serializedHTML = stringReplace(serializedHTML, expr, ' ');\n      });\n    }\n\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n      ? trustedTypesPolicy.createHTML(serializedHTML)\n      : serializedHTML;\n  };\n\n  DOMPurify.setConfig = function (cfg = {}) {\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n\n  DOMPurify.addHook = function (\n    entryPoint: keyof HooksMap,\n    hookFunction: HookFunction\n  ) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n\n  DOMPurify.removeHook = function (\n    entryPoint: keyof HooksMap,\n    hookFunction: HookFunction\n  ) {\n    if (hookFunction !== undefined) {\n      const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n\n      return index === -1\n        ? undefined\n        : arraySplice(hooks[entryPoint], index, 1)[0];\n    }\n\n    return arrayPop(hooks[entryPoint]);\n  };\n\n  DOMPurify.removeHooks = function (entryPoint: keyof HooksMap) {\n    hooks[entryPoint] = [];\n  };\n\n  DOMPurify.removeAllHooks = function () {\n    hooks = _createHooksMap();\n  };\n\n  return DOMPurify;\n}\n\nexport default createDOMPurify();\n\nexport interface DOMPurify {\n  /**\n   * Creates a DOMPurify instance using the given window-like object. Defaults to `window`.\n   */\n  (root?: WindowLike): DOMPurify;\n\n  /**\n   * Version label, exposed for easier checks\n   * if DOMPurify is up to date or not\n   */\n  version: string;\n\n  /**\n   * Array of elements that DOMPurify removed during sanitation.\n   * Empty if nothing was removed.\n   */\n  removed: Array<RemovedElement | RemovedAttribute>;\n\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  isSupported: boolean;\n\n  /**\n   * Set the configuration once.\n   *\n   * @param cfg configuration object\n   */\n  setConfig(cfg?: Config): void;\n\n  /**\n   * Removes the configuration.\n   */\n  clearConfig(): void;\n\n  /**\n   * Provides core sanitation functionality.\n   *\n   * @param dirty string or DOM node\n   * @param cfg object\n   * @returns Sanitized TrustedHTML.\n   */\n  sanitize(\n    dirty: string | Node,\n    cfg: Config & { RETURN_TRUSTED_TYPE: true }\n  ): TrustedHTML;\n\n  /**\n   * Provides core sanitation functionality.\n   *\n   * @param dirty DOM node\n   * @param cfg object\n   * @returns Sanitized DOM node.\n   */\n  sanitize(dirty: Node, cfg: Config & { IN_PLACE: true }): Node;\n\n  /**\n   * Provides core sanitation functionality.\n   *\n   * @param dirty string or DOM node\n   * @param cfg object\n   * @returns Sanitized DOM node.\n   */\n  sanitize(dirty: string | Node, cfg: Config & { RETURN_DOM: true }): Node;\n\n  /**\n   * Provides core sanitation functionality.\n   *\n   * @param dirty string or DOM node\n   * @param cfg object\n   * @returns Sanitized document fragment.\n   */\n  sanitize(\n    dirty: string | Node,\n    cfg: Config & { RETURN_DOM_FRAGMENT: true }\n  ): DocumentFragment;\n\n  /**\n   * Provides core sanitation functionality.\n   *\n   * @param dirty string or DOM node\n   * @param cfg object\n   * @returns Sanitized string.\n   */\n  sanitize(dirty: string | Node, cfg?: Config): string;\n\n  /**\n   * Checks if an attribute value is valid.\n   * Uses last set config, if any. Otherwise, uses config defaults.\n   *\n   * @param tag Tag name of containing element.\n   * @param attr Attribute name.\n   * @param value Attribute value.\n   * @returns Returns true if `value` is valid. Otherwise, returns false.\n   */\n  isValidAttribute(tag: string, attr: string, value: string): boolean;\n\n  /**\n   * Adds a DOMPurify hook.\n   *\n   * @param entryPoint entry point for the hook to add\n   * @param hookFunction function to execute\n   */\n  addHook(entryPoint: BasicHookName, hookFunction: NodeHook): void;\n\n  /**\n   * Adds a DOMPurify hook.\n   *\n   * @param entryPoint entry point for the hook to add\n   * @param hookFunction function to execute\n   */\n  addHook(entryPoint: ElementHookName, hookFunction: ElementHook): void;\n\n  /**\n   * Adds a DOMPurify hook.\n   *\n   * @param entryPoint entry point for the hook to add\n   * @param hookFunction function to execute\n   */\n  addHook(\n    entryPoint: DocumentFragmentHookName,\n    hookFunction: DocumentFragmentHook\n  ): void;\n\n  /**\n   * Adds a DOMPurify hook.\n   *\n   * @param entryPoint entry point for the hook to add\n   * @param hookFunction function to execute\n   */\n  addHook(\n    entryPoint: 'uponSanitizeElement',\n    hookFunction: UponSanitizeElementHook\n  ): void;\n\n  /**\n   * Adds a DOMPurify hook.\n   *\n   * @param entryPoint entry point for the hook to add\n   * @param hookFunction function to execute\n   */\n  addHook(\n    entryPoint: 'uponSanitizeAttribute',\n    hookFunction: UponSanitizeAttributeHook\n  ): void;\n\n  /**\n   * Remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if hook not specified)\n   *\n   * @param entryPoint entry point for the hook to remove\n   * @param hookFunction optional specific hook to remove\n   * @returns removed hook\n   */\n  removeHook(\n    entryPoint: BasicHookName,\n    hookFunction?: NodeHook\n  ): NodeHook | undefined;\n\n  /**\n   * Remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if hook not specified)\n   *\n   * @param entryPoint entry point for the hook to remove\n   * @param hookFunction optional specific hook to remove\n   * @returns removed hook\n   */\n  removeHook(\n    entryPoint: ElementHookName,\n    hookFunction?: ElementHook\n  ): ElementHook | undefined;\n\n  /**\n   * Remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if hook not specified)\n   *\n   * @param entryPoint entry point for the hook to remove\n   * @param hookFunction optional specific hook to remove\n   * @returns removed hook\n   */\n  removeHook(\n    entryPoint: DocumentFragmentHookName,\n    hookFunction?: DocumentFragmentHook\n  ): DocumentFragmentHook | undefined;\n\n  /**\n   * Remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if hook not specified)\n   *\n   * @param entryPoint entry point for the hook to remove\n   * @param hookFunction optional specific hook to remove\n   * @returns removed hook\n   */\n  removeHook(\n    entryPoint: 'uponSanitizeElement',\n    hookFunction?: UponSanitizeElementHook\n  ): UponSanitizeElementHook | undefined;\n\n  /**\n   * Remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if hook not specified)\n   *\n   * @param entryPoint entry point for the hook to remove\n   * @param hookFunction optional specific hook to remove\n   * @returns removed hook\n   */\n  removeHook(\n    entryPoint: 'uponSanitizeAttribute',\n    hookFunction?: UponSanitizeAttributeHook\n  ): UponSanitizeAttributeHook | undefined;\n\n  /**\n   * Removes all DOMPurify hooks at a given entryPoint\n   *\n   * @param entryPoint entry point for the hooks to remove\n   */\n  removeHooks(entryPoint: HookName): void;\n\n  /**\n   * Removes all DOMPurify hooks.\n   */\n  removeAllHooks(): void;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedElement {\n  /**\n   * The element that was removed.\n   */\n  element: Node;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedAttribute {\n  /**\n   * The attribute that was removed.\n   */\n  attribute: Attr | null;\n\n  /**\n   * The element that the attribute was removed.\n   */\n  from: Node;\n}\n\ntype BasicHookName =\n  | 'beforeSanitizeElements'\n  | 'afterSanitizeElements'\n  | 'uponSanitizeShadowNode';\ntype ElementHookName = 'beforeSanitizeAttributes' | 'afterSanitizeAttributes';\ntype DocumentFragmentHookName =\n  | 'beforeSanitizeShadowDOM'\n  | 'afterSanitizeShadowDOM';\ntype UponSanitizeElementHookName = 'uponSanitizeElement';\ntype UponSanitizeAttributeHookName = 'uponSanitizeAttribute';\n\ninterface HooksMap {\n  beforeSanitizeElements: NodeHook[];\n  afterSanitizeElements: NodeHook[];\n  beforeSanitizeShadowDOM: DocumentFragmentHook[];\n  uponSanitizeShadowNode: NodeHook[];\n  afterSanitizeShadowDOM: DocumentFragmentHook[];\n  beforeSanitizeAttributes: ElementHook[];\n  afterSanitizeAttributes: ElementHook[];\n  uponSanitizeElement: UponSanitizeElementHook[];\n  uponSanitizeAttribute: UponSanitizeAttributeHook[];\n}\n\ntype ArrayElement<T> = T extends Array<infer U> ? U : never;\n\ntype HookFunction = ArrayElement<HooksMap[keyof HooksMap]>;\n\nexport type HookName =\n  | BasicHookName\n  | ElementHookName\n  | DocumentFragmentHookName\n  | UponSanitizeElementHookName\n  | UponSanitizeAttributeHookName;\n\nexport type NodeHook = (\n  this: DOMPurify,\n  currentNode: Node,\n  hookEvent: null,\n  config: Config\n) => void;\n\nexport type ElementHook = (\n  this: DOMPurify,\n  currentNode: Element,\n  hookEvent: null,\n  config: Config\n) => void;\n\nexport type DocumentFragmentHook = (\n  this: DOMPurify,\n  currentNode: DocumentFragment,\n  hookEvent: null,\n  config: Config\n) => void;\n\nexport type UponSanitizeElementHook = (\n  this: DOMPurify,\n  currentNode: Node,\n  hookEvent: UponSanitizeElementHookEvent,\n  config: Config\n) => void;\n\nexport type UponSanitizeAttributeHook = (\n  this: DOMPurify,\n  currentNode: Element,\n  hookEvent: UponSanitizeAttributeHookEvent,\n  config: Config\n) => void;\n\nexport interface UponSanitizeElementHookEvent {\n  tagName: string;\n  allowedTags: Record<string, boolean>;\n}\n\nexport interface UponSanitizeAttributeHookEvent {\n  attrName: string;\n  attrValue: string;\n  keepAttr: boolean;\n  allowedAttributes: Record<string, boolean>;\n  forceKeepAttr: boolean | undefined;\n}\n\n/**\n * A `Window`-like object containing the properties and types that DOMPurify requires.\n */\nexport type WindowLike = Pick<\n  typeof globalThis,\n  | 'DocumentFragment'\n  | 'HTMLTemplateElement'\n  | 'Node'\n  | 'Element'\n  | 'NodeFilter'\n  | 'NamedNodeMap'\n  | 'HTMLFormElement'\n  | 'DOMParser'\n> & {\n  document?: Document;\n  MozNamedAttrMap?: typeof window.NamedNodeMap;\n} & Pick<TrustedTypesWindow, 'trustedTypes'>;\n","class LocationUtil {\n  location = window.location;\n\n  replace(...args) {\n    this.location.replace(...args);\n  }\n}\n\nconst location = new LocationUtil();\n\nexport default location;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n","var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","var baseRange = require('./_baseRange'),\n    isIterateeCall = require('./_isIterateeCall'),\n    toFinite = require('./toFinite');\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nmodule.exports = createRange;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nmodule.exports = baseRange;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\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 array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\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 a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","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","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\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","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\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 valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\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 = baseTrim(value);\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 trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\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","/**\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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = rng;\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\n\nfunction rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.URL = exports.DNS = void 0;\nexports.default = v35;\n\nvar _stringify = require(\"./stringify.js\");\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n  str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n  const bytes = [];\n\n  for (let i = 0; i < str.length; ++i) {\n    bytes.push(str.charCodeAt(i));\n  }\n\n  return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction v35(name, version, hashfunc) {\n  function generateUUID(value, namespace, buf, offset) {\n    var _namespace;\n\n    if (typeof value === 'string') {\n      value = stringToBytes(value);\n    }\n\n    if (typeof namespace === 'string') {\n      namespace = (0, _parse.default)(namespace);\n    }\n\n    if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    } // Compute hash of namespace and value, Per 4.3\n    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n    // hashfunc([...namespace, ... value])`\n\n\n    let bytes = new Uint8Array(16 + value.length);\n    bytes.set(namespace);\n    bytes.set(value, namespace.length);\n    bytes = hashfunc(bytes);\n    bytes[6] = bytes[6] & 0x0f | version;\n    bytes[8] = bytes[8] & 0x3f | 0x80;\n\n    if (buf) {\n      offset = offset || 0;\n\n      for (let i = 0; i < 16; ++i) {\n        buf[offset + i] = bytes[i];\n      }\n\n      return buf;\n    }\n\n    return (0, _stringify.unsafeStringify)(bytes);\n  } // Function#name is not settable on some platforms (#270)\n\n\n  try {\n    generateUUID.name = name; // eslint-disable-next-line no-empty\n  } catch (err) {} // For CommonJS default export support\n\n\n  generateUUID.DNS = DNS;\n  generateUUID.URL = URL;\n  return generateUUID;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n  if (!(0, _validate.default)(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  let v;\n  const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n  arr[1] = v >>> 16 & 0xff;\n  arr[2] = v >>> 8 & 0xff;\n  arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n  arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n  arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n  arr[9] = v & 0xff; // Parse ........-....-....-....-############\n  // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n  arr[11] = v / 0x100000000 & 0xff;\n  arr[12] = v >>> 24 & 0xff;\n  arr[13] = v >>> 16 & 0xff;\n  arr[14] = v >>> 8 & 0xff;\n  arr[15] = v & 0xff;\n  return arr;\n}\n\nvar _default = parse;\nexports.default = _default;","// This code was originally forked from https://github.com/felixge/node-stack-trace\n// Since then it has been highly modified to fit our needs.\n\n// Copyright (c) 2011 Felix Geisendörfer (felix@debuggable.com)//\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions://\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.//\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport type { StackLineParserFn } from '@sentry/types';\n\nexport type GetModuleFn = (filename: string | undefined) => string | undefined;\n\n/**\n * Does this filename look like it's part of the app code?\n */\nexport function filenameIsInApp(filename: string, isNative: boolean = false): boolean {\n  const isInternal =\n    isNative ||\n    (filename &&\n      // It's not internal if it's an absolute linux path\n      !filename.startsWith('/') &&\n      // It's not internal if it's an absolute windows path\n      !filename.match(/^[A-Z]:/) &&\n      // It's not internal if the path is starting with a dot\n      !filename.startsWith('.') &&\n      // It's not internal if the frame has a protocol. In node, this is usually the case if the file got pre-processed with a bundler like webpack\n      !filename.match(/^[a-zA-Z]([a-zA-Z0-9.\\-+])*:\\/\\//)); // Schema from: https://stackoverflow.com/a/3641782\n\n  // in_app is all that's not an internal Node function or a module within node_modules\n  // note that isNative appears to return true even for node core libraries\n  // see https://github.com/getsentry/raven-node/issues/176\n\n  return !isInternal && filename !== undefined && !filename.includes('node_modules/');\n}\n\n/** Node Stack line parser */\n// eslint-disable-next-line complexity\nexport function node(getModule?: GetModuleFn): StackLineParserFn {\n  const FILENAME_MATCH = /^\\s*[-]{4,}$/;\n  const FULL_MATCH = /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/;\n\n  // eslint-disable-next-line complexity\n  return (line: string) => {\n    const lineMatch = line.match(FULL_MATCH);\n\n    if (lineMatch) {\n      let object: string | undefined;\n      let method: string | undefined;\n      let functionName: string | undefined;\n      let typeName: string | undefined;\n      let methodName: string | undefined;\n\n      if (lineMatch[1]) {\n        functionName = lineMatch[1];\n\n        let methodStart = functionName.lastIndexOf('.');\n        if (functionName[methodStart - 1] === '.') {\n          methodStart--;\n        }\n\n        if (methodStart > 0) {\n          object = functionName.slice(0, methodStart);\n          method = functionName.slice(methodStart + 1);\n          const objectEnd = object.indexOf('.Module');\n          if (objectEnd > 0) {\n            functionName = functionName.slice(objectEnd + 1);\n            object = object.slice(0, objectEnd);\n          }\n        }\n        typeName = undefined;\n      }\n\n      if (method) {\n        typeName = object;\n        methodName = method;\n      }\n\n      if (method === '<anonymous>') {\n        methodName = undefined;\n        functionName = undefined;\n      }\n\n      if (functionName === undefined) {\n        methodName = methodName || '<anonymous>';\n        functionName = typeName ? `${typeName}.${methodName}` : methodName;\n      }\n\n      let filename = lineMatch[2] && lineMatch[2].startsWith('file://') ? lineMatch[2].slice(7) : lineMatch[2];\n      const isNative = lineMatch[5] === 'native';\n\n      // If it's a Windows path, trim the leading slash so that `/C:/foo` becomes `C:/foo`\n      if (filename && filename.match(/\\/[A-Z]:/)) {\n        filename = filename.slice(1);\n      }\n\n      if (!filename && lineMatch[5] && !isNative) {\n        filename = lineMatch[5];\n      }\n\n      return {\n        filename,\n        module: getModule ? getModule(filename) : undefined,\n        function: functionName,\n        lineno: parseInt(lineMatch[3], 10) || undefined,\n        colno: parseInt(lineMatch[4], 10) || undefined,\n        in_app: filenameIsInApp(filename, isNative),\n      };\n    }\n\n    if (line.match(FILENAME_MATCH)) {\n      return {\n        filename: line,\n      };\n    }\n\n    return undefined;\n  };\n}\n","import type { HandlerDataError } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnErrorHandler: (typeof GLOBAL_OBJ)['onerror'] | null = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalErrorInstrumentationHandler(handler: (data: HandlerDataError) => void): void {\n  const type = 'error';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError(): void {\n  _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n  GLOBAL_OBJ.onerror = function (\n    msg: string | object,\n    url?: string,\n    line?: number,\n    column?: number,\n    error?: Error,\n  ): boolean {\n    const handlerData: HandlerDataError = {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    };\n    triggerHandlers('error', handlerData);\n\n    if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  };\n\n  GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { HandlerDataUnhandledRejection } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnUnhandledRejectionHandler: (typeof GLOBAL_OBJ)['onunhandledrejection'] | null = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalUnhandledRejectionInstrumentationHandler(\n  handler: (data: HandlerDataUnhandledRejection) => void,\n): void {\n  const type = 'unhandledrejection';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection(): void {\n  _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n  GLOBAL_OBJ.onunhandledrejection = function (e: any): boolean {\n    const handlerData: HandlerDataUnhandledRejection = e;\n    triggerHandlers('unhandledrejection', handlerData);\n\n    if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n\n    return true;\n  };\n\n  GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n","import { SentryError } from './error';\nimport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer<T> {\n  // exposes the internal array so tests can assert on the state of it.\n  // XXX: this really should not be public api.\n  $: Array<PromiseLike<T>>;\n  add(taskProducer: () => PromiseLike<T>): PromiseLike<T>;\n  drain(timeout?: number): PromiseLike<boolean>;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer<T>(limit?: number): PromiseBuffer<T> {\n  const buffer: Array<PromiseLike<T>> = [];\n\n  function isReady(): boolean {\n    return limit === undefined || buffer.length < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task: PromiseLike<T>): PromiseLike<T> {\n    return buffer.splice(buffer.indexOf(task), 1)[0];\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer: () => PromiseLike<T>): PromiseLike<T> {\n    if (!isReady()) {\n      return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    if (buffer.indexOf(task) === -1) {\n      buffer.push(task);\n    }\n    void task\n      .then(() => remove(task))\n      // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n      // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n      // have promises, so TS has to polyfill when down-compiling.)\n      .then(null, () =>\n        remove(task).then(null, () => {\n          // We have to add another catch here because `remove()` starts a new promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise<boolean>((resolve, reject) => {\n      let counter = buffer.length;\n\n      if (!counter) {\n        return resolve(true);\n      }\n\n      // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n\n      // if all promises resolve in time, cancel the timer and resolve to `true`\n      buffer.forEach(item => {\n        void resolvedSyncPromise(item).then(() => {\n          if (!--counter) {\n            clearTimeout(capturedSetTimeout);\n            resolve(true);\n          }\n        }, reject);\n      });\n    });\n  }\n\n  return {\n    $: buffer,\n    add,\n    drain,\n  };\n}\n","import type { Event, EventHint, Exception, ExtendedError, StackParser } from '@sentry/types';\n\nimport { isInstanceOf } from './is';\nimport { truncate } from './string';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nexport function applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  maxValueLimit: number = 250,\n  key: string,\n  limit: number,\n  event: Event,\n  hint?: EventHint,\n): void {\n  if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException: Exception | undefined =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = truncateAggregateExceptions(\n      aggregateExceptionsFromError(\n        exceptionFromErrorImplementation,\n        parser,\n        limit,\n        hint.originalException as ExtendedError,\n        key,\n        event.exception.values,\n        originalException,\n        0,\n      ),\n      maxValueLimit,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  limit: number,\n  error: ExtendedError,\n  key: string,\n  prevExceptions: Exception[],\n  exception: Exception,\n  exceptionId: number,\n): Exception[] {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  if (isInstanceOf(error[key], Error)) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n  if (Array.isArray(error.errors)) {\n    error.errors.forEach((childError, i) => {\n      if (isInstanceOf(childError, Error)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception: Exception, exceptionId: number): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    is_exception_group: true,\n    exception_id: exceptionId,\n  };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception: Exception,\n  source: string,\n  exceptionId: number,\n  parentId: number | undefined,\n): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    type: 'chained',\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId,\n  };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions: Exception[], maxValueLength: number): Exception[] {\n  return exceptions.map(exception => {\n    if (exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n    return exception;\n  });\n}\n","// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid DateTime: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Interval: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Duration: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n  constructor(unit) {\n    super(`Invalid unit ${unit}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n  constructor() {\n    super(\"Zone is an abstract class\");\n  }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n  s = \"short\",\n  l = \"long\";\n\nexport const DATE_SHORT = {\n  year: n,\n  month: n,\n  day: n\n};\n\nexport const DATE_MED = {\n  year: n,\n  month: s,\n  day: n\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s\n};\n\nexport const DATE_FULL = {\n  year: n,\n  month: l,\n  day: n\n};\n\nexport const DATE_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l\n};\n\nexport const TIME_SIMPLE = {\n  hour: n,\n  minute: n\n};\n\nexport const TIME_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l\n};\n\nexport const TIME_24_SIMPLE = {\n  hour: n,\n  minute: n,\n  hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23', always 24-hour.\n */\nexport const TIME_24_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n  hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour.\n */\nexport const TIME_24_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hour12: false,\n  timeZoneName: s\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour.\n */\nexport const TIME_24_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hour12: false,\n  timeZoneName: l\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT_WITH_SECONDS = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n\n};\n\nexport const DATETIME_MED = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n  hour: n,\n  minute: n\n};\n\nexport const DATETIME_FULL = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  timeZoneName: s\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s\n};\n\nexport const DATETIME_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  timeZoneName: l\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l\n};\n","/*\n  This is just a junk drawer, containing anything used across multiple classes.\n  Because Luxon is small(ish), this should stay small and we won't worry about splitting\n  it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n  return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n  return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n  return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n  return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n  return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasIntl() {\n  try {\n    return typeof Intl !== \"undefined\" && Intl.DateTimeFormat;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport function hasFormatToParts() {\n  return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts);\n}\n\nexport function hasRelative() {\n  try {\n    return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n  } catch (e) {\n    return false;\n  }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n  return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n  if (arr.length === 0) {\n    return undefined;\n  }\n  return arr.reduce((best, next) => {\n    const pair = [by(next), next];\n    if (!best) {\n      return pair;\n    } else if (compare(best[0], pair[0]) === best[0]) {\n      return best;\n    } else {\n      return pair;\n    }\n  }, null)[1];\n}\n\nexport function pick(obj, keys) {\n  return keys.reduce((a, k) => {\n    a[k] = obj[k];\n    return a;\n  }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n  return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n  return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n  const minus = input < 0 ? \"-\" : \"\";\n  const target = minus ? input * -1 : input;\n  let result;\n\n  if (target.toString().length < n) {\n    result = (\"0\".repeat(n) + target).slice(-n);\n  } else {\n    result = target.toString();\n  }\n\n  return `${minus}${result}`;\n}\n\nexport function parseInteger(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseInt(string, 10);\n  }\n}\n\nexport function parseMillis(fraction) {\n  // Return undefined (instead of 0) in these cases, where fraction is not set\n  if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n    return undefined;\n  } else {\n    const f = parseFloat(\"0.\" + fraction) * 1000;\n    return Math.floor(f);\n  }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n  const factor = 10 ** digits,\n    rounder = towardZero ? Math.trunc : Math.round;\n  return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n  const modMonth = floorMod(month - 1, 12) + 1,\n    modYear = year + (month - modMonth) / 12;\n\n  if (modMonth === 2) {\n    return isLeapYear(modYear) ? 29 : 28;\n  } else {\n    return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n  }\n}\n\n// covert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n  let d = Date.UTC(\n    obj.year,\n    obj.month - 1,\n    obj.day,\n    obj.hour,\n    obj.minute,\n    obj.second,\n    obj.millisecond\n  );\n\n  // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n  if (obj.year < 100 && obj.year >= 0) {\n    d = new Date(d);\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n  return +d;\n}\n\nexport function weeksInWeekYear(weekYear) {\n  const p1 =\n      (weekYear +\n        Math.floor(weekYear / 4) -\n        Math.floor(weekYear / 100) +\n        Math.floor(weekYear / 400)) %\n      7,\n    last = weekYear - 1,\n    p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n  return p1 === 4 || p2 === 3 ? 53 : 52;\n}\n\nexport function untruncateYear(year) {\n  if (year > 99) {\n    return year;\n  } else return year > 60 ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n  const date = new Date(ts),\n    intlOpts = {\n      hour12: false,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\"\n    };\n\n  if (timeZone) {\n    intlOpts.timeZone = timeZone;\n  }\n\n  const modified = Object.assign({ timeZoneName: offsetFormat }, intlOpts),\n    intl = hasIntl();\n\n  if (intl && hasFormatToParts()) {\n    const parsed = new Intl.DateTimeFormat(locale, modified)\n      .formatToParts(date)\n      .find(m => m.type.toLowerCase() === \"timezonename\");\n    return parsed ? parsed.value : null;\n  } else if (intl) {\n    // this probably doesn't work for all locales\n    const without = new Intl.DateTimeFormat(locale, intlOpts).format(date),\n      included = new Intl.DateTimeFormat(locale, modified).format(date),\n      diffed = included.substring(without.length),\n      trimmed = diffed.replace(/^[, \\u200e]+/, \"\");\n    return trimmed;\n  } else {\n    return null;\n  }\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n  let offHour = parseInt(offHourStr, 10);\n\n  // don't || this because we want to preserve -0\n  if (Number.isNaN(offHour)) {\n    offHour = 0;\n  }\n\n  const offMin = parseInt(offMinuteStr, 10) || 0,\n    offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n  return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n  const numericValue = Number(value);\n  if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n    throw new InvalidArgumentError(`Invalid unit value ${value}`);\n  return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer, nonUnitKeys) {\n  const normalized = {};\n  for (const u in obj) {\n    if (hasOwnProperty(obj, u)) {\n      if (nonUnitKeys.indexOf(u) >= 0) continue;\n      const v = obj[u];\n      if (v === undefined || v === null) continue;\n      normalized[normalizer(u)] = asNumber(v);\n    }\n  }\n  return normalized;\n}\n\nexport function formatOffset(offset, format) {\n  const hours = Math.trunc(Math.abs(offset / 60)),\n    minutes = Math.trunc(Math.abs(offset % 60)),\n    sign = offset >= 0 ? \"+\" : \"-\";\n\n  switch (format) {\n    case \"short\":\n      return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n    case \"narrow\":\n      return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n    case \"techie\":\n      return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n    default:\n      throw new RangeError(`Value format ${format} is out of range for property format`);\n  }\n}\n\nexport function timeObject(obj) {\n  return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n\nexport const ianaRegex = /[A-Za-z_+-]{1,256}(:?\\/[A-Za-z_+-]{1,256}(\\/[A-Za-z_+-]{1,256})?)?/;\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n  return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n  \"January\",\n  \"February\",\n  \"March\",\n  \"April\",\n  \"May\",\n  \"June\",\n  \"July\",\n  \"August\",\n  \"September\",\n  \"October\",\n  \"November\",\n  \"December\"\n];\n\nexport const monthsShort = [\n  \"Jan\",\n  \"Feb\",\n  \"Mar\",\n  \"Apr\",\n  \"May\",\n  \"Jun\",\n  \"Jul\",\n  \"Aug\",\n  \"Sep\",\n  \"Oct\",\n  \"Nov\",\n  \"Dec\"\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...monthsNarrow];\n    case \"short\":\n      return [...monthsShort];\n    case \"long\":\n      return [...monthsLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n    case \"2-digit\":\n      return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n    default:\n      return null;\n  }\n}\n\nexport const weekdaysLong = [\n  \"Monday\",\n  \"Tuesday\",\n  \"Wednesday\",\n  \"Thursday\",\n  \"Friday\",\n  \"Saturday\",\n  \"Sunday\"\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...weekdaysNarrow];\n    case \"short\":\n      return [...weekdaysShort];\n    case \"long\":\n      return [...weekdaysLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n    default:\n      return null;\n  }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...erasNarrow];\n    case \"short\":\n      return [...erasShort];\n    case \"long\":\n      return [...erasLong];\n    default:\n      return null;\n  }\n}\n\nexport function meridiemForDateTime(dt) {\n  return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n  return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n  return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n  return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n  const units = {\n    years: [\"year\", \"yr.\"],\n    quarters: [\"quarter\", \"qtr.\"],\n    months: [\"month\", \"mo.\"],\n    weeks: [\"week\", \"wk.\"],\n    days: [\"day\", \"day\", \"days\"],\n    hours: [\"hour\", \"hr.\"],\n    minutes: [\"minute\", \"min.\"],\n    seconds: [\"second\", \"sec.\"]\n  };\n\n  const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n  if (numeric === \"auto\" && lastable) {\n    const isDay = unit === \"days\";\n    switch (count) {\n      case 1:\n        return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n      case -1:\n        return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n      case 0:\n        return isDay ? \"today\" : `this ${units[unit][0]}`;\n      default: // fall through\n    }\n  }\n\n  const isInPast = Object.is(count, -0) || count < 0,\n    fmtValue = Math.abs(count),\n    singular = fmtValue === 1,\n    lilUnits = units[unit],\n    fmtUnit = narrow\n      ? singular\n        ? lilUnits[1]\n        : lilUnits[2] || lilUnits[1]\n      : singular\n        ? units[unit][0]\n        : unit;\n  return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n  // these all have the offsets removed because we don't have access to them\n  // without all the intl stuff this is backfilling\n  const filtered = pick(knownFormat, [\n      \"weekday\",\n      \"era\",\n      \"year\",\n      \"month\",\n      \"day\",\n      \"hour\",\n      \"minute\",\n      \"second\",\n      \"timeZoneName\",\n      \"hour12\"\n    ]),\n    key = stringify(filtered),\n    dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n  switch (key) {\n    case stringify(Formats.DATE_SHORT):\n      return \"M/d/yyyy\";\n    case stringify(Formats.DATE_MED):\n      return \"LLL d, yyyy\";\n    case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n      return \"EEE, LLL d, yyyy\";\n    case stringify(Formats.DATE_FULL):\n      return \"LLLL d, yyyy\";\n    case stringify(Formats.DATE_HUGE):\n      return \"EEEE, LLLL d, yyyy\";\n    case stringify(Formats.TIME_SIMPLE):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_SECONDS):\n      return \"h:mm:ss a\";\n    case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_LONG_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_24_SIMPLE):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_SECONDS):\n      return \"HH:mm:ss\";\n    case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.DATETIME_SHORT):\n      return \"M/d/yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_MED):\n      return \"LLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL):\n      return \"LLLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_HUGE):\n      return dateTimeHuge;\n    case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n      return \"M/d/yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n      return \"LLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n      return \"EEE, d LLL yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n      return \"LLLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n      return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n    default:\n      return dateTimeHuge;\n  }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { hasFormatToParts, padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n  let s = \"\";\n  for (const token of splits) {\n    if (token.literal) {\n      s += token.val;\n    } else {\n      s += tokenToString(token.val);\n    }\n  }\n  return s;\n}\n\nconst macroTokenToFormatOpts = {\n  D: Formats.DATE_SHORT,\n  DD: Formats.DATE_MED,\n  DDD: Formats.DATE_FULL,\n  DDDD: Formats.DATE_HUGE,\n  t: Formats.TIME_SIMPLE,\n  tt: Formats.TIME_WITH_SECONDS,\n  ttt: Formats.TIME_WITH_SHORT_OFFSET,\n  tttt: Formats.TIME_WITH_LONG_OFFSET,\n  T: Formats.TIME_24_SIMPLE,\n  TT: Formats.TIME_24_WITH_SECONDS,\n  TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n  TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n  f: Formats.DATETIME_SHORT,\n  ff: Formats.DATETIME_MED,\n  fff: Formats.DATETIME_FULL,\n  ffff: Formats.DATETIME_HUGE,\n  F: Formats.DATETIME_SHORT_WITH_SECONDS,\n  FF: Formats.DATETIME_MED_WITH_SECONDS,\n  FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n  FFFF: Formats.DATETIME_HUGE_WITH_SECONDS\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n  static create(locale, opts = {}) {\n    return new Formatter(locale, opts);\n  }\n\n  static parseFormat(fmt) {\n    let current = null,\n      currentFull = \"\",\n      bracketed = false;\n    const splits = [];\n    for (let i = 0; i < fmt.length; i++) {\n      const c = fmt.charAt(i);\n      if (c === \"'\") {\n        if (currentFull.length > 0) {\n          splits.push({ literal: bracketed, val: currentFull });\n        }\n        current = null;\n        currentFull = \"\";\n        bracketed = !bracketed;\n      } else if (bracketed) {\n        currentFull += c;\n      } else if (c === current) {\n        currentFull += c;\n      } else {\n        if (currentFull.length > 0) {\n          splits.push({ literal: false, val: currentFull });\n        }\n        currentFull = c;\n        current = c;\n      }\n    }\n\n    if (currentFull.length > 0) {\n      splits.push({ literal: bracketed, val: currentFull });\n    }\n\n    return splits;\n  }\n\n  static macroTokenToFormatOpts(token) {\n    return macroTokenToFormatOpts[token];\n  }\n\n  constructor(locale, formatOpts) {\n    this.opts = formatOpts;\n    this.loc = locale;\n    this.systemLoc = null;\n  }\n\n  formatWithSystemDefault(dt, opts) {\n    if (this.systemLoc === null) {\n      this.systemLoc = this.loc.redefaultToSystem();\n    }\n    const df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n    return df.format();\n  }\n\n  formatDateTime(dt, opts = {}) {\n    const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n    return df.format();\n  }\n\n  formatDateTimeParts(dt, opts = {}) {\n    const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n    return df.formatToParts();\n  }\n\n  resolvedOptions(dt, opts = {}) {\n    const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n    return df.resolvedOptions();\n  }\n\n  num(n, p = 0) {\n    // we get some perf out of doing this here, annoyingly\n    if (this.opts.forceSimple) {\n      return padStart(n, p);\n    }\n\n    const opts = Object.assign({}, this.opts);\n\n    if (p > 0) {\n      opts.padTo = p;\n    }\n\n    return this.loc.numberFormatter(opts).format(n);\n  }\n\n  formatDateTimeFromString(dt, fmt) {\n    const knownEnglish = this.loc.listingMode() === \"en\",\n      useDateTimeFormatter =\n        this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\" && hasFormatToParts(),\n      string = (opts, extract) => this.loc.extract(dt, opts, extract),\n      formatOffset = opts => {\n        if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n          return \"Z\";\n        }\n\n        return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n      },\n      meridiem = () =>\n        knownEnglish\n          ? English.meridiemForDateTime(dt)\n          : string({ hour: \"numeric\", hour12: true }, \"dayperiod\"),\n      month = (length, standalone) =>\n        knownEnglish\n          ? English.monthForDateTime(dt, length)\n          : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n      weekday = (length, standalone) =>\n        knownEnglish\n          ? English.weekdayForDateTime(dt, length)\n          : string(\n              standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n              \"weekday\"\n            ),\n      maybeMacro = token => {\n        const formatOpts = Formatter.macroTokenToFormatOpts(token);\n        if (formatOpts) {\n          return this.formatWithSystemDefault(dt, formatOpts);\n        } else {\n          return token;\n        }\n      },\n      era = length =>\n        knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n      tokenToString = token => {\n        // Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles\n        switch (token) {\n          // ms\n          case \"S\":\n            return this.num(dt.millisecond);\n          case \"u\":\n          // falls through\n          case \"SSS\":\n            return this.num(dt.millisecond, 3);\n          // seconds\n          case \"s\":\n            return this.num(dt.second);\n          case \"ss\":\n            return this.num(dt.second, 2);\n          // minutes\n          case \"m\":\n            return this.num(dt.minute);\n          case \"mm\":\n            return this.num(dt.minute, 2);\n          // hours\n          case \"h\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n          case \"hh\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n          case \"H\":\n            return this.num(dt.hour);\n          case \"HH\":\n            return this.num(dt.hour, 2);\n          // offset\n          case \"Z\":\n            // like +6\n            return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n          case \"ZZ\":\n            // like +06:00\n            return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n          case \"ZZZ\":\n            // like +0600\n            return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n          case \"ZZZZ\":\n            // like EST\n            return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n          case \"ZZZZZ\":\n            // like Eastern Standard Time\n            return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n          // zone\n          case \"z\":\n            // like America/New_York\n            return dt.zoneName;\n          // meridiems\n          case \"a\":\n            return meridiem();\n          // dates\n          case \"d\":\n            return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n          case \"dd\":\n            return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n          // weekdays - standalone\n          case \"c\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"ccc\":\n            // like 'Tues'\n            return weekday(\"short\", true);\n          case \"cccc\":\n            // like 'Tuesday'\n            return weekday(\"long\", true);\n          case \"ccccc\":\n            // like 'T'\n            return weekday(\"narrow\", true);\n          // weekdays - format\n          case \"E\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"EEE\":\n            // like 'Tues'\n            return weekday(\"short\", false);\n          case \"EEEE\":\n            // like 'Tuesday'\n            return weekday(\"long\", false);\n          case \"EEEEE\":\n            // like 'T'\n            return weekday(\"narrow\", false);\n          // months - standalone\n          case \"L\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"LL\":\n            // like 01, doesn't seem to work\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"LLL\":\n            // like Jan\n            return month(\"short\", true);\n          case \"LLLL\":\n            // like January\n            return month(\"long\", true);\n          case \"LLLLL\":\n            // like J\n            return month(\"narrow\", true);\n          // months - format\n          case \"M\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"MM\":\n            // like 01\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"MMM\":\n            // like Jan\n            return month(\"short\", false);\n          case \"MMMM\":\n            // like January\n            return month(\"long\", false);\n          case \"MMMMM\":\n            // like J\n            return month(\"narrow\", false);\n          // years\n          case \"y\":\n            // like 2014\n            return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n          case \"yy\":\n            // like 14\n            return useDateTimeFormatter\n              ? string({ year: \"2-digit\" }, \"year\")\n              : this.num(dt.year.toString().slice(-2), 2);\n          case \"yyyy\":\n            // like 0012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 4);\n          case \"yyyyyy\":\n            // like 000012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 6);\n          // eras\n          case \"G\":\n            // like AD\n            return era(\"short\");\n          case \"GG\":\n            // like Anno Domini\n            return era(\"long\");\n          case \"GGGGG\":\n            return era(\"narrow\");\n          case \"kk\":\n            return this.num(dt.weekYear.toString().slice(-2), 2);\n          case \"kkkk\":\n            return this.num(dt.weekYear, 4);\n          case \"W\":\n            return this.num(dt.weekNumber);\n          case \"WW\":\n            return this.num(dt.weekNumber, 2);\n          case \"o\":\n            return this.num(dt.ordinal);\n          case \"ooo\":\n            return this.num(dt.ordinal, 3);\n          case \"q\":\n            // like 1\n            return this.num(dt.quarter);\n          case \"qq\":\n            // like 01\n            return this.num(dt.quarter, 2);\n          case \"X\":\n            return this.num(Math.floor(dt.ts / 1000));\n          case \"x\":\n            return this.num(dt.ts);\n          default:\n            return maybeMacro(token);\n        }\n      };\n\n    return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n  }\n\n  formatDurationFromString(dur, fmt) {\n    const tokenToField = token => {\n        switch (token[0]) {\n          case \"S\":\n            return \"millisecond\";\n          case \"s\":\n            return \"second\";\n          case \"m\":\n            return \"minute\";\n          case \"h\":\n            return \"hour\";\n          case \"d\":\n            return \"day\";\n          case \"M\":\n            return \"month\";\n          case \"y\":\n            return \"year\";\n          default:\n            return null;\n        }\n      },\n      tokenToString = lildur => token => {\n        const mapped = tokenToField(token);\n        if (mapped) {\n          return this.num(lildur.get(mapped), token.length);\n        } else {\n          return token;\n        }\n      },\n      tokens = Formatter.parseFormat(fmt),\n      realTokens = tokens.reduce(\n        (found, { literal, val }) => (literal ? found : found.concat(val)),\n        []\n      ),\n      collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter(t => t));\n    return stringifyTokens(tokens, tokenToString(collapsed));\n  }\n}\n","export default class Invalid {\n  constructor(reason, explanation) {\n    this.reason = reason;\n    this.explanation = explanation;\n  }\n\n  toMessage() {\n    if (this.explanation) {\n      return `${this.reason}: ${this.explanation}`;\n    } else {\n      return this.reason;\n    }\n  }\n}\n","/* eslint no-unused-vars: \"off\" */\nimport { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n  /**\n   * The type of zone\n   * @abstract\n   * @type {string}\n   */\n  get type() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * The name of this zone.\n   * @abstract\n   * @type {string}\n   */\n  get name() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year.\n   * @abstract\n   * @type {boolean}\n   */\n  get universal() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  offsetName(ts, opts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  offset(ts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone\n   * @abstract\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is valid.\n   * @abstract\n   * @type {boolean}\n   */\n  get isValid() {\n    throw new ZoneIsAbstractError();\n  }\n}\n","import { formatOffset, parseZoneInfo, hasIntl } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class LocalZone extends Zone {\n  /**\n   * Get a singleton instance of the local zone\n   * @return {LocalZone}\n   */\n  static get instance() {\n    if (singleton === null) {\n      singleton = new LocalZone();\n    }\n    return singleton;\n  }\n\n  /** @override **/\n  get type() {\n    return \"local\";\n  }\n\n  /** @override **/\n  get name() {\n    if (hasIntl()) {\n      return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n    } else return \"local\";\n  }\n\n  /** @override **/\n  get universal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale);\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /** @override **/\n  offset(ts) {\n    return -new Date(ts).getTimezoneOffset();\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"local\";\n  }\n\n  /** @override **/\n  get isValid() {\n    return true;\n  }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, ianaRegex, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst matchingRegex = RegExp(`^${ianaRegex.source}$`);\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n  if (!dtfCache[zone]) {\n    dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone: zone,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\"\n    });\n  }\n  return dtfCache[zone];\n}\n\nconst typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  hour: 3,\n  minute: 4,\n  second: 5\n};\n\nfunction hackyOffset(dtf, date) {\n  const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n    parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n    [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed;\n  return [fYear, fMonth, fDay, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n  const formatted = dtf.formatToParts(date),\n    filled = [];\n  for (let i = 0; i < formatted.length; i++) {\n    const { type, value } = formatted[i],\n      pos = typeToPos[type];\n\n    if (!isUndefined(pos)) {\n      filled[pos] = parseInt(value, 10);\n    }\n  }\n  return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n  /**\n   * @param {string} name - Zone name\n   * @return {IANAZone}\n   */\n  static create(name) {\n    if (!ianaZoneCache[name]) {\n      ianaZoneCache[name] = new IANAZone(name);\n    }\n    return ianaZoneCache[name];\n  }\n\n  /**\n   * Reset local caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCache() {\n    ianaZoneCache = {};\n    dtfCache = {};\n  }\n\n  /**\n   * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n   * @param {string} s - The string to check validity on\n   * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n   * @example IANAZone.isValidSpecifier(\"Fantasia/Castle\") //=> true\n   * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n   * @return {boolean}\n   */\n  static isValidSpecifier(s) {\n    return !!(s && s.match(matchingRegex));\n  }\n\n  /**\n   * Returns whether the provided string identifies a real zone\n   * @param {string} zone - The string to check\n   * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n   * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n   * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n   * @return {boolean}\n   */\n  static isValidZone(zone) {\n    try {\n      new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  // Etc/GMT+8 -> -480\n  /** @ignore */\n  static parseGMTOffset(specifier) {\n    if (specifier) {\n      const match = specifier.match(/^Etc\\/GMT(0|[+-]\\d{1,2})$/i);\n      if (match) {\n        return -60 * parseInt(match[1]);\n      }\n    }\n    return null;\n  }\n\n  constructor(name) {\n    super();\n    /** @private **/\n    this.zoneName = name;\n    /** @private **/\n    this.valid = IANAZone.isValidZone(name);\n  }\n\n  /** @override **/\n  get type() {\n    return \"iana\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.zoneName;\n  }\n\n  /** @override **/\n  get universal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale, this.name);\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /** @override **/\n  offset(ts) {\n    const date = new Date(ts);\n\n    if (isNaN(date)) return NaN;\n\n    const dtf = makeDTF(this.name),\n      [year, month, day, hour, minute, second] = dtf.formatToParts\n        ? partsOffset(dtf, date)\n        : hackyOffset(dtf, date),\n      // work around https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n      adjustedHour = hour === 24 ? 0 : hour;\n\n    const asUTC = objToLocalTS({\n      year,\n      month,\n      day,\n      hour: adjustedHour,\n      minute,\n      second,\n      millisecond: 0\n    });\n\n    let asTS = +date;\n    const over = asTS % 1000;\n    asTS -= over >= 0 ? over : 1000 + over;\n    return (asUTC - asTS) / (60 * 1000);\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"iana\" && otherZone.name === this.name;\n  }\n\n  /** @override **/\n  get isValid() {\n    return this.valid;\n  }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n  /**\n   * Get a singleton instance of UTC\n   * @return {FixedOffsetZone}\n   */\n  static get utcInstance() {\n    if (singleton === null) {\n      singleton = new FixedOffsetZone(0);\n    }\n    return singleton;\n  }\n\n  /**\n   * Get an instance with a specified offset\n   * @param {number} offset - The offset in minutes\n   * @return {FixedOffsetZone}\n   */\n  static instance(offset) {\n    return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n  }\n\n  /**\n   * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n   * @param {string} s - The offset string to parse\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n   * @return {FixedOffsetZone}\n   */\n  static parseSpecifier(s) {\n    if (s) {\n      const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n      if (r) {\n        return new FixedOffsetZone(signedOffset(r[1], r[2]));\n      }\n    }\n    return null;\n  }\n\n  constructor(offset) {\n    super();\n    /** @private **/\n    this.fixed = offset;\n  }\n\n  /** @override **/\n  get type() {\n    return \"fixed\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n  }\n\n  /** @override **/\n  offsetName() {\n    return this.name;\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.fixed, format);\n  }\n\n  /** @override **/\n  get universal() {\n    return true;\n  }\n\n  /** @override **/\n  offset() {\n    return this.fixed;\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n  }\n\n  /** @override **/\n  get isValid() {\n    return true;\n  }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n  constructor(zoneName) {\n    super();\n    /**  @private */\n    this.zoneName = zoneName;\n  }\n\n  /** @override **/\n  get type() {\n    return \"invalid\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.zoneName;\n  }\n\n  /** @override **/\n  get universal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName() {\n    return null;\n  }\n\n  /** @override **/\n  formatOffset() {\n    return \"\";\n  }\n\n  /** @override **/\n  offset() {\n    return NaN;\n  }\n\n  /** @override **/\n  equals() {\n    return false;\n  }\n\n  /** @override **/\n  get isValid() {\n    return false;\n  }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\n\nexport function normalizeZone(input, defaultZone) {\n  let offset;\n  if (isUndefined(input) || input === null) {\n    return defaultZone;\n  } else if (input instanceof Zone) {\n    return input;\n  } else if (isString(input)) {\n    const lowered = input.toLowerCase();\n    if (lowered === \"local\") return defaultZone;\n    else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n    else if ((offset = IANAZone.parseGMTOffset(input)) != null) {\n      // handle Etc/GMT-4, which V8 chokes on\n      return FixedOffsetZone.instance(offset);\n    } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);\n    else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input);\n  } else if (isNumber(input)) {\n    return FixedOffsetZone.instance(input);\n  } else if (typeof input === \"object\" && input.offset && typeof input.offset === \"number\") {\n    // This is dumb, but the instanceof check above doesn't seem to really work\n    // so we're duck checking it\n    return input;\n  } else {\n    return new InvalidZone(input);\n  }\n}\n","import LocalZone from \"./zones/localZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nlet now = () => Date.now(),\n  defaultZone = null, // not setting this directly to LocalZone.instance bc loading order issues\n  defaultLocale = null,\n  defaultNumberingSystem = null,\n  defaultOutputCalendar = null,\n  throwOnInvalid = false;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n  /**\n   * Get the callback for returning the current timestamp.\n   * @type {function}\n   */\n  static get now() {\n    return now;\n  }\n\n  /**\n   * Set the callback for returning the current timestamp.\n   * The function should return a number, which will be interpreted as an Epoch millisecond count\n   * @type {function}\n   * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n   * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n   */\n  static set now(n) {\n    now = n;\n  }\n\n  /**\n   * Get the default time zone to create DateTimes in.\n   * @type {string}\n   */\n  static get defaultZoneName() {\n    return Settings.defaultZone.name;\n  }\n\n  /**\n   * Set the default time zone to create DateTimes in. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultZoneName(z) {\n    if (!z) {\n      defaultZone = null;\n    } else {\n      defaultZone = normalizeZone(z);\n    }\n  }\n\n  /**\n   * Get the default time zone object to create DateTimes in. Does not affect existing instances.\n   * @type {Zone}\n   */\n  static get defaultZone() {\n    return defaultZone || LocalZone.instance;\n  }\n\n  /**\n   * Get the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultLocale() {\n    return defaultLocale;\n  }\n\n  /**\n   * Set the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultLocale(locale) {\n    defaultLocale = locale;\n  }\n\n  /**\n   * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultNumberingSystem() {\n    return defaultNumberingSystem;\n  }\n\n  /**\n   * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultNumberingSystem(numberingSystem) {\n    defaultNumberingSystem = numberingSystem;\n  }\n\n  /**\n   * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultOutputCalendar() {\n    return defaultOutputCalendar;\n  }\n\n  /**\n   * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultOutputCalendar(outputCalendar) {\n    defaultOutputCalendar = outputCalendar;\n  }\n\n  /**\n   * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static get throwOnInvalid() {\n    return throwOnInvalid;\n  }\n\n  /**\n   * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static set throwOnInvalid(t) {\n    throwOnInvalid = t;\n  }\n\n  /**\n   * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCaches() {\n    Locale.resetCache();\n    IANAZone.resetCache();\n  }\n}\n","import { hasFormatToParts, hasIntl, padStart, roundTo, hasRelative } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport Formatter from \"./formatter.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlDTCache[key];\n  if (!dtf) {\n    dtf = new Intl.DateTimeFormat(locString, opts);\n    intlDTCache[key] = dtf;\n  }\n  return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let inf = intlNumCache[key];\n  if (!inf) {\n    inf = new Intl.NumberFormat(locString, opts);\n    intlNumCache[key] = inf;\n  }\n  return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n  const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n  const key = JSON.stringify([locString, cacheKeyOpts]);\n  let inf = intlRelCache[key];\n  if (!inf) {\n    inf = new Intl.RelativeTimeFormat(locString, opts);\n    intlRelCache[key] = inf;\n  }\n  return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n  if (sysLocaleCache) {\n    return sysLocaleCache;\n  } else if (hasIntl()) {\n    const computedSys = new Intl.DateTimeFormat().resolvedOptions().locale;\n    // node sometimes defaults to \"und\". Override that because that is dumb\n    sysLocaleCache = !computedSys || computedSys === \"und\" ? \"en-US\" : computedSys;\n    return sysLocaleCache;\n  } else {\n    sysLocaleCache = \"en-US\";\n    return sysLocaleCache;\n  }\n}\n\nfunction parseLocaleString(localeStr) {\n  // I really want to avoid writing a BCP 47 parser\n  // see, e.g. https://github.com/wooorm/bcp-47\n  // Instead, we'll do this:\n\n  // a) if the string has no -u extensions, just leave it alone\n  // b) if it does, use Intl to resolve everything\n  // c) if Intl fails, try again without the -u\n\n  const uIndex = localeStr.indexOf(\"-u-\");\n  if (uIndex === -1) {\n    return [localeStr];\n  } else {\n    let options;\n    const smaller = localeStr.substring(0, uIndex);\n    try {\n      options = getCachedDTF(localeStr).resolvedOptions();\n    } catch (e) {\n      options = getCachedDTF(smaller).resolvedOptions();\n    }\n\n    const { numberingSystem, calendar } = options;\n    // return the smaller one so that we can append the calendar and numbering overrides to it\n    return [smaller, numberingSystem, calendar];\n  }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n  if (hasIntl()) {\n    if (outputCalendar || numberingSystem) {\n      localeStr += \"-u\";\n\n      if (outputCalendar) {\n        localeStr += `-ca-${outputCalendar}`;\n      }\n\n      if (numberingSystem) {\n        localeStr += `-nu-${numberingSystem}`;\n      }\n      return localeStr;\n    } else {\n      return localeStr;\n    }\n  } else {\n    return [];\n  }\n}\n\nfunction mapMonths(f) {\n  const ms = [];\n  for (let i = 1; i <= 12; i++) {\n    const dt = DateTime.utc(2016, i, 1);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction mapWeekdays(f) {\n  const ms = [];\n  for (let i = 1; i <= 7; i++) {\n    const dt = DateTime.utc(2016, 11, 13 + i);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction listStuff(loc, length, defaultOK, englishFn, intlFn) {\n  const mode = loc.listingMode(defaultOK);\n\n  if (mode === \"error\") {\n    return null;\n  } else if (mode === \"en\") {\n    return englishFn(length);\n  } else {\n    return intlFn(length);\n  }\n}\n\nfunction supportsFastNumbers(loc) {\n  if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n    return false;\n  } else {\n    return (\n      loc.numberingSystem === \"latn\" ||\n      !loc.locale ||\n      loc.locale.startsWith(\"en\") ||\n      (hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\")\n    );\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n  constructor(intl, forceSimple, opts) {\n    this.padTo = opts.padTo || 0;\n    this.floor = opts.floor || false;\n\n    if (!forceSimple && hasIntl()) {\n      const intlOpts = { useGrouping: false };\n      if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n      this.inf = getCachedINF(intl, intlOpts);\n    }\n  }\n\n  format(i) {\n    if (this.inf) {\n      const fixed = this.floor ? Math.floor(i) : i;\n      return this.inf.format(fixed);\n    } else {\n      // to match the browser's numberformatter defaults\n      const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n      return padStart(fixed, this.padTo);\n    }\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n  constructor(dt, intl, opts) {\n    this.opts = opts;\n    this.hasIntl = hasIntl();\n\n    let z;\n    if (dt.zone.universal && this.hasIntl) {\n      // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n      // That is why fixed-offset TZ is set to that unless it is:\n      // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n      // 2. Unsupported by the browser:\n      //    - some do not support Etc/\n      //    - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n      const gmtOffset = -1 * (dt.offset / 60);\n      const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n      const isOffsetZoneSupported = IANAZone.isValidZone(offsetZ);\n      if (dt.offset !== 0 && isOffsetZoneSupported) {\n        z = offsetZ;\n        this.dt = dt;\n      } else {\n        // Not all fixed-offset zones like Etc/+4:30 are present in tzdata.\n        // So we have to make do. Two cases:\n        // 1. The format options tell us to show the zone. We can't do that, so the best\n        // we can do is format the date in UTC.\n        // 2. The format options don't tell us to show the zone. Then we can adjust them\n        // the time and tell the formatter to show it to us in UTC, so that the time is right\n        // and the bad zone doesn't show up.\n        z = \"UTC\";\n        if (opts.timeZoneName) {\n          this.dt = dt;\n        } else {\n          this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);\n        }\n      }\n    } else if (dt.zone.type === \"local\") {\n      this.dt = dt;\n    } else {\n      this.dt = dt;\n      z = dt.zone.name;\n    }\n\n    if (this.hasIntl) {\n      const intlOpts = Object.assign({}, this.opts);\n      if (z) {\n        intlOpts.timeZone = z;\n      }\n      this.dtf = getCachedDTF(intl, intlOpts);\n    }\n  }\n\n  format() {\n    if (this.hasIntl) {\n      return this.dtf.format(this.dt.toJSDate());\n    } else {\n      const tokenFormat = English.formatString(this.opts),\n        loc = Locale.create(\"en-US\");\n      return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat);\n    }\n  }\n\n  formatToParts() {\n    if (this.hasIntl && hasFormatToParts()) {\n      return this.dtf.formatToParts(this.dt.toJSDate());\n    } else {\n      // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings\n      // and IMO it's too weird to have an uncanny valley like that\n      return [];\n    }\n  }\n\n  resolvedOptions() {\n    if (this.hasIntl) {\n      return this.dtf.resolvedOptions();\n    } else {\n      return {\n        locale: \"en-US\",\n        numberingSystem: \"latn\",\n        outputCalendar: \"gregory\"\n      };\n    }\n  }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n  constructor(intl, isEnglish, opts) {\n    this.opts = Object.assign({ style: \"long\" }, opts);\n    if (!isEnglish && hasRelative()) {\n      this.rtf = getCachedRTF(intl, opts);\n    }\n  }\n\n  format(count, unit) {\n    if (this.rtf) {\n      return this.rtf.format(count, unit);\n    } else {\n      return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n    }\n  }\n\n  formatToParts(count, unit) {\n    if (this.rtf) {\n      return this.rtf.formatToParts(count, unit);\n    } else {\n      return [];\n    }\n  }\n}\n\n/**\n * @private\n */\n\nexport default class Locale {\n  static fromOpts(opts) {\n    return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n  }\n\n  static create(locale, numberingSystem, outputCalendar, defaultToEN = false) {\n    const specifiedLocale = locale || Settings.defaultLocale,\n      // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n      localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale()),\n      numberingSystemR = numberingSystem || Settings.defaultNumberingSystem,\n      outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n    return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n  }\n\n  static resetCache() {\n    sysLocaleCache = null;\n    intlDTCache = {};\n    intlNumCache = {};\n    intlRelCache = {};\n  }\n\n  static fromObject({ locale, numberingSystem, outputCalendar } = {}) {\n    return Locale.create(locale, numberingSystem, outputCalendar);\n  }\n\n  constructor(locale, numbering, outputCalendar, specifiedLocale) {\n    const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n    this.locale = parsedLocale;\n    this.numberingSystem = numbering || parsedNumberingSystem || null;\n    this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n    this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n    this.weekdaysCache = { format: {}, standalone: {} };\n    this.monthsCache = { format: {}, standalone: {} };\n    this.meridiemCache = null;\n    this.eraCache = {};\n\n    this.specifiedLocale = specifiedLocale;\n    this.fastNumbersCached = null;\n  }\n\n  get fastNumbers() {\n    if (this.fastNumbersCached == null) {\n      this.fastNumbersCached = supportsFastNumbers(this);\n    }\n\n    return this.fastNumbersCached;\n  }\n\n  listingMode(defaultOK = true) {\n    const intl = hasIntl(),\n      hasFTP = intl && hasFormatToParts(),\n      isActuallyEn = this.isEnglish(),\n      hasNoWeirdness =\n        (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n        (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n\n    if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) {\n      return \"error\";\n    } else if (!hasFTP || (isActuallyEn && hasNoWeirdness)) {\n      return \"en\";\n    } else {\n      return \"intl\";\n    }\n  }\n\n  clone(alts) {\n    if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n      return this;\n    } else {\n      return Locale.create(\n        alts.locale || this.specifiedLocale,\n        alts.numberingSystem || this.numberingSystem,\n        alts.outputCalendar || this.outputCalendar,\n        alts.defaultToEN || false\n      );\n    }\n  }\n\n  redefaultToEN(alts = {}) {\n    return this.clone(Object.assign({}, alts, { defaultToEN: true }));\n  }\n\n  redefaultToSystem(alts = {}) {\n    return this.clone(Object.assign({}, alts, { defaultToEN: false }));\n  }\n\n  months(length, format = false, defaultOK = true) {\n    return listStuff(this, length, defaultOK, English.months, () => {\n      const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.monthsCache[formatStr][length]) {\n        this.monthsCache[formatStr][length] = mapMonths(dt => this.extract(dt, intl, \"month\"));\n      }\n      return this.monthsCache[formatStr][length];\n    });\n  }\n\n  weekdays(length, format = false, defaultOK = true) {\n    return listStuff(this, length, defaultOK, English.weekdays, () => {\n      const intl = format\n          ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n          : { weekday: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.weekdaysCache[formatStr][length]) {\n        this.weekdaysCache[formatStr][length] = mapWeekdays(dt =>\n          this.extract(dt, intl, \"weekday\")\n        );\n      }\n      return this.weekdaysCache[formatStr][length];\n    });\n  }\n\n  meridiems(defaultOK = true) {\n    return listStuff(\n      this,\n      undefined,\n      defaultOK,\n      () => English.meridiems,\n      () => {\n        // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n        // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n        if (!this.meridiemCache) {\n          const intl = { hour: \"numeric\", hour12: true };\n          this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n            dt => this.extract(dt, intl, \"dayperiod\")\n          );\n        }\n\n        return this.meridiemCache;\n      }\n    );\n  }\n\n  eras(length, defaultOK = true) {\n    return listStuff(this, length, defaultOK, English.eras, () => {\n      const intl = { era: length };\n\n      // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n      // to definitely enumerate them.\n      if (!this.eraCache[length]) {\n        this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(dt =>\n          this.extract(dt, intl, \"era\")\n        );\n      }\n\n      return this.eraCache[length];\n    });\n  }\n\n  extract(dt, intlOpts, field) {\n    const df = this.dtFormatter(dt, intlOpts),\n      results = df.formatToParts(),\n      matching = results.find(m => m.type.toLowerCase() === field);\n    return matching ? matching.value : null;\n  }\n\n  numberFormatter(opts = {}) {\n    // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n    // (in contrast, the rest of the condition is used heavily)\n    return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n  }\n\n  dtFormatter(dt, intlOpts = {}) {\n    return new PolyDateFormatter(dt, this.intl, intlOpts);\n  }\n\n  relFormatter(opts = {}) {\n    return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n  }\n\n  isEnglish() {\n    return (\n      this.locale === \"en\" ||\n      this.locale.toLowerCase() === \"en-us\" ||\n      (hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\"))\n    );\n  }\n\n  equals(other) {\n    return (\n      this.locale === other.locale &&\n      this.numberingSystem === other.numberingSystem &&\n      this.outputCalendar === other.outputCalendar\n    );\n  }\n}\n","import {\n  untruncateYear,\n  signedOffset,\n  parseInteger,\n  parseMillis,\n  ianaRegex,\n  isUndefined\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nfunction combineRegexes(...regexes) {\n  const full = regexes.reduce((f, r) => f + r.source, \"\");\n  return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n  return m =>\n    extractors\n      .reduce(\n        ([mergedVals, mergedZone, cursor], ex) => {\n          const [val, zone, next] = ex(m, cursor);\n          return [Object.assign(mergedVals, val), mergedZone || zone, next];\n        },\n        [{}, null, 1]\n      )\n      .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n  if (s == null) {\n    return [null, null];\n  }\n\n  for (const [regex, extractor] of patterns) {\n    const m = regex.exec(s);\n    if (m) {\n      return extractor(m);\n    }\n  }\n  return [null, null];\n}\n\nfunction simpleParse(...keys) {\n  return (match, cursor) => {\n    const ret = {};\n    let i;\n\n    for (i = 0; i < keys.length; i++) {\n      ret[keys[i]] = parseInteger(match[cursor + i]);\n    }\n    return [ret, null, cursor + i];\n  };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/,\n  isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/,\n  isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${offsetRegex.source}?`),\n  isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`),\n  isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/,\n  isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/,\n  isoOrdinalRegex = /(\\d{4})-?(\\d{3})/,\n  extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\"),\n  extractISOOrdinalData = simpleParse(\"year\", \"ordinal\"),\n  sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/, // dumbed-down version of the ISO one\n  sqlTimeRegex = RegExp(\n    `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n  ),\n  sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n  const m = match[pos];\n  return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n  const item = {\n    year: int(match, cursor),\n    month: int(match, cursor + 1, 1),\n    day: int(match, cursor + 2, 1)\n  };\n\n  return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n  const item = {\n    hours: int(match, cursor, 0),\n    minutes: int(match, cursor + 1, 0),\n    seconds: int(match, cursor + 2, 0),\n    milliseconds: parseMillis(match[cursor + 3])\n  };\n\n  return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n  const local = !match[cursor] && !match[cursor + 1],\n    fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n    zone = local ? null : FixedOffsetZone.instance(fullOffset);\n  return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n  const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n  return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration = /^-?P(?:(?:(-?\\d{1,9})Y)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,9})W)?(?:(-?\\d{1,9})D)?(?:T(?:(-?\\d{1,9})H)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,9}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n  const [\n    s,\n    yearStr,\n    monthStr,\n    weekStr,\n    dayStr,\n    hourStr,\n    minuteStr,\n    secondStr,\n    millisecondsStr\n  ] = match;\n\n  const hasNegativePrefix = s[0] === \"-\";\n  const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n  const maybeNegate = (num, force = false) =>\n    num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n  return [\n    {\n      years: maybeNegate(parseInteger(yearStr)),\n      months: maybeNegate(parseInteger(monthStr)),\n      weeks: maybeNegate(parseInteger(weekStr)),\n      days: maybeNegate(parseInteger(dayStr)),\n      hours: maybeNegate(parseInteger(hourStr)),\n      minutes: maybeNegate(parseInteger(minuteStr)),\n      seconds: maybeNegate(parseInteger(secondStr), secondStr === \"-0\"),\n      milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds)\n    }\n  ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n  GMT: 0,\n  EDT: -4 * 60,\n  EST: -5 * 60,\n  CDT: -5 * 60,\n  CST: -6 * 60,\n  MDT: -6 * 60,\n  MST: -7 * 60,\n  PDT: -7 * 60,\n  PST: -8 * 60\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n  const result = {\n    year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n    month: English.monthsShort.indexOf(monthStr) + 1,\n    day: parseInteger(dayStr),\n    hour: parseInteger(hourStr),\n    minute: parseInteger(minuteStr)\n  };\n\n  if (secondStr) result.second = parseInteger(secondStr);\n  if (weekdayStr) {\n    result.weekday =\n      weekdayStr.length > 3\n        ? English.weekdaysLong.indexOf(weekdayStr) + 1\n        : English.weekdaysShort.indexOf(weekdayStr) + 1;\n  }\n\n  return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n  const [\n      ,\n      weekdayStr,\n      dayStr,\n      monthStr,\n      yearStr,\n      hourStr,\n      minuteStr,\n      secondStr,\n      obsOffset,\n      milOffset,\n      offHourStr,\n      offMinuteStr\n    ] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n  let offset;\n  if (obsOffset) {\n    offset = obsOffsets[obsOffset];\n  } else if (milOffset) {\n    offset = 0;\n  } else {\n    offset = signedOffset(offHourStr, offMinuteStr);\n  }\n\n  return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n  // Remove comments and folding whitespace and replace multiple-spaces with a single space\n  return s\n    .replace(/\\([^)]*\\)|[\\n\\t]/g, \" \")\n    .replace(/(\\s\\s+)/g, \" \")\n    .trim();\n}\n\n// http date\n\nconst rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n  const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n  const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n  extractISOYmd,\n  extractISOTime,\n  extractISOOffset\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n  extractISOWeekData,\n  extractISOTime,\n  extractISOOffset\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n  extractISOOrdinalData,\n  extractISOTime,\n  extractISOOffset\n);\nconst extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset);\n\n/**\n * @private\n */\n\nexport function parseISODate(s) {\n  return parse(\n    s,\n    [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n    [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n    [isoTimeCombinedRegex, extractISOTimeAndOffset]\n  );\n}\n\nexport function parseRFC2822Date(s) {\n  return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n  return parse(\n    s,\n    [rfc1123, extractRFC1123Or850],\n    [rfc850, extractRFC1123Or850],\n    [ascii, extractASCII]\n  );\n}\n\nexport function parseISODuration(s) {\n  return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n  return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOYmdTimeOffsetAndIANAZone = combineExtractors(\n  extractISOYmd,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\nexport function parseSQL(s) {\n  return parse(\n    s,\n    [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone],\n    [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n  );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n  asNumber,\n  hasOwnProperty,\n  isNumber,\n  isUndefined,\n  normalizeObject,\n  roundTo\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nconst lowOrderMatrix = {\n    weeks: {\n      days: 7,\n      hours: 7 * 24,\n      minutes: 7 * 24 * 60,\n      seconds: 7 * 24 * 60 * 60,\n      milliseconds: 7 * 24 * 60 * 60 * 1000\n    },\n    days: {\n      hours: 24,\n      minutes: 24 * 60,\n      seconds: 24 * 60 * 60,\n      milliseconds: 24 * 60 * 60 * 1000\n    },\n    hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n    minutes: { seconds: 60, milliseconds: 60 * 1000 },\n    seconds: { milliseconds: 1000 }\n  },\n  casualMatrix = Object.assign(\n    {\n      years: {\n        quarters: 4,\n        months: 12,\n        weeks: 52,\n        days: 365,\n        hours: 365 * 24,\n        minutes: 365 * 24 * 60,\n        seconds: 365 * 24 * 60 * 60,\n        milliseconds: 365 * 24 * 60 * 60 * 1000\n      },\n      quarters: {\n        months: 3,\n        weeks: 13,\n        days: 91,\n        hours: 91 * 24,\n        minutes: 91 * 24 * 60,\n        seconds: 91 * 24 * 60 * 60,\n        milliseconds: 91 * 24 * 60 * 60 * 1000\n      },\n      months: {\n        weeks: 4,\n        days: 30,\n        hours: 30 * 24,\n        minutes: 30 * 24 * 60,\n        seconds: 30 * 24 * 60 * 60,\n        milliseconds: 30 * 24 * 60 * 60 * 1000\n      }\n    },\n    lowOrderMatrix\n  ),\n  daysInYearAccurate = 146097.0 / 400,\n  daysInMonthAccurate = 146097.0 / 4800,\n  accurateMatrix = Object.assign(\n    {\n      years: {\n        quarters: 4,\n        months: 12,\n        weeks: daysInYearAccurate / 7,\n        days: daysInYearAccurate,\n        hours: daysInYearAccurate * 24,\n        minutes: daysInYearAccurate * 24 * 60,\n        seconds: daysInYearAccurate * 24 * 60 * 60,\n        milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000\n      },\n      quarters: {\n        months: 3,\n        weeks: daysInYearAccurate / 28,\n        days: daysInYearAccurate / 4,\n        hours: (daysInYearAccurate * 24) / 4,\n        minutes: (daysInYearAccurate * 24 * 60) / 4,\n        seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n        milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4\n      },\n      months: {\n        weeks: daysInMonthAccurate / 7,\n        days: daysInMonthAccurate,\n        hours: daysInMonthAccurate * 24,\n        minutes: daysInMonthAccurate * 24 * 60,\n        seconds: daysInMonthAccurate * 24 * 60 * 60,\n        milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000\n      }\n    },\n    lowOrderMatrix\n  );\n\n// units ordered by size\nconst orderedUnits = [\n  \"years\",\n  \"quarters\",\n  \"months\",\n  \"weeks\",\n  \"days\",\n  \"hours\",\n  \"minutes\",\n  \"seconds\",\n  \"milliseconds\"\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n  // deep merge for vals\n  const conf = {\n    values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),\n    loc: dur.loc.clone(alts.loc),\n    conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy\n  };\n  return new Duration(conf);\n}\n\nfunction antiTrunc(n) {\n  return n < 0 ? Math.floor(n) : Math.ceil(n);\n}\n\n// NB: mutates parameters\nfunction convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n  const conv = matrix[toUnit][fromUnit],\n    raw = fromMap[fromUnit] / conv,\n    sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),\n    // ok, so this is wild, but see the matrix in the tests\n    added =\n      !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);\n  toMap[toUnit] += added;\n  fromMap[fromUnit] -= added * conv;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n  reverseUnits.reduce((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        convert(matrix, vals, previous, vals, current);\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors.\n * * **Configuration** See  {@link Duration.locale} and {@link Duration.numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n  /**\n   * @private\n   */\n  constructor(config) {\n    const accurate = config.conversionAccuracy === \"longterm\" || false;\n    /**\n     * @access private\n     */\n    this.values = config.values;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.matrix = accurate ? accurateMatrix : casualMatrix;\n    /**\n     * @access private\n     */\n    this.isLuxonDuration = true;\n  }\n\n  /**\n   * Create Duration from a number of milliseconds.\n   * @param {number} count of milliseconds\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  static fromMillis(count, opts) {\n    return Duration.fromObject(Object.assign({ milliseconds: count }, opts));\n  }\n\n  /**\n   * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n   * If this object is empty then a zero milliseconds duration is returned.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.years\n   * @param {number} obj.quarters\n   * @param {number} obj.months\n   * @param {number} obj.weeks\n   * @param {number} obj.days\n   * @param {number} obj.hours\n   * @param {number} obj.minutes\n   * @param {number} obj.seconds\n   * @param {number} obj.milliseconds\n   * @param {string} [obj.locale='en-US'] - the locale to use\n   * @param {string} obj.numberingSystem - the numbering system to use\n   * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  static fromObject(obj) {\n    if (obj == null || typeof obj !== \"object\") {\n      throw new InvalidArgumentError(\n        `Duration.fromObject: argument expected to be an object, got ${\n          obj === null ? \"null\" : typeof obj\n        }`\n      );\n    }\n    return new Duration({\n      values: normalizeObject(obj, Duration.normalizeUnit, [\n        \"locale\",\n        \"numberingSystem\",\n        \"conversionAccuracy\",\n        \"zone\" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this\n      ]),\n      loc: Locale.fromObject(obj),\n      conversionAccuracy: obj.conversionAccuracy\n    });\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 duration string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n   * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n   * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n   * @return {Duration}\n   */\n  static fromISO(text, opts) {\n    const [parsed] = parseISODuration(text);\n    if (parsed) {\n      const obj = Object.assign(parsed, opts);\n      return Duration.fromObject(obj);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 time string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n   * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @return {Duration}\n   */\n  static fromISOTime(text, opts) {\n    const [parsed] = parseISOTimeOnly(text);\n    if (parsed) {\n      const obj = Object.assign(parsed, opts);\n      return Duration.fromObject(obj);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create an invalid Duration.\n   * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Duration}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDurationError(invalid);\n    } else {\n      return new Duration({ invalid });\n    }\n  }\n\n  /**\n   * @private\n   */\n  static normalizeUnit(unit) {\n    const normalized = {\n      year: \"years\",\n      years: \"years\",\n      quarter: \"quarters\",\n      quarters: \"quarters\",\n      month: \"months\",\n      months: \"months\",\n      week: \"weeks\",\n      weeks: \"weeks\",\n      day: \"days\",\n      days: \"days\",\n      hour: \"hours\",\n      hours: \"hours\",\n      minute: \"minutes\",\n      minutes: \"minutes\",\n      second: \"seconds\",\n      seconds: \"seconds\",\n      millisecond: \"milliseconds\",\n      milliseconds: \"milliseconds\"\n    }[unit ? unit.toLowerCase() : unit];\n\n    if (!normalized) throw new InvalidUnitError(unit);\n\n    return normalized;\n  }\n\n  /**\n   * Check if an object is a Duration. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDuration(o) {\n    return (o && o.isLuxonDuration) || false;\n  }\n\n  /**\n   * Get  the locale of a Duration, such 'en-GB'\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n   * * `S` for milliseconds\n   * * `s` for seconds\n   * * `m` for minutes\n   * * `h` for hours\n   * * `d` for days\n   * * `M` for months\n   * * `y` for years\n   * Notes:\n   * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n   * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - options\n   * @param {boolean} [opts.floor=true] - floor numerical values\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n    const fmtOpts = Object.assign({}, opts, {\n      floor: opts.round !== false && opts.floor !== false\n    });\n    return this.isValid\n      ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a JavaScript object with this Duration's values.\n   * @param opts - options for generating the object\n   * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n   * @return {Object}\n   */\n  toObject(opts = {}) {\n    if (!this.isValid) return {};\n\n    const base = Object.assign({}, this.values);\n\n    if (opts.includeConfig) {\n      base.conversionAccuracy = this.conversionAccuracy;\n      base.numberingSystem = this.loc.numberingSystem;\n      base.locale = this.loc.locale;\n    }\n    return base;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n   * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n   * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n   * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n   * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n   * @return {string}\n   */\n  toISO() {\n    // we could use the formatter, but this is an easier way to get the minimum string\n    if (!this.isValid) return null;\n\n    let s = \"P\";\n    if (this.years !== 0) s += this.years + \"Y\";\n    if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n    if (this.weeks !== 0) s += this.weeks + \"W\";\n    if (this.days !== 0) s += this.days + \"D\";\n    if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n      s += \"T\";\n    if (this.hours !== 0) s += this.hours + \"H\";\n    if (this.minutes !== 0) s += this.minutes + \"M\";\n    if (this.seconds !== 0 || this.milliseconds !== 0)\n      // this will handle \"floating point madness\" by removing extra decimal places\n      // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n      s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n    if (s === \"P\") s += \"T0S\";\n    return s;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n   * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n   * @return {string}\n   */\n  toISOTime(opts = {}) {\n    if (!this.isValid) return null;\n\n    const millis = this.toMillis();\n    if (millis < 0 || millis >= 86400000) return null;\n\n    opts = Object.assign(\n      {\n        suppressMilliseconds: false,\n        suppressSeconds: false,\n        includePrefix: false,\n        format: \"extended\"\n      },\n      opts\n    );\n\n    const value = this.shiftTo(\"hours\", \"minutes\", \"seconds\", \"milliseconds\");\n\n    let fmt = opts.format === \"basic\" ? \"hhmm\" : \"hh:mm\";\n\n    if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) {\n      fmt += opts.format === \"basic\" ? \"ss\" : \":ss\";\n      if (!opts.suppressMilliseconds || value.milliseconds !== 0) {\n        fmt += \".SSS\";\n      }\n    }\n\n    let str = value.toFormat(fmt);\n\n    if (opts.includePrefix) {\n      str = \"T\" + str;\n    }\n\n    return str;\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n   * @return {string}\n   */\n  toString() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration.\n   * @return {number}\n   */\n  toMillis() {\n    return this.as(\"milliseconds\");\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = friendlyDuration(duration),\n      result = {};\n\n    for (const k of orderedUnits) {\n      if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n        result[k] = dur.get(k) + this.get(k);\n      }\n    }\n\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = friendlyDuration(duration);\n    return this.plus(dur.negate());\n  }\n\n  /**\n   * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n   * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 }\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === \"hour\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n   * @return {Duration}\n   */\n  mapUnits(fn) {\n    if (!this.isValid) return this;\n    const result = {};\n    for (const k of Object.keys(this.values)) {\n      result[k] = asNumber(fn(this.values[k], k));\n    }\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n   * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n   * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n   * @return {number}\n   */\n  get(unit) {\n    return this[Duration.normalizeUnit(unit)];\n  }\n\n  /**\n   * \"Set\" the values of specified units. Return a newly-constructed Duration.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dur.set({ years: 2017 })\n   * @example dur.set({ hours: 8, minutes: 30 })\n   * @return {Duration}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, []));\n    return clone(this, { values: mixed });\n  }\n\n  /**\n   * \"Set\" the locale and/or numberingSystem.  Returns a newly-constructed Duration.\n   * @example dur.reconfigure({ locale: 'en-GB' })\n   * @return {Duration}\n   */\n  reconfigure({ locale, numberingSystem, conversionAccuracy } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem }),\n      opts = { loc };\n\n    if (conversionAccuracy) {\n      opts.conversionAccuracy = conversionAccuracy;\n    }\n\n    return clone(this, opts);\n  }\n\n  /**\n   * Return the length of the duration in the specified unit.\n   * @param {string} unit - a unit such as 'minutes' or 'days'\n   * @example Duration.fromObject({years: 1}).as('days') //=> 365\n   * @example Duration.fromObject({years: 1}).as('months') //=> 12\n   * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n   * @return {number}\n   */\n  as(unit) {\n    return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n  }\n\n  /**\n   * Reduce this Duration to its canonical representation in its current units.\n   * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n   * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n   * @return {Duration}\n   */\n  normalize() {\n    if (!this.isValid) return this;\n    const vals = this.toObject();\n    normalizeValues(this.matrix, vals);\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Convert this Duration into its representation in a different set of units.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n   * @return {Duration}\n   */\n  shiftTo(...units) {\n    if (!this.isValid) return this;\n\n    if (units.length === 0) {\n      return this;\n    }\n\n    units = units.map(u => Duration.normalizeUnit(u));\n\n    const built = {},\n      accumulated = {},\n      vals = this.toObject();\n    let lastUnit;\n\n    for (const k of orderedUnits) {\n      if (units.indexOf(k) >= 0) {\n        lastUnit = k;\n\n        let own = 0;\n\n        // anything we haven't boiled down yet should get boiled to this unit\n        for (const ak in accumulated) {\n          own += this.matrix[ak][k] * accumulated[ak];\n          accumulated[ak] = 0;\n        }\n\n        // plus anything that's already in this unit\n        if (isNumber(vals[k])) {\n          own += vals[k];\n        }\n\n        const i = Math.trunc(own);\n        built[k] = i;\n        accumulated[k] = own - i; // we'd like to absorb these fractions in another unit\n\n        // plus anything further down the chain that should be rolled up in to this\n        for (const down in vals) {\n          if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n            convert(this.matrix, vals, down, built, k);\n          }\n        }\n        // otherwise, keep it in the wings to boil it later\n      } else if (isNumber(vals[k])) {\n        accumulated[k] = vals[k];\n      }\n    }\n\n    // anything leftover becomes the decimal for the last unit\n    // lastUnit must be defined since units is not empty\n    for (const key in accumulated) {\n      if (accumulated[key] !== 0) {\n        built[lastUnit] +=\n          key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n      }\n    }\n\n    return clone(this, { values: built }, true).normalize();\n  }\n\n  /**\n   * Return the negative of this Duration.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n   * @return {Duration}\n   */\n  negate() {\n    if (!this.isValid) return this;\n    const negated = {};\n    for (const k of Object.keys(this.values)) {\n      negated[k] = -this.values[k];\n    }\n    return clone(this, { values: negated }, true);\n  }\n\n  /**\n   * Get the years.\n   * @type {number}\n   */\n  get years() {\n    return this.isValid ? this.values.years || 0 : NaN;\n  }\n\n  /**\n   * Get the quarters.\n   * @type {number}\n   */\n  get quarters() {\n    return this.isValid ? this.values.quarters || 0 : NaN;\n  }\n\n  /**\n   * Get the months.\n   * @type {number}\n   */\n  get months() {\n    return this.isValid ? this.values.months || 0 : NaN;\n  }\n\n  /**\n   * Get the weeks\n   * @type {number}\n   */\n  get weeks() {\n    return this.isValid ? this.values.weeks || 0 : NaN;\n  }\n\n  /**\n   * Get the days.\n   * @type {number}\n   */\n  get days() {\n    return this.isValid ? this.values.days || 0 : NaN;\n  }\n\n  /**\n   * Get the hours.\n   * @type {number}\n   */\n  get hours() {\n    return this.isValid ? this.values.hours || 0 : NaN;\n  }\n\n  /**\n   * Get the minutes.\n   * @type {number}\n   */\n  get minutes() {\n    return this.isValid ? this.values.minutes || 0 : NaN;\n  }\n\n  /**\n   * Get the seconds.\n   * @return {number}\n   */\n  get seconds() {\n    return this.isValid ? this.values.seconds || 0 : NaN;\n  }\n\n  /**\n   * Get the milliseconds.\n   * @return {number}\n   */\n  get milliseconds() {\n    return this.isValid ? this.values.milliseconds || 0 : NaN;\n  }\n\n  /**\n   * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n   * on invalid DateTimes or Intervals.\n   * @return {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this Duration became invalid, or null if the Duration is valid\n   * @return {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Equality check\n   * Two Durations are equal iff they have the same units and the same values for each unit.\n   * @param {Duration} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    if (!this.loc.equals(other.loc)) {\n      return false;\n    }\n\n    function eq(v1, v2) {\n      // Consider 0 and undefined as equal\n      if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n      return v1 === v2;\n    }\n\n    for (const u of orderedUnits) {\n      if (!eq(this.values[u], other.values[u])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\n/**\n * @private\n */\nexport function friendlyDuration(durationish) {\n  if (isNumber(durationish)) {\n    return Duration.fromMillis(durationish);\n  } else if (Duration.isDuration(durationish)) {\n    return durationish;\n  } else if (typeof durationish === \"object\") {\n    return Duration.fromObject(durationish);\n  } else {\n    throw new InvalidArgumentError(\n      `Unknown duration argument ${durationish} of type ${typeof durationish}`\n    );\n  }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration, { friendlyDuration } from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n  if (!start || !start.isValid) {\n    return Interval.invalid(\"missing or invalid start\");\n  } else if (!end || !end.isValid) {\n    return Interval.invalid(\"missing or invalid end\");\n  } else if (end < start) {\n    return Interval.invalid(\n      \"end before start\",\n      `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n    );\n  } else {\n    return null;\n  }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}.\n * * **Accessors** Use {@link start} and {@link end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}.\n * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs}.\n * * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}.\n */\nexport default class Interval {\n  /**\n   * @private\n   */\n  constructor(config) {\n    /**\n     * @access private\n     */\n    this.s = config.start;\n    /**\n     * @access private\n     */\n    this.e = config.end;\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.isLuxonInterval = true;\n  }\n\n  /**\n   * Create an invalid Interval.\n   * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Interval}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidIntervalError(invalid);\n    } else {\n      return new Interval({ invalid });\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n   * @param {DateTime|Date|Object} start\n   * @param {DateTime|Date|Object} end\n   * @return {Interval}\n   */\n  static fromDateTimes(start, end) {\n    const builtStart = friendlyDateTime(start),\n      builtEnd = friendlyDateTime(end);\n\n    const validateError = validateStartEnd(builtStart, builtEnd);\n\n    if (validateError == null) {\n      return new Interval({\n        start: builtStart,\n        end: builtEnd\n      });\n    } else {\n      return validateError;\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and a Duration to extend to.\n   * @param {DateTime|Date|Object} start\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static after(start, duration) {\n    const dur = friendlyDuration(duration),\n      dt = friendlyDateTime(start);\n    return Interval.fromDateTimes(dt, dt.plus(dur));\n  }\n\n  /**\n   * Create an Interval from an end DateTime and a Duration to extend backwards to.\n   * @param {DateTime|Date|Object} end\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static before(end, duration) {\n    const dur = friendlyDuration(duration),\n      dt = friendlyDateTime(end);\n    return Interval.fromDateTimes(dt.minus(dur), dt);\n  }\n\n  /**\n   * Create an Interval from an ISO 8601 string.\n   * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n   * @param {string} text - the ISO string to parse\n   * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO}\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {Interval}\n   */\n  static fromISO(text, opts) {\n    const [s, e] = (text || \"\").split(\"/\", 2);\n    if (s && e) {\n      let start, startIsValid;\n      try {\n        start = DateTime.fromISO(s, opts);\n        startIsValid = start.isValid;\n      } catch (e) {\n        startIsValid = false;\n      }\n\n      let end, endIsValid;\n      try {\n        end = DateTime.fromISO(e, opts);\n        endIsValid = end.isValid;\n      } catch (e) {\n        endIsValid = false;\n      }\n\n      if (startIsValid && endIsValid) {\n        return Interval.fromDateTimes(start, end);\n      }\n\n      if (startIsValid) {\n        const dur = Duration.fromISO(e, opts);\n        if (dur.isValid) {\n          return Interval.after(start, dur);\n        }\n      } else if (endIsValid) {\n        const dur = Duration.fromISO(s, opts);\n        if (dur.isValid) {\n          return Interval.before(end, dur);\n        }\n      }\n    }\n    return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n  }\n\n  /**\n   * Check if an object is an Interval. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isInterval(o) {\n    return (o && o.isLuxonInterval) || false;\n  }\n\n  /**\n   * Returns the start of the Interval\n   * @type {DateTime}\n   */\n  get start() {\n    return this.isValid ? this.s : null;\n  }\n\n  /**\n   * Returns the end of the Interval\n   * @type {DateTime}\n   */\n  get end() {\n    return this.isValid ? this.e : null;\n  }\n\n  /**\n   * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalidReason === null;\n  }\n\n  /**\n   * Returns an error code if this Interval is invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Returns the length of the Interval in the specified unit.\n   * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n   * @return {number}\n   */\n  length(unit = \"milliseconds\") {\n    return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n  }\n\n  /**\n   * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n   * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n   * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n   * @param {string} [unit='milliseconds'] - the unit of time to count.\n   * @return {number}\n   */\n  count(unit = \"milliseconds\") {\n    if (!this.isValid) return NaN;\n    const start = this.start.startOf(unit),\n      end = this.end.startOf(unit);\n    return Math.floor(end.diff(start, unit).get(unit)) + 1;\n  }\n\n  /**\n   * Returns whether this Interval's start and end are both in the same unit of time\n   * @param {string} unit - the unit of time to check sameness on\n   * @return {boolean}\n   */\n  hasSame(unit) {\n    return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end DateTimes.\n   * @return {boolean}\n   */\n  isEmpty() {\n    return this.s.valueOf() === this.e.valueOf();\n  }\n\n  /**\n   * Return whether this Interval's start is after the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isAfter(dateTime) {\n    if (!this.isValid) return false;\n    return this.s > dateTime;\n  }\n\n  /**\n   * Return whether this Interval's end is before the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isBefore(dateTime) {\n    if (!this.isValid) return false;\n    return this.e <= dateTime;\n  }\n\n  /**\n   * Return whether this Interval contains the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  contains(dateTime) {\n    if (!this.isValid) return false;\n    return this.s <= dateTime && this.e > dateTime;\n  }\n\n  /**\n   * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n   * @param {Object} values - the values to set\n   * @param {DateTime} values.start - the starting DateTime\n   * @param {DateTime} values.end - the ending DateTime\n   * @return {Interval}\n   */\n  set({ start, end } = {}) {\n    if (!this.isValid) return this;\n    return Interval.fromDateTimes(start || this.s, end || this.e);\n  }\n\n  /**\n   * Split this Interval at each of the specified DateTimes\n   * @param {...[DateTime]} dateTimes - the unit of time to count.\n   * @return {[Interval]}\n   */\n  splitAt(...dateTimes) {\n    if (!this.isValid) return [];\n    const sorted = dateTimes\n        .map(friendlyDateTime)\n        .filter(d => this.contains(d))\n        .sort(),\n      results = [];\n    let { s } = this,\n      i = 0;\n\n    while (s < this.e) {\n      const added = sorted[i] || this.e,\n        next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      i += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into smaller Intervals, each of the specified length.\n   * Left over time is grouped into a smaller interval\n   * @param {Duration|Object|number} duration - The length of each resulting interval.\n   * @return {[Interval]}\n   */\n  splitBy(duration) {\n    const dur = friendlyDuration(duration);\n\n    if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n      return [];\n    }\n\n    let { s } = this,\n      idx = 1,\n      next;\n\n    const results = [];\n    while (s < this.e) {\n      const added = this.start.plus(dur.mapUnits(x => x * idx));\n      next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      idx += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into the specified number of smaller intervals.\n   * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n   * @return {[Interval]}\n   */\n  divideEqually(numberOfParts) {\n    if (!this.isValid) return [];\n    return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n  }\n\n  /**\n   * Return whether this Interval overlaps with the specified Interval\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  overlaps(other) {\n    return this.e > other.s && this.s < other.e;\n  }\n\n  /**\n   * Return whether this Interval's end is adjacent to the specified Interval's start.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsStart(other) {\n    if (!this.isValid) return false;\n    return +this.e === +other.s;\n  }\n\n  /**\n   * Return whether this Interval's start is adjacent to the specified Interval's end.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsEnd(other) {\n    if (!this.isValid) return false;\n    return +other.e === +this.s;\n  }\n\n  /**\n   * Return whether this Interval engulfs the start and end of the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  engulfs(other) {\n    if (!this.isValid) return false;\n    return this.s <= other.s && this.e >= other.e;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end as the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    return this.s.equals(other.s) && this.e.equals(other.e);\n  }\n\n  /**\n   * Return an Interval representing the intersection of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n   * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  intersection(other) {\n    if (!this.isValid) return this;\n    const s = this.s > other.s ? this.s : other.s,\n      e = this.e < other.e ? this.e : other.e;\n\n    if (s >= e) {\n      return null;\n    } else {\n      return Interval.fromDateTimes(s, e);\n    }\n  }\n\n  /**\n   * Return an Interval representing the union of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  union(other) {\n    if (!this.isValid) return this;\n    const s = this.s < other.s ? this.s : other.s,\n      e = this.e > other.e ? this.e : other.e;\n    return Interval.fromDateTimes(s, e);\n  }\n\n  /**\n   * Merge an array of Intervals into a equivalent minimal set of Intervals.\n   * Combines overlapping and adjacent Intervals.\n   * @param {[Interval]} intervals\n   * @return {[Interval]}\n   */\n  static merge(intervals) {\n    const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(\n      ([sofar, current], item) => {\n        if (!current) {\n          return [sofar, item];\n        } else if (current.overlaps(item) || current.abutsStart(item)) {\n          return [sofar, current.union(item)];\n        } else {\n          return [sofar.concat([current]), item];\n        }\n      },\n      [[], null]\n    );\n    if (final) {\n      found.push(final);\n    }\n    return found;\n  }\n\n  /**\n   * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n   * @param {[Interval]} intervals\n   * @return {[Interval]}\n   */\n  static xor(intervals) {\n    let start = null,\n      currentCount = 0;\n    const results = [],\n      ends = intervals.map(i => [{ time: i.s, type: \"s\" }, { time: i.e, type: \"e\" }]),\n      flattened = Array.prototype.concat(...ends),\n      arr = flattened.sort((a, b) => a.time - b.time);\n\n    for (const i of arr) {\n      currentCount += i.type === \"s\" ? 1 : -1;\n\n      if (currentCount === 1) {\n        start = i.time;\n      } else {\n        if (start && +start !== +i.time) {\n          results.push(Interval.fromDateTimes(start, i.time));\n        }\n\n        start = null;\n      }\n    }\n\n    return Interval.merge(results);\n  }\n\n  /**\n   * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n   * @param {...Interval} intervals\n   * @return {[Interval]}\n   */\n  difference(...intervals) {\n    return Interval.xor([this].concat(intervals))\n      .map(i => this.intersection(i))\n      .filter(i => i && !i.isEmpty());\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for debugging.\n   * @return {string}\n   */\n  toString() {\n    if (!this.isValid) return INVALID;\n    return `[${this.s.toISO()} – ${this.e.toISO()})`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Interval.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime.toISO}\n   * @return {string}\n   */\n  toISO(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of date of this Interval.\n   * The time components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {string}\n   */\n  toISODate() {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISODate()}/${this.e.toISODate()}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of time of this Interval.\n   * The date components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime.toISO}\n   * @return {string}\n   */\n  toISOTime(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this Interval formatted according to the specified format string.\n   * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details.\n   * @param {Object} opts - options\n   * @param {string} [opts.separator =  ' – '] - a separator to place between the start and end representations\n   * @return {string}\n   */\n  toFormat(dateFormat, { separator = \" – \" } = {}) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n  }\n\n  /**\n   * Return a Duration representing the time spanned by this interval.\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n   * @return {Duration}\n   */\n  toDuration(unit, opts) {\n    if (!this.isValid) {\n      return Duration.invalid(this.invalidReason);\n    }\n    return this.e.diff(this.s, unit, opts);\n  }\n\n  /**\n   * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n   * @param {function} mapFn\n   * @return {Interval}\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n   */\n  mapEndpoints(mapFn) {\n    return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n  }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasFormatToParts, hasIntl, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n  /**\n   * Return whether the specified zone contains a DST.\n   * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n   * @return {boolean}\n   */\n  static hasDST(zone = Settings.defaultZone) {\n    const proto = DateTime.now()\n      .setZone(zone)\n      .set({ month: 12 });\n\n    return !zone.universal && proto.offset !== proto.set({ month: 6 }).offset;\n  }\n\n  /**\n   * Return whether the specified zone is a valid IANA specifier.\n   * @param {string} zone - Zone to check\n   * @return {boolean}\n   */\n  static isValidIANAZone(zone) {\n    return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);\n  }\n\n  /**\n   * Converts the input into a {@link Zone} instance.\n   *\n   * * If `input` is already a Zone instance, it is returned unchanged.\n   * * If `input` is a string containing a valid time zone name, a Zone instance\n   *   with that name is returned.\n   * * If `input` is a string that doesn't refer to a known time zone, a Zone\n   *   instance with {@link Zone.isValid} == false is returned.\n   * * If `input is a number, a Zone instance with the specified fixed offset\n   *   in minutes is returned.\n   * * If `input` is `null` or `undefined`, the default zone is returned.\n   * @param {string|Zone|number} [input] - the value to be converted\n   * @return {Zone}\n   */\n  static normalizeZone(input) {\n    return normalizeZone(input, Settings.defaultZone);\n  }\n\n  /**\n   * Return an array of standalone month names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @example Info.months()[0] //=> 'January'\n   * @example Info.months('short')[0] //=> 'Jan'\n   * @example Info.months('numeric')[0] //=> '1'\n   * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n   * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n   * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n   * @return {[string]}\n   */\n  static months(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n  }\n\n  /**\n   * Return an array of format month names.\n   * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n   * changes the string.\n   * See {@link months}\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @return {[string]}\n   */\n  static monthsFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n  }\n\n  /**\n   * Return an array of standalone week names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @example Info.weekdays()[0] //=> 'Monday'\n   * @example Info.weekdays('short')[0] //=> 'Mon'\n   * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n   * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n   * @return {[string]}\n   */\n  static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n  }\n\n  /**\n   * Return an array of format week names.\n   * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n   * changes the string.\n   * See {@link weekdays}\n   * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale=null] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @return {[string]}\n   */\n  static weekdaysFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n  }\n\n  /**\n   * Return an array of meridiems.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n   * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n   * @return {[string]}\n   */\n  static meridiems({ locale = null } = {}) {\n    return Locale.create(locale).meridiems();\n  }\n\n  /**\n   * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n   * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.eras() //=> [ 'BC', 'AD' ]\n   * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n   * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n   * @return {[string]}\n   */\n  static eras(length = \"short\", { locale = null } = {}) {\n    return Locale.create(locale, null, \"gregory\").eras(length);\n  }\n\n  /**\n   * Return the set of available features in this environment.\n   * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.\n   * Keys:\n   * * `zones`: whether this environment supports IANA timezones\n   * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing\n   * * `intl`: whether this environment supports general internationalization\n   * * `relative`: whether this environment supports relative time formatting\n   * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false }\n   * @return {Object}\n   */\n  static features() {\n    let intl = false,\n      intlTokens = false,\n      zones = false,\n      relative = false;\n\n    if (hasIntl()) {\n      intl = true;\n      intlTokens = hasFormatToParts();\n      relative = hasRelative();\n\n      try {\n        zones =\n          new Intl.DateTimeFormat(\"en\", { timeZone: \"America/New_York\" }).resolvedOptions()\n            .timeZone === \"America/New_York\";\n      } catch (e) {\n        zones = false;\n      }\n    }\n\n    return { intl, intlTokens, zones, relative };\n  }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n  const utcDayStart = dt =>\n      dt\n        .toUTC(0, { keepLocalTime: true })\n        .startOf(\"day\")\n        .valueOf(),\n    ms = utcDayStart(later) - utcDayStart(earlier);\n  return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n  const differs = [\n    [\"years\", (a, b) => b.year - a.year],\n    [\"quarters\", (a, b) => b.quarter - a.quarter],\n    [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n    [\n      \"weeks\",\n      (a, b) => {\n        const days = dayDiff(a, b);\n        return (days - (days % 7)) / 7;\n      }\n    ],\n    [\"days\", dayDiff]\n  ];\n\n  const results = {};\n  let lowestOrder, highWater;\n\n  for (const [unit, differ] of differs) {\n    if (units.indexOf(unit) >= 0) {\n      lowestOrder = unit;\n\n      let delta = differ(cursor, later);\n      highWater = cursor.plus({ [unit]: delta });\n\n      if (highWater > later) {\n        cursor = cursor.plus({ [unit]: delta - 1 });\n        delta -= 1;\n      } else {\n        cursor = highWater;\n      }\n\n      results[unit] = delta;\n    }\n  }\n\n  return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function(earlier, later, units, opts) {\n  let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n  const remainingMillis = later - cursor;\n\n  const lowerOrderUnits = units.filter(\n    u => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n  );\n\n  if (lowerOrderUnits.length === 0) {\n    if (highWater < later) {\n      highWater = cursor.plus({ [lowestOrder]: 1 });\n    }\n\n    if (highWater !== cursor) {\n      results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n    }\n  }\n\n  const duration = Duration.fromObject(Object.assign(results, opts));\n\n  if (lowerOrderUnits.length > 0) {\n    return Duration.fromMillis(remainingMillis, opts)\n      .shiftTo(...lowerOrderUnits)\n      .plus(duration);\n  } else {\n    return duration;\n  }\n}\n","const numberingSystems = {\n  arab: \"[\\u0660-\\u0669]\",\n  arabext: \"[\\u06F0-\\u06F9]\",\n  bali: \"[\\u1B50-\\u1B59]\",\n  beng: \"[\\u09E6-\\u09EF]\",\n  deva: \"[\\u0966-\\u096F]\",\n  fullwide: \"[\\uFF10-\\uFF19]\",\n  gujr: \"[\\u0AE6-\\u0AEF]\",\n  hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n  khmr: \"[\\u17E0-\\u17E9]\",\n  knda: \"[\\u0CE6-\\u0CEF]\",\n  laoo: \"[\\u0ED0-\\u0ED9]\",\n  limb: \"[\\u1946-\\u194F]\",\n  mlym: \"[\\u0D66-\\u0D6F]\",\n  mong: \"[\\u1810-\\u1819]\",\n  mymr: \"[\\u1040-\\u1049]\",\n  orya: \"[\\u0B66-\\u0B6F]\",\n  tamldec: \"[\\u0BE6-\\u0BEF]\",\n  telu: \"[\\u0C66-\\u0C6F]\",\n  thai: \"[\\u0E50-\\u0E59]\",\n  tibt: \"[\\u0F20-\\u0F29]\",\n  latn: \"\\\\d\"\n};\n\nconst numberingSystemsUTF16 = {\n  arab: [1632, 1641],\n  arabext: [1776, 1785],\n  bali: [6992, 7001],\n  beng: [2534, 2543],\n  deva: [2406, 2415],\n  fullwide: [65296, 65303],\n  gujr: [2790, 2799],\n  khmr: [6112, 6121],\n  knda: [3302, 3311],\n  laoo: [3792, 3801],\n  limb: [6470, 6479],\n  mlym: [3430, 3439],\n  mong: [6160, 6169],\n  mymr: [4160, 4169],\n  orya: [2918, 2927],\n  tamldec: [3046, 3055],\n  telu: [3174, 3183],\n  thai: [3664, 3673],\n  tibt: [3872, 3881]\n};\n\n// eslint-disable-next-line\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n  let value = parseInt(str, 10);\n  if (isNaN(value)) {\n    value = \"\";\n    for (let i = 0; i < str.length; i++) {\n      const code = str.charCodeAt(i);\n\n      if (str[i].search(numberingSystems.hanidec) !== -1) {\n        value += hanidecChars.indexOf(str[i]);\n      } else {\n        for (const key in numberingSystemsUTF16) {\n          const [min, max] = numberingSystemsUTF16[key];\n          if (code >= min && code <= max) {\n            value += code - min;\n          }\n        }\n      }\n    }\n    return parseInt(value, 10);\n  } else {\n    return value;\n  }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n  return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = i => i) {\n  return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `( |${NBSP})`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n  // make dots optional and also make them literal\n  // make space and non breakable space characters interchangeable\n  return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n  return s\n    .replace(/\\./g, \"\") // ignore dots that were made optional\n    .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n    .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n  if (strings === null) {\n    return null;\n  } else {\n    return {\n      regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n      deser: ([s]) =>\n        strings.findIndex(i => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex\n    };\n  }\n}\n\nfunction offset(regex, groups) {\n  return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n  return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n  // eslint-disable-next-line no-useless-escape\n  return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\nfunction unitForToken(token, loc) {\n  const one = digitRegex(loc),\n    two = digitRegex(loc, \"{2}\"),\n    three = digitRegex(loc, \"{3}\"),\n    four = digitRegex(loc, \"{4}\"),\n    six = digitRegex(loc, \"{6}\"),\n    oneOrTwo = digitRegex(loc, \"{1,2}\"),\n    oneToThree = digitRegex(loc, \"{1,3}\"),\n    oneToSix = digitRegex(loc, \"{1,6}\"),\n    oneToNine = digitRegex(loc, \"{1,9}\"),\n    twoToFour = digitRegex(loc, \"{2,4}\"),\n    fourToSix = digitRegex(loc, \"{4,6}\"),\n    literal = t => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n    unitate = t => {\n      if (token.literal) {\n        return literal(t);\n      }\n      switch (t.val) {\n        // era\n        case \"G\":\n          return oneOf(loc.eras(\"short\", false), 0);\n        case \"GG\":\n          return oneOf(loc.eras(\"long\", false), 0);\n        // years\n        case \"y\":\n          return intUnit(oneToSix);\n        case \"yy\":\n          return intUnit(twoToFour, untruncateYear);\n        case \"yyyy\":\n          return intUnit(four);\n        case \"yyyyy\":\n          return intUnit(fourToSix);\n        case \"yyyyyy\":\n          return intUnit(six);\n        // months\n        case \"M\":\n          return intUnit(oneOrTwo);\n        case \"MM\":\n          return intUnit(two);\n        case \"MMM\":\n          return oneOf(loc.months(\"short\", true, false), 1);\n        case \"MMMM\":\n          return oneOf(loc.months(\"long\", true, false), 1);\n        case \"L\":\n          return intUnit(oneOrTwo);\n        case \"LL\":\n          return intUnit(two);\n        case \"LLL\":\n          return oneOf(loc.months(\"short\", false, false), 1);\n        case \"LLLL\":\n          return oneOf(loc.months(\"long\", false, false), 1);\n        // dates\n        case \"d\":\n          return intUnit(oneOrTwo);\n        case \"dd\":\n          return intUnit(two);\n        // ordinals\n        case \"o\":\n          return intUnit(oneToThree);\n        case \"ooo\":\n          return intUnit(three);\n        // time\n        case \"HH\":\n          return intUnit(two);\n        case \"H\":\n          return intUnit(oneOrTwo);\n        case \"hh\":\n          return intUnit(two);\n        case \"h\":\n          return intUnit(oneOrTwo);\n        case \"mm\":\n          return intUnit(two);\n        case \"m\":\n          return intUnit(oneOrTwo);\n        case \"q\":\n          return intUnit(oneOrTwo);\n        case \"qq\":\n          return intUnit(two);\n        case \"s\":\n          return intUnit(oneOrTwo);\n        case \"ss\":\n          return intUnit(two);\n        case \"S\":\n          return intUnit(oneToThree);\n        case \"SSS\":\n          return intUnit(three);\n        case \"u\":\n          return simple(oneToNine);\n        // meridiem\n        case \"a\":\n          return oneOf(loc.meridiems(), 0);\n        // weekYear (k)\n        case \"kkkk\":\n          return intUnit(four);\n        case \"kk\":\n          return intUnit(twoToFour, untruncateYear);\n        // weekNumber (W)\n        case \"W\":\n          return intUnit(oneOrTwo);\n        case \"WW\":\n          return intUnit(two);\n        // weekdays\n        case \"E\":\n        case \"c\":\n          return intUnit(one);\n        case \"EEE\":\n          return oneOf(loc.weekdays(\"short\", false, false), 1);\n        case \"EEEE\":\n          return oneOf(loc.weekdays(\"long\", false, false), 1);\n        case \"ccc\":\n          return oneOf(loc.weekdays(\"short\", true, false), 1);\n        case \"cccc\":\n          return oneOf(loc.weekdays(\"long\", true, false), 1);\n        // offset/zone\n        case \"Z\":\n        case \"ZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n        case \"ZZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n        // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n        // because we don't have any way to figure out what they are\n        case \"z\":\n          return simple(/[a-z_+-/]{1,256}?/i);\n        default:\n          return literal(t);\n      }\n    };\n\n  const unit = unitate(token) || {\n    invalidReason: MISSING_FTP\n  };\n\n  unit.token = token;\n\n  return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n  year: {\n    \"2-digit\": \"yy\",\n    numeric: \"yyyyy\"\n  },\n  month: {\n    numeric: \"M\",\n    \"2-digit\": \"MM\",\n    short: \"MMM\",\n    long: \"MMMM\"\n  },\n  day: {\n    numeric: \"d\",\n    \"2-digit\": \"dd\"\n  },\n  weekday: {\n    short: \"EEE\",\n    long: \"EEEE\"\n  },\n  dayperiod: \"a\",\n  dayPeriod: \"a\",\n  hour: {\n    numeric: \"h\",\n    \"2-digit\": \"hh\"\n  },\n  minute: {\n    numeric: \"m\",\n    \"2-digit\": \"mm\"\n  },\n  second: {\n    numeric: \"s\",\n    \"2-digit\": \"ss\"\n  }\n};\n\nfunction tokenForPart(part, locale, formatOpts) {\n  const { type, value } = part;\n\n  if (type === \"literal\") {\n    return {\n      literal: true,\n      val: value\n    };\n  }\n\n  const style = formatOpts[type];\n\n  let val = partTypeStyleToTokenVal[type];\n  if (typeof val === \"object\") {\n    val = val[style];\n  }\n\n  if (val) {\n    return {\n      literal: false,\n      val\n    };\n  }\n\n  return undefined;\n}\n\nfunction buildRegex(units) {\n  const re = units.map(u => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n  return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n  const matches = input.match(regex);\n\n  if (matches) {\n    const all = {};\n    let matchIndex = 1;\n    for (const i in handlers) {\n      if (hasOwnProperty(handlers, i)) {\n        const h = handlers[i],\n          groups = h.groups ? h.groups + 1 : 1;\n        if (!h.literal && h.token) {\n          all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n        }\n        matchIndex += groups;\n      }\n    }\n    return [matches, all];\n  } else {\n    return [matches, {}];\n  }\n}\n\nfunction dateTimeFromMatches(matches) {\n  const toField = token => {\n    switch (token) {\n      case \"S\":\n        return \"millisecond\";\n      case \"s\":\n        return \"second\";\n      case \"m\":\n        return \"minute\";\n      case \"h\":\n      case \"H\":\n        return \"hour\";\n      case \"d\":\n        return \"day\";\n      case \"o\":\n        return \"ordinal\";\n      case \"L\":\n      case \"M\":\n        return \"month\";\n      case \"y\":\n        return \"year\";\n      case \"E\":\n      case \"c\":\n        return \"weekday\";\n      case \"W\":\n        return \"weekNumber\";\n      case \"k\":\n        return \"weekYear\";\n      case \"q\":\n        return \"quarter\";\n      default:\n        return null;\n    }\n  };\n\n  let zone;\n  if (!isUndefined(matches.Z)) {\n    zone = new FixedOffsetZone(matches.Z);\n  } else if (!isUndefined(matches.z)) {\n    zone = IANAZone.create(matches.z);\n  } else {\n    zone = null;\n  }\n\n  if (!isUndefined(matches.q)) {\n    matches.M = (matches.q - 1) * 3 + 1;\n  }\n\n  if (!isUndefined(matches.h)) {\n    if (matches.h < 12 && matches.a === 1) {\n      matches.h += 12;\n    } else if (matches.h === 12 && matches.a === 0) {\n      matches.h = 0;\n    }\n  }\n\n  if (matches.G === 0 && matches.y) {\n    matches.y = -matches.y;\n  }\n\n  if (!isUndefined(matches.u)) {\n    matches.S = parseMillis(matches.u);\n  }\n\n  const vals = Object.keys(matches).reduce((r, k) => {\n    const f = toField(k);\n    if (f) {\n      r[f] = matches[k];\n    }\n\n    return r;\n  }, {});\n\n  return [vals, zone];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n  if (!dummyDateTimeCache) {\n    dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n  }\n\n  return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n  if (token.literal) {\n    return token;\n  }\n\n  const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n\n  if (!formatOpts) {\n    return token;\n  }\n\n  const formatter = Formatter.create(locale, formatOpts);\n  const parts = formatter.formatDateTimeParts(getDummyDateTime());\n\n  const tokens = parts.map(p => tokenForPart(p, locale, formatOpts));\n\n  if (tokens.includes(undefined)) {\n    return token;\n  }\n\n  return tokens;\n}\n\nfunction expandMacroTokens(tokens, locale) {\n  return Array.prototype.concat(...tokens.map(t => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n  const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n    units = tokens.map(t => unitForToken(t, locale)),\n    disqualifyingUnit = units.find(t => t.invalidReason);\n\n  if (disqualifyingUnit) {\n    return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n  } else {\n    const [regexString, handlers] = buildRegex(units),\n      regex = RegExp(regexString, \"i\"),\n      [rawMatches, matches] = match(input, regex, handlers),\n      [result, zone] = matches ? dateTimeFromMatches(matches) : [null, null];\n    if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n      throw new ConflictingSpecificationError(\n        \"Can't include meridiem when specifying 24-hour format\"\n      );\n    }\n    return { input, tokens, regex, rawMatches, matches, result, zone };\n  }\n}\n\nexport function parseFromTokens(locale, input, format) {\n  const { result, zone, invalidReason } = explainFromTokens(locale, input, format);\n  return [result, zone, invalidReason];\n}\n","import {\n  integerBetween,\n  isLeapYear,\n  timeObject,\n  daysInYear,\n  daysInMonth,\n  weeksInWeekYear,\n  isInteger\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n  leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n  return new Invalid(\n    \"unit out of range\",\n    `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n  );\n}\n\nfunction dayOfWeek(year, month, day) {\n  const js = new Date(Date.UTC(year, month - 1, day)).getUTCDay();\n  return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n  return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n  const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n    month0 = table.findIndex(i => i < ordinal),\n    day = ordinal - table[month0];\n  return { month: month0 + 1, day };\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj) {\n  const { year, month, day } = gregObj,\n    ordinal = computeOrdinal(year, month, day),\n    weekday = dayOfWeek(year, month, day);\n\n  let weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n    weekYear;\n\n  if (weekNumber < 1) {\n    weekYear = year - 1;\n    weekNumber = weeksInWeekYear(weekYear);\n  } else if (weekNumber > weeksInWeekYear(year)) {\n    weekYear = year + 1;\n    weekNumber = 1;\n  } else {\n    weekYear = year;\n  }\n\n  return Object.assign({ weekYear, weekNumber, weekday }, timeObject(gregObj));\n}\n\nexport function weekToGregorian(weekData) {\n  const { weekYear, weekNumber, weekday } = weekData,\n    weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n    yearInDays = daysInYear(weekYear);\n\n  let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n    year;\n\n  if (ordinal < 1) {\n    year = weekYear - 1;\n    ordinal += daysInYear(year);\n  } else if (ordinal > yearInDays) {\n    year = weekYear + 1;\n    ordinal -= daysInYear(weekYear);\n  } else {\n    year = weekYear;\n  }\n\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n\n  return Object.assign({ year, month, day }, timeObject(weekData));\n}\n\nexport function gregorianToOrdinal(gregData) {\n  const { year, month, day } = gregData,\n    ordinal = computeOrdinal(year, month, day);\n\n  return Object.assign({ year, ordinal }, timeObject(gregData));\n}\n\nexport function ordinalToGregorian(ordinalData) {\n  const { year, ordinal } = ordinalData,\n    { month, day } = uncomputeOrdinal(year, ordinal);\n\n  return Object.assign({ year, month, day }, timeObject(ordinalData));\n}\n\nexport function hasInvalidWeekData(obj) {\n  const validYear = isInteger(obj.weekYear),\n    validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n    validWeekday = integerBetween(obj.weekday, 1, 7);\n\n  if (!validYear) {\n    return unitOutOfRange(\"weekYear\", obj.weekYear);\n  } else if (!validWeek) {\n    return unitOutOfRange(\"week\", obj.week);\n  } else if (!validWeekday) {\n    return unitOutOfRange(\"weekday\", obj.weekday);\n  } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n  const validYear = isInteger(obj.year),\n    validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validOrdinal) {\n    return unitOutOfRange(\"ordinal\", obj.ordinal);\n  } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n  const validYear = isInteger(obj.year),\n    validMonth = integerBetween(obj.month, 1, 12),\n    validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validMonth) {\n    return unitOutOfRange(\"month\", obj.month);\n  } else if (!validDay) {\n    return unitOutOfRange(\"day\", obj.day);\n  } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n  const { hour, minute, second, millisecond } = obj;\n  const validHour =\n      integerBetween(hour, 0, 23) ||\n      (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n    validMinute = integerBetween(minute, 0, 59),\n    validSecond = integerBetween(second, 0, 59),\n    validMillisecond = integerBetween(millisecond, 0, 999);\n\n  if (!validHour) {\n    return unitOutOfRange(\"hour\", hour);\n  } else if (!validMinute) {\n    return unitOutOfRange(\"minute\", minute);\n  } else if (!validSecond) {\n    return unitOutOfRange(\"second\", second);\n  } else if (!validMillisecond) {\n    return unitOutOfRange(\"millisecond\", millisecond);\n  } else return false;\n}\n","import Duration, { friendlyDuration } from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n  isUndefined,\n  maybeArray,\n  isDate,\n  isNumber,\n  bestBy,\n  daysInMonth,\n  daysInYear,\n  isLeapYear,\n  weeksInWeekYear,\n  normalizeObject,\n  roundTo,\n  objToLocalTS\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport { parseFromTokens, explainFromTokens } from \"./impl/tokenParser.js\";\nimport {\n  gregorianToWeek,\n  weekToGregorian,\n  gregorianToOrdinal,\n  ordinalToGregorian,\n  hasInvalidGregorianData,\n  hasInvalidWeekData,\n  hasInvalidOrdinalData,\n  hasInvalidTimeData\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n  InvalidArgumentError,\n  ConflictingSpecificationError,\n  InvalidUnitError,\n  InvalidDateTimeError\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n  return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\nfunction possiblyCachedWeekData(dt) {\n  if (dt.weekData === null) {\n    dt.weekData = gregorianToWeek(dt.c);\n  }\n  return dt.weekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n  const current = {\n    ts: inst.ts,\n    zone: inst.zone,\n    c: inst.c,\n    o: inst.o,\n    loc: inst.loc,\n    invalid: inst.invalid\n  };\n  return new DateTime(Object.assign({}, current, alts, { old: current }));\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n  // Our UTC time is just a guess because our offset is just a guess\n  let utcGuess = localTS - o * 60 * 1000;\n\n  // Test whether the zone matches the offset for this ts\n  const o2 = tz.offset(utcGuess);\n\n  // If so, offset didn't change and we're done\n  if (o === o2) {\n    return [utcGuess, o];\n  }\n\n  // If not, change the ts by the difference in the offset\n  utcGuess -= (o2 - o) * 60 * 1000;\n\n  // If that gives us the local time we want, we're done\n  const o3 = tz.offset(utcGuess);\n  if (o2 === o3) {\n    return [utcGuess, o2];\n  }\n\n  // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n  return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n  ts += offset * 60 * 1000;\n\n  const d = new Date(ts);\n\n  return {\n    year: d.getUTCFullYear(),\n    month: d.getUTCMonth() + 1,\n    day: d.getUTCDate(),\n    hour: d.getUTCHours(),\n    minute: d.getUTCMinutes(),\n    second: d.getUTCSeconds(),\n    millisecond: d.getUTCMilliseconds()\n  };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n  return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n  const oPre = inst.o,\n    year = inst.c.year + Math.trunc(dur.years),\n    month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n    c = Object.assign({}, inst.c, {\n      year,\n      month,\n      day:\n        Math.min(inst.c.day, daysInMonth(year, month)) +\n        Math.trunc(dur.days) +\n        Math.trunc(dur.weeks) * 7\n    }),\n    millisToAdd = Duration.fromObject({\n      years: dur.years - Math.trunc(dur.years),\n      quarters: dur.quarters - Math.trunc(dur.quarters),\n      months: dur.months - Math.trunc(dur.months),\n      weeks: dur.weeks - Math.trunc(dur.weeks),\n      days: dur.days - Math.trunc(dur.days),\n      hours: dur.hours,\n      minutes: dur.minutes,\n      seconds: dur.seconds,\n      milliseconds: dur.milliseconds\n    }).as(\"milliseconds\"),\n    localTS = objToLocalTS(c);\n\n  let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n  if (millisToAdd !== 0) {\n    ts += millisToAdd;\n    // that could have changed the offset by going over a DST, but we want to keep the ts the same\n    o = inst.zone.offset(ts);\n  }\n\n  return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text) {\n  const { setZone, zone } = opts;\n  if (parsed && Object.keys(parsed).length !== 0) {\n    const interpretationZone = parsedZone || zone,\n      inst = DateTime.fromObject(\n        Object.assign(parsed, opts, {\n          zone: interpretationZone,\n          // setZone is a valid option in the calling methods, but not in fromObject\n          setZone: undefined\n        })\n      );\n    return setZone ? inst : inst.setZone(zone);\n  } else {\n    return DateTime.invalid(\n      new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n    );\n  }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n  return dt.isValid\n    ? Formatter.create(Locale.create(\"en-US\"), {\n        allowZ,\n        forceSimple: true\n      }).formatDateTimeFromString(dt, format)\n    : null;\n}\n\n// technical time formats (e.g. the time part of ISO 8601), take some options\n// and this commonizes their handling\nfunction toTechTimeFormat(\n  dt,\n  {\n    suppressSeconds = false,\n    suppressMilliseconds = false,\n    includeOffset,\n    includePrefix = false,\n    includeZone = false,\n    spaceZone = false,\n    format = \"extended\"\n  }\n) {\n  let fmt = format === \"basic\" ? \"HHmm\" : \"HH:mm\";\n\n  if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) {\n    fmt += format === \"basic\" ? \"ss\" : \":ss\";\n    if (!suppressMilliseconds || dt.millisecond !== 0) {\n      fmt += \".SSS\";\n    }\n  }\n\n  if ((includeZone || includeOffset) && spaceZone) {\n    fmt += \" \";\n  }\n\n  if (includeZone) {\n    fmt += \"z\";\n  } else if (includeOffset) {\n    fmt += format === \"basic\" ? \"ZZZ\" : \"ZZ\";\n  }\n\n  let str = toTechFormat(dt, fmt);\n\n  if (includePrefix) {\n    str = \"T\" + str;\n  }\n\n  return str;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n    month: 1,\n    day: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0\n  },\n  defaultWeekUnitValues = {\n    weekNumber: 1,\n    weekday: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0\n  },\n  defaultOrdinalUnitValues = {\n    ordinal: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0\n  };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n  orderedWeekUnits = [\n    \"weekYear\",\n    \"weekNumber\",\n    \"weekday\",\n    \"hour\",\n    \"minute\",\n    \"second\",\n    \"millisecond\"\n  ],\n  orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n  const normalized = {\n    year: \"year\",\n    years: \"year\",\n    month: \"month\",\n    months: \"month\",\n    day: \"day\",\n    days: \"day\",\n    hour: \"hour\",\n    hours: \"hour\",\n    minute: \"minute\",\n    minutes: \"minute\",\n    quarter: \"quarter\",\n    quarters: \"quarter\",\n    second: \"second\",\n    seconds: \"second\",\n    millisecond: \"millisecond\",\n    milliseconds: \"millisecond\",\n    weekday: \"weekday\",\n    weekdays: \"weekday\",\n    weeknumber: \"weekNumber\",\n    weeksnumber: \"weekNumber\",\n    weeknumbers: \"weekNumber\",\n    weekyear: \"weekYear\",\n    weekyears: \"weekYear\",\n    ordinal: \"ordinal\"\n  }[unit.toLowerCase()];\n\n  if (!normalized) throw new InvalidUnitError(unit);\n\n  return normalized;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, zone) {\n  // assume we have the higher-order units\n  for (const u of orderedUnits) {\n    if (isUndefined(obj[u])) {\n      obj[u] = defaultUnitValues[u];\n    }\n  }\n\n  const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n  if (invalid) {\n    return DateTime.invalid(invalid);\n  }\n\n  const tsNow = Settings.now(),\n    offsetProvis = zone.offset(tsNow),\n    [ts, o] = objToTS(obj, offsetProvis, zone);\n\n  return new DateTime({\n    ts,\n    zone,\n    o\n  });\n}\n\nfunction diffRelative(start, end, opts) {\n  const round = isUndefined(opts.round) ? true : opts.round,\n    format = (c, unit) => {\n      c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n      const formatter = end.loc.clone(opts).relFormatter(opts);\n      return formatter.format(c, unit);\n    },\n    differ = unit => {\n      if (opts.calendary) {\n        if (!end.hasSame(start, unit)) {\n          return end\n            .startOf(unit)\n            .diff(start.startOf(unit), unit)\n            .get(unit);\n        } else return 0;\n      } else {\n        return end.diff(start, unit).get(unit);\n      }\n    };\n\n  if (opts.unit) {\n    return format(differ(opts.unit), opts.unit);\n  }\n\n  for (const unit of opts.units) {\n    const count = differ(unit);\n    if (Math.abs(count) >= 1) {\n      return format(count, unit);\n    }\n  }\n  return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month},\n * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors.\n * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n  /**\n   * @access private\n   */\n  constructor(config) {\n    const zone = config.zone || Settings.defaultZone;\n\n    let invalid =\n      config.invalid ||\n      (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n      (!zone.isValid ? unsupportedZone(zone) : null);\n    /**\n     * @access private\n     */\n    this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n    let c = null,\n      o = null;\n    if (!invalid) {\n      const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n      if (unchanged) {\n        [c, o] = [config.old.c, config.old.o];\n      } else {\n        const ot = zone.offset(this.ts);\n        c = tsToObj(this.ts, ot);\n        invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n        c = invalid ? null : c;\n        o = invalid ? null : ot;\n      }\n    }\n\n    /**\n     * @access private\n     */\n    this._zone = zone;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.invalid = invalid;\n    /**\n     * @access private\n     */\n    this.weekData = null;\n    /**\n     * @access private\n     */\n    this.c = c;\n    /**\n     * @access private\n     */\n    this.o = o;\n    /**\n     * @access private\n     */\n    this.isLuxonDateTime = true;\n  }\n\n  // CONSTRUCT\n\n  /**\n   * Create a DateTime for the current instant, in the system's time zone.\n   *\n   * Use Settings to override these default values if needed.\n   * @example DateTime.now().toISO() //~> now in the ISO format\n   * @return {DateTime}\n   */\n  static now() {\n    return new DateTime({});\n  }\n\n  /**\n   * Create a local DateTime\n   * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month, 1-indexed\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @example DateTime.local()                            //~> now\n   * @example DateTime.local(2017)                        //~> 2017-01-01T00:00:00\n   * @example DateTime.local(2017, 3)                     //~> 2017-03-01T00:00:00\n   * @example DateTime.local(2017, 3, 12)                 //~> 2017-03-12T00:00:00\n   * @example DateTime.local(2017, 3, 12, 5)              //~> 2017-03-12T05:00:00\n   * @example DateTime.local(2017, 3, 12, 5, 45)          //~> 2017-03-12T05:45:00\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10)      //~> 2017-03-12T05:45:10\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n   * @return {DateTime}\n   */\n  static local(year, month, day, hour, minute, second, millisecond) {\n    if (isUndefined(year)) {\n      return DateTime.now();\n    } else {\n      return quickDT(\n        {\n          year,\n          month,\n          day,\n          hour,\n          minute,\n          second,\n          millisecond\n        },\n        Settings.defaultZone\n      );\n    }\n  }\n\n  /**\n   * Create a DateTime in UTC\n   * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @example DateTime.utc()                            //~> now\n   * @example DateTime.utc(2017)                        //~> 2017-01-01T00:00:00Z\n   * @example DateTime.utc(2017, 3)                     //~> 2017-03-01T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12)                 //~> 2017-03-12T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5)              //~> 2017-03-12T05:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45)          //~> 2017-03-12T05:45:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10)      //~> 2017-03-12T05:45:10Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z\n   * @return {DateTime}\n   */\n  static utc(year, month, day, hour, minute, second, millisecond) {\n    if (isUndefined(year)) {\n      return new DateTime({\n        ts: Settings.now(),\n        zone: FixedOffsetZone.utcInstance\n      });\n    } else {\n      return quickDT(\n        {\n          year,\n          month,\n          day,\n          hour,\n          minute,\n          second,\n          millisecond\n        },\n        FixedOffsetZone.utcInstance\n      );\n    }\n  }\n\n  /**\n   * Create a DateTime from a JavaScript Date object. Uses the default zone.\n   * @param {Date} date - a JavaScript Date object\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @return {DateTime}\n   */\n  static fromJSDate(date, options = {}) {\n    const ts = isDate(date) ? date.valueOf() : NaN;\n    if (Number.isNaN(ts)) {\n      return DateTime.invalid(\"invalid input\");\n    }\n\n    const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    return new DateTime({\n      ts: ts,\n      zone: zoneToUse,\n      loc: Locale.fromObject(options)\n    });\n  }\n\n  /**\n   * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromMillis(milliseconds, options = {}) {\n    if (!isNumber(milliseconds)) {\n      throw new InvalidArgumentError(\n        `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n      );\n    } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n      // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n      return DateTime.invalid(\"Timestamp out of range\");\n    } else {\n      return new DateTime({\n        ts: milliseconds,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options)\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} seconds - a number of seconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromSeconds(seconds, options = {}) {\n    if (!isNumber(seconds)) {\n      throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n    } else {\n      return new DateTime({\n        ts: seconds * 1000,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options)\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.year - a year, such as 1987\n   * @param {number} obj.month - a month, 1-12\n   * @param {number} obj.day - a day of the month, 1-31, depending on the month\n   * @param {number} obj.ordinal - day of the year, 1-365 or 366\n   * @param {number} obj.weekYear - an ISO week year\n   * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n   * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n   * @param {number} obj.hour - hour of the day, 0-23\n   * @param {number} obj.minute - minute of the hour, 0-59\n   * @param {number} obj.second - second of the minute, 0-59\n   * @param {number} obj.millisecond - millisecond of the second, 0-999\n   * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n   * @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n   * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }),\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' })\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' })\n   * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n   * @return {DateTime}\n   */\n  static fromObject(obj) {\n    const zoneToUse = normalizeZone(obj.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    const tsNow = Settings.now(),\n      offsetProvis = zoneToUse.offset(tsNow),\n      normalized = normalizeObject(obj, normalizeUnit, [\n        \"zone\",\n        \"locale\",\n        \"outputCalendar\",\n        \"numberingSystem\"\n      ]),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n      loc = Locale.fromObject(obj);\n\n    // cases:\n    // just a weekday -> this week's instance of that weekday, no worries\n    // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n    // (gregorian month or day) + ordinal -> error\n    // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n    // configure ourselves to deal with gregorian dates or week stuff\n    let units,\n      defaultValues,\n      objNow = tsToObj(tsNow, offsetProvis);\n    if (useWeekData) {\n      units = orderedWeekUnits;\n      defaultValues = defaultWeekUnitValues;\n      objNow = gregorianToWeek(objNow);\n    } else if (containsOrdinal) {\n      units = orderedOrdinalUnits;\n      defaultValues = defaultOrdinalUnitValues;\n      objNow = gregorianToOrdinal(objNow);\n    } else {\n      units = orderedUnits;\n      defaultValues = defaultUnitValues;\n    }\n\n    // set default values for missing stuff\n    let foundFirst = false;\n    for (const u of units) {\n      const v = normalized[u];\n      if (!isUndefined(v)) {\n        foundFirst = true;\n      } else if (foundFirst) {\n        normalized[u] = defaultValues[u];\n      } else {\n        normalized[u] = objNow[u];\n      }\n    }\n\n    // make sure the values we have are in range\n    const higherOrderInvalid = useWeekData\n        ? hasInvalidWeekData(normalized)\n        : containsOrdinal\n          ? hasInvalidOrdinalData(normalized)\n          : hasInvalidGregorianData(normalized),\n      invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    // compute the actual time\n    const gregorian = useWeekData\n        ? weekToGregorian(normalized)\n        : containsOrdinal\n          ? ordinalToGregorian(normalized)\n          : normalized,\n      [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n      inst = new DateTime({\n        ts: tsFinal,\n        zone: zoneToUse,\n        o: offsetFinal,\n        loc\n      });\n\n    // gregorian data + weekday serves only to validate\n    if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n      return DateTime.invalid(\n        \"mismatched weekday\",\n        `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n      );\n    }\n\n    return inst;\n  }\n\n  /**\n   * Create a DateTime from an ISO 8601 string\n   * @param {string} text - the ISO string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n   * @example DateTime.fromISO('2016-W05-4')\n   * @return {DateTime}\n   */\n  static fromISO(text, opts = {}) {\n    const [vals, parsedZone] = parseISODate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n  }\n\n  /**\n   * Create a DateTime from an RFC 2822 string\n   * @param {string} text - the RFC 2822 string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n   * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n   * @return {DateTime}\n   */\n  static fromRFC2822(text, opts = {}) {\n    const [vals, parsedZone] = parseRFC2822Date(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n  }\n\n  /**\n   * Create a DateTime from an HTTP header date\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @param {string} text - the HTTP header date\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sun Nov  6 08:49:37 1994')\n   * @return {DateTime}\n   */\n  static fromHTTP(text, opts = {}) {\n    const [vals, parsedZone] = parseHTTPDate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n  }\n\n  /**\n   * Create a DateTime from an input string and format string.\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n   * @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromFormat(text, fmt, opts = {}) {\n    if (isUndefined(text) || isUndefined(fmt)) {\n      throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n    }\n\n    const { locale = null, numberingSystem = null } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true\n      }),\n      [vals, parsedZone, invalid] = parseFromTokens(localeToUse, text, fmt);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    } else {\n      return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text);\n    }\n  }\n\n  /**\n   * @deprecated use fromFormat instead\n   */\n  static fromString(text, fmt, opts = {}) {\n    return DateTime.fromFormat(text, fmt, opts);\n  }\n\n  /**\n   * Create a DateTime from a SQL date, time, or datetime\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale\n   * @param {string} text - the string to parse\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @example DateTime.fromSQL('2017-05-15')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n   * @example DateTime.fromSQL('09:12:34.342')\n   * @return {DateTime}\n   */\n  static fromSQL(text, opts = {}) {\n    const [vals, parsedZone] = parseSQL(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n  }\n\n  /**\n   * Create an invalid DateTime.\n   * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {DateTime}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDateTimeError(invalid);\n    } else {\n      return new DateTime({ invalid });\n    }\n  }\n\n  /**\n   * Check if an object is a DateTime. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDateTime(o) {\n    return (o && o.isLuxonDateTime) || false;\n  }\n\n  // INFO\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n   * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n   * @return {number}\n   */\n  get(unit) {\n    return this[unit];\n  }\n\n  /**\n   * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n   * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n   * * The DateTime was created by an operation on another invalid date\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get outputCalendar() {\n    return this.isValid ? this.loc.outputCalendar : null;\n  }\n\n  /**\n   * Get the time zone associated with this DateTime.\n   * @type {Zone}\n   */\n  get zone() {\n    return this._zone;\n  }\n\n  /**\n   * Get the name of the time zone.\n   * @type {string}\n   */\n  get zoneName() {\n    return this.isValid ? this.zone.name : null;\n  }\n\n  /**\n   * Get the year\n   * @example DateTime.local(2017, 5, 25).year //=> 2017\n   * @type {number}\n   */\n  get year() {\n    return this.isValid ? this.c.year : NaN;\n  }\n\n  /**\n   * Get the quarter\n   * @example DateTime.local(2017, 5, 25).quarter //=> 2\n   * @type {number}\n   */\n  get quarter() {\n    return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n  }\n\n  /**\n   * Get the month (1-12).\n   * @example DateTime.local(2017, 5, 25).month //=> 5\n   * @type {number}\n   */\n  get month() {\n    return this.isValid ? this.c.month : NaN;\n  }\n\n  /**\n   * Get the day of the month (1-30ish).\n   * @example DateTime.local(2017, 5, 25).day //=> 25\n   * @type {number}\n   */\n  get day() {\n    return this.isValid ? this.c.day : NaN;\n  }\n\n  /**\n   * Get the hour of the day (0-23).\n   * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n   * @type {number}\n   */\n  get hour() {\n    return this.isValid ? this.c.hour : NaN;\n  }\n\n  /**\n   * Get the minute of the hour (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n   * @type {number}\n   */\n  get minute() {\n    return this.isValid ? this.c.minute : NaN;\n  }\n\n  /**\n   * Get the second of the minute (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n   * @type {number}\n   */\n  get second() {\n    return this.isValid ? this.c.second : NaN;\n  }\n\n  /**\n   * Get the millisecond of the second (0-999).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n   * @type {number}\n   */\n  get millisecond() {\n    return this.isValid ? this.c.millisecond : NaN;\n  }\n\n  /**\n   * Get the week year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n   * @type {number}\n   */\n  get weekYear() {\n    return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the week number of the week year (1-52ish).\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n   * @type {number}\n   */\n  get weekNumber() {\n    return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the day of the week.\n   * 1 is Monday and 7 is Sunday\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 11, 31).weekday //=> 4\n   * @type {number}\n   */\n  get weekday() {\n    return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Get the ordinal (meaning the day of the year)\n   * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n   * @type {number|DateTime}\n   */\n  get ordinal() {\n    return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n  }\n\n  /**\n   * Get the human readable short month name, such as 'Oct'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n   * @type {string}\n   */\n  get monthShort() {\n    return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable long month name, such as 'October'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthLong //=> October\n   * @type {string}\n   */\n  get monthLong() {\n    return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable short weekday, such as 'Mon'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n   * @type {string}\n   */\n  get weekdayShort() {\n    return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the human readable long weekday, such as 'Monday'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n   * @type {string}\n   */\n  get weekdayLong() {\n    return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the UTC offset of this DateTime in minutes\n   * @example DateTime.now().offset //=> -240\n   * @example DateTime.utc().offset //=> 0\n   * @type {number}\n   */\n  get offset() {\n    return this.isValid ? +this.o : NaN;\n  }\n\n  /**\n   * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameShort() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"short\",\n        locale: this.locale\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameLong() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"long\",\n        locale: this.locale\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get whether this zone's offset ever changes, as in a DST.\n   * @type {boolean}\n   */\n  get isOffsetFixed() {\n    return this.isValid ? this.zone.universal : null;\n  }\n\n  /**\n   * Get whether the DateTime is in a DST.\n   * @type {boolean}\n   */\n  get isInDST() {\n    if (this.isOffsetFixed) {\n      return false;\n    } else {\n      return (\n        this.offset > this.set({ month: 1 }).offset || this.offset > this.set({ month: 5 }).offset\n      );\n    }\n  }\n\n  /**\n   * Returns true if this DateTime is in a leap year, false otherwise\n   * @example DateTime.local(2016).isInLeapYear //=> true\n   * @example DateTime.local(2013).isInLeapYear //=> false\n   * @type {boolean}\n   */\n  get isInLeapYear() {\n    return isLeapYear(this.year);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's month\n   * @example DateTime.local(2016, 2).daysInMonth //=> 29\n   * @example DateTime.local(2016, 3).daysInMonth //=> 31\n   * @type {number}\n   */\n  get daysInMonth() {\n    return daysInMonth(this.year, this.month);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's year\n   * @example DateTime.local(2016).daysInYear //=> 366\n   * @example DateTime.local(2013).daysInYear //=> 365\n   * @type {number}\n   */\n  get daysInYear() {\n    return this.isValid ? daysInYear(this.year) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2004).weeksInWeekYear //=> 53\n   * @example DateTime.local(2013).weeksInWeekYear //=> 52\n   * @type {number}\n   */\n  get weeksInWeekYear() {\n    return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n  }\n\n  /**\n   * Returns the resolved Intl options for this DateTime.\n   * This is useful in understanding the behavior of formatting methods\n   * @param {Object} opts - the same options as toLocaleString\n   * @return {Object}\n   */\n  resolvedLocaleOpts(opts = {}) {\n    const { locale, numberingSystem, calendar } = Formatter.create(\n      this.loc.clone(opts),\n      opts\n    ).resolvedOptions(this);\n    return { locale, numberingSystem, outputCalendar: calendar };\n  }\n\n  // TRANSFORM\n\n  /**\n   * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to {@link setZone}('utc')\n   * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n   * @param {Object} [opts={}] - options to pass to `setZone()`\n   * @return {DateTime}\n   */\n  toUTC(offset = 0, opts = {}) {\n    return this.setZone(FixedOffsetZone.instance(offset), opts);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to `setZone('local')`\n   * @return {DateTime}\n   */\n  toLocal() {\n    return this.setZone(Settings.defaultZone);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n   *\n   * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones.\n   * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n   * @return {DateTime}\n   */\n  setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n    zone = normalizeZone(zone, Settings.defaultZone);\n    if (zone.equals(this.zone)) {\n      return this;\n    } else if (!zone.isValid) {\n      return DateTime.invalid(unsupportedZone(zone));\n    } else {\n      let newTS = this.ts;\n      if (keepLocalTime || keepCalendarTime) {\n        const offsetGuess = zone.offset(this.ts);\n        const asObj = this.toObject();\n        [newTS] = objToTS(asObj, offsetGuess, zone);\n      }\n      return clone(this, { ts: newTS, zone });\n    }\n  }\n\n  /**\n   * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n   * @param {Object} properties - the properties to set\n   * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n   * @return {DateTime}\n   */\n  reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n    return clone(this, { loc });\n  }\n\n  /**\n   * \"Set\" the locale. Returns a newly-constructed DateTime.\n   * Just a convenient alias for reconfigure({ locale })\n   * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n   * @return {DateTime}\n   */\n  setLocale(locale) {\n    return this.reconfigure({ locale });\n  }\n\n  /**\n   * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n   * You can only set units with this method; for \"setting\" metadata, see {@link reconfigure} and {@link setZone}.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dt.set({ year: 2017 })\n   * @example dt.set({ hour: 8, minute: 30 })\n   * @example dt.set({ weekday: 5 })\n   * @example dt.set({ year: 2005, ordinal: 234 })\n   * @return {DateTime}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const normalized = normalizeObject(values, normalizeUnit, []),\n      settingWeekStuff =\n        !isUndefined(normalized.weekYear) ||\n        !isUndefined(normalized.weekNumber) ||\n        !isUndefined(normalized.weekday),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    let mixed;\n    if (settingWeekStuff) {\n      mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized));\n    } else if (!isUndefined(normalized.ordinal)) {\n      mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized));\n    } else {\n      mixed = Object.assign(this.toObject(), normalized);\n\n      // if we didn't set the day but we ended up on an overflow date,\n      // use the last day of the right month\n      if (isUndefined(normalized.day)) {\n        mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n      }\n    }\n\n    const [ts, o] = objToTS(mixed, this.o, this.zone);\n    return clone(this, { ts, o });\n  }\n\n  /**\n   * Add a period of time to this DateTime and return the resulting DateTime\n   *\n   * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @example DateTime.now().plus(123) //~> in 123 milliseconds\n   * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n   * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n   * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n   * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n   * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n   * @return {DateTime}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n    const dur = friendlyDuration(duration);\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * Subtract a period of time to this DateTime and return the resulting DateTime\n   * See {@link plus}\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   @return {DateTime}\n  */\n  minus(duration) {\n    if (!this.isValid) return this;\n    const dur = friendlyDuration(duration).negate();\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * \"Set\" this DateTime to the beginning of a unit of time.\n   * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n   * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n   * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n   * @return {DateTime}\n   */\n  startOf(unit) {\n    if (!this.isValid) return this;\n    const o = {},\n      normalizedUnit = Duration.normalizeUnit(unit);\n    switch (normalizedUnit) {\n      case \"years\":\n        o.month = 1;\n      // falls through\n      case \"quarters\":\n      case \"months\":\n        o.day = 1;\n      // falls through\n      case \"weeks\":\n      case \"days\":\n        o.hour = 0;\n      // falls through\n      case \"hours\":\n        o.minute = 0;\n      // falls through\n      case \"minutes\":\n        o.second = 0;\n      // falls through\n      case \"seconds\":\n        o.millisecond = 0;\n        break;\n      case \"milliseconds\":\n        break;\n      // no default, invalid units throw in normalizeUnit()\n    }\n\n    if (normalizedUnit === \"weeks\") {\n      o.weekday = 1;\n    }\n\n    if (normalizedUnit === \"quarters\") {\n      const q = Math.ceil(this.month / 3);\n      o.month = (q - 1) * 3 + 1;\n    }\n\n    return this.set(o);\n  }\n\n  /**\n   * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n   * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n   * @return {DateTime}\n   */\n  endOf(unit) {\n    return this.isValid\n      ? this.plus({ [unit]: 1 })\n          .startOf(unit)\n          .minus(1)\n      : this;\n  }\n\n  // OUTPUT\n\n  /**\n   * Returns a string representation of this DateTime formatted according to the specified format string.\n   * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens).\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n   * @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens\n   * @param {string} fmt - the format string\n   * @param {Object} opts - opts to override the configuration options\n   * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n   * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n   * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n   * of the DateTime in the assigned locale.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options\n   * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n   * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n   * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n   * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n   * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n   * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n   * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32'\n   * @return {string}\n   */\n  toLocaleString(opts = Formats.DATE_SHORT) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n   * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n   * @example DateTime.now().toLocaleParts(); //=> [\n   *                                   //=>   { type: 'day', value: '25' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'month', value: '05' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'year', value: '1982' }\n   *                                   //=> ]\n   */\n  toLocaleParts(opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n      : [];\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n   * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n   * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n   * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n   * @return {string}\n   */\n  toISO(opts = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    return `${this.toISODate(opts)}T${this.toISOTime(opts)}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's date component\n   * @param {Object} opts - options\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n   * @return {string}\n   */\n  toISODate({ format = \"extended\" } = {}) {\n    let fmt = format === \"basic\" ? \"yyyyMMdd\" : \"yyyy-MM-dd\";\n    if (this.year > 9999) {\n      fmt = \"+\" + fmt;\n    }\n\n    return toTechFormat(this, fmt);\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's week date\n   * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n   * @return {string}\n   */\n  toISOWeekDate() {\n    return toTechFormat(this, \"kkkk-'W'WW-c\");\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's time component\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n   * @return {string}\n   */\n  toISOTime({\n    suppressMilliseconds = false,\n    suppressSeconds = false,\n    includeOffset = true,\n    includePrefix = false,\n    format = \"extended\"\n  } = {}) {\n    return toTechTimeFormat(this, {\n      suppressSeconds,\n      suppressMilliseconds,\n      includeOffset,\n      includePrefix,\n      format\n    });\n  }\n\n  /**\n   * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC\n   * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n   * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n   * @return {string}\n   */\n  toRFC2822() {\n    return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in HTTP headers.\n   * Specifically, the string conforms to RFC 1123.\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n   * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n   * @return {string}\n   */\n  toHTTP() {\n    return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Date\n   * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n   * @return {string}\n   */\n  toSQLDate() {\n    return toTechFormat(this, \"yyyy-MM-dd\");\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Time\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n   * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n   * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n   * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n   * @return {string}\n   */\n  toSQLTime({ includeOffset = true, includeZone = false } = {}) {\n    return toTechTimeFormat(this, {\n      includeOffset,\n      includeZone,\n      spaceZone: true\n    });\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n   * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n   * @return {string}\n   */\n  toSQL(opts = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for debugging\n   * @return {string}\n   */\n  toString() {\n    return this.isValid ? this.toISO() : INVALID;\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime.\n   * @return {number}\n   */\n  toMillis() {\n    return this.isValid ? this.ts : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds of this DateTime.\n   * @return {number}\n   */\n  toSeconds() {\n    return this.isValid ? this.ts / 1000 : NaN;\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a BSON serializable equivalent to this DateTime.\n   * @return {Date}\n   */\n  toBSON() {\n    return this.toJSDate();\n  }\n\n  /**\n   * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n   * @param opts - options for generating the object\n   * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n   * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n   * @return {Object}\n   */\n  toObject(opts = {}) {\n    if (!this.isValid) return {};\n\n    const base = Object.assign({}, this.c);\n\n    if (opts.includeConfig) {\n      base.outputCalendar = this.outputCalendar;\n      base.numberingSystem = this.loc.numberingSystem;\n      base.locale = this.loc.locale;\n    }\n    return base;\n  }\n\n  /**\n   * Returns a JavaScript Date equivalent to this DateTime.\n   * @return {Date}\n   */\n  toJSDate() {\n    return new Date(this.isValid ? this.ts : NaN);\n  }\n\n  // COMPARE\n\n  /**\n   * Return the difference between two DateTimes as a Duration.\n   * @param {DateTime} otherDateTime - the DateTime to compare this one to\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example\n   * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n   *     i2 = DateTime.fromISO('1983-10-14T10:30');\n   * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n   * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n   * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n   * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n   * @return {Duration}\n   */\n  diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n    if (!this.isValid || !otherDateTime.isValid) {\n      return Duration.invalid(\n        this.invalid || otherDateTime.invalid,\n        \"created by diffing an invalid DateTime\"\n      );\n    }\n\n    const durOpts = Object.assign(\n      { locale: this.locale, numberingSystem: this.numberingSystem },\n      opts\n    );\n\n    const units = maybeArray(unit).map(Duration.normalizeUnit),\n      otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n      earlier = otherIsLater ? this : otherDateTime,\n      later = otherIsLater ? otherDateTime : this,\n      diffed = diff(earlier, later, units, durOpts);\n\n    return otherIsLater ? diffed.negate() : diffed;\n  }\n\n  /**\n   * Return the difference between this DateTime and right now.\n   * See {@link diff}\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  diffNow(unit = \"milliseconds\", opts = {}) {\n    return this.diff(DateTime.now(), unit, opts);\n  }\n\n  /**\n   * Return an Interval spanning between this DateTime and another DateTime\n   * @param {DateTime} otherDateTime - the other end point of the Interval\n   * @return {Interval}\n   */\n  until(otherDateTime) {\n    return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n  }\n\n  /**\n   * Return whether this DateTime is in the same unit of time as another DateTime.\n   * Higher-order units must also be identical for this function to return `true`.\n   * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link setZone} to convert one of the dates if needed.\n   * @param {DateTime} otherDateTime - the other DateTime\n   * @param {string} unit - the unit of time to check sameness on\n   * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n   * @return {boolean}\n   */\n  hasSame(otherDateTime, unit) {\n    if (!this.isValid) return false;\n\n    const inputMs = otherDateTime.valueOf();\n    const otherZoneDateTime = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n    return otherZoneDateTime.startOf(unit) <= inputMs && inputMs <= otherZoneDateTime.endOf(unit);\n  }\n\n  /**\n   * Equality check\n   * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid.\n   * To compare just the millisecond values, use `+dt1 === +dt2`.\n   * @param {DateTime} other - the other DateTime\n   * @return {boolean}\n   */\n  equals(other) {\n    return (\n      this.isValid &&\n      other.isValid &&\n      this.valueOf() === other.valueOf() &&\n      this.zone.equals(other.zone) &&\n      this.loc.equals(other.loc)\n    );\n  }\n\n  /**\n   * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n   * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n   * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n   * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n   * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n   * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n   * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n   * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n   */\n  toRelative(options = {}) {\n    if (!this.isValid) return null;\n    const base = options.base || DateTime.fromObject({ zone: this.zone }),\n      padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n    let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n    let unit = options.unit;\n    if (Array.isArray(options.unit)) {\n      units = options.unit;\n      unit = undefined;\n    }\n    return diffRelative(\n      base,\n      this.plus(padding),\n      Object.assign(options, {\n        numeric: \"always\",\n        units,\n        unit\n      })\n    );\n  }\n\n  /**\n   * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n   * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n   * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n   * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n   */\n  toRelativeCalendar(options = {}) {\n    if (!this.isValid) return null;\n\n    return diffRelative(\n      options.base || DateTime.fromObject({ zone: this.zone }),\n      this,\n      Object.assign(options, {\n        numeric: \"auto\",\n        units: [\"years\", \"months\", \"days\"],\n        calendary: true\n      })\n    );\n  }\n\n  /**\n   * Return the min of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n   * @return {DateTime} the min DateTime, or undefined if called with no argument\n   */\n  static min(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, i => i.valueOf(), Math.min);\n  }\n\n  /**\n   * Return the max of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n   * @return {DateTime} the max DateTime, or undefined if called with no argument\n   */\n  static max(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, i => i.valueOf(), Math.max);\n  }\n\n  // MISC\n\n  /**\n   * Explain how a string would be parsed by fromFormat()\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see description)\n   * @param {Object} options - options taken by fromFormat()\n   * @return {Object}\n   */\n  static fromFormatExplain(text, fmt, options = {}) {\n    const { locale = null, numberingSystem = null } = options,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true\n      });\n    return explainFromTokens(localeToUse, text, fmt);\n  }\n\n  /**\n   * @deprecated use fromFormatExplain instead\n   */\n  static fromStringExplain(text, fmt, options = {}) {\n    return DateTime.fromFormatExplain(text, fmt, options);\n  }\n\n  // FORMAT PRESETS\n\n  /**\n   * {@link toLocaleString} format like 10/14/1983\n   * @type {Object}\n   */\n  static get DATE_SHORT() {\n    return Formats.DATE_SHORT;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED() {\n    return Formats.DATE_MED;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'Fri, Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED_WITH_WEEKDAY() {\n    return Formats.DATE_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_FULL() {\n    return Formats.DATE_FULL;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'Tuesday, October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_HUGE() {\n    return Formats.DATE_HUGE;\n  }\n\n  /**\n   * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_SIMPLE() {\n    return Formats.TIME_SIMPLE;\n  }\n\n  /**\n   * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SECONDS() {\n    return Formats.TIME_WITH_SECONDS;\n  }\n\n  /**\n   * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SHORT_OFFSET() {\n    return Formats.TIME_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_LONG_OFFSET() {\n    return Formats.TIME_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link toLocaleString} format like '09:30', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_SIMPLE() {\n    return Formats.TIME_24_SIMPLE;\n  }\n\n  /**\n   * {@link toLocaleString} format like '09:30:23', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SECONDS() {\n    return Formats.TIME_24_WITH_SECONDS;\n  }\n\n  /**\n   * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SHORT_OFFSET() {\n    return Formats.TIME_24_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_LONG_OFFSET() {\n    return Formats.TIME_24_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT() {\n    return Formats.DATETIME_SHORT;\n  }\n\n  /**\n   * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT_WITH_SECONDS() {\n    return Formats.DATETIME_SHORT_WITH_SECONDS;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED() {\n    return Formats.DATETIME_MED;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_SECONDS() {\n    return Formats.DATETIME_MED_WITH_SECONDS;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_WEEKDAY() {\n    return Formats.DATETIME_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL() {\n    return Formats.DATETIME_FULL;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL_WITH_SECONDS() {\n    return Formats.DATETIME_FULL_WITH_SECONDS;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE() {\n    return Formats.DATETIME_HUGE;\n  }\n\n  /**\n   * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE_WITH_SECONDS() {\n    return Formats.DATETIME_HUGE_WITH_SECONDS;\n  }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n  if (DateTime.isDateTime(dateTimeish)) {\n    return dateTimeish;\n  } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n    return DateTime.fromJSDate(dateTimeish);\n  } else if (dateTimeish && typeof dateTimeish === \"object\") {\n    return DateTime.fromObject(dateTimeish);\n  } else {\n    throw new InvalidArgumentError(\n      `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n    );\n  }\n}\n","import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport LocalZone from \"./zones/localZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"1.28.0\";\n\nexport {\n  VERSION,\n  DateTime,\n  Duration,\n  Interval,\n  Info,\n  Zone,\n  FixedOffsetZone,\n  IANAZone,\n  InvalidZone,\n  LocalZone,\n  Settings\n};\n","export default function objectsAreEqual(a, b) {\n  function compare(x, y) {\n    let property;\n    if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') {\n      return true;\n    }\n\n    if (x === y) {\n      return true;\n    }\n\n    if (!(x instanceof Object && y instanceof Object)) {\n      return false;\n    }\n\n    for (property in y) {\n      if (y.hasOwnProperty(property) !== x.hasOwnProperty(property)) {\n        return false;\n      } else if (typeof y[property] !== typeof x[property]) {\n        return false;\n      }\n    }\n\n    for (property in x) {\n      if (y.hasOwnProperty(property) !== x.hasOwnProperty(property)) {\n        return false;\n      } else if (typeof y[property] !== typeof x[property]) {\n        return false;\n      }\n\n      switch (typeof x[property]) {\n        case 'object':\n          if (!compare(x[property], y[property])) {\n            return false;\n          }\n          break;\n        default:\n          if (x[property] !== y[property]) {\n            return false;\n          }\n          break;\n      }\n    }\n\n    return true;\n  }\n\n  return compare(a, b);\n}\n","export var TYPE;\n(function (TYPE) {\n    /**\n     * Raw text\n     */\n    TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n    /**\n     * Variable w/o any format, e.g `var` in `this is a {var}`\n     */\n    TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n    /**\n     * Variable w/ number format\n     */\n    TYPE[TYPE[\"number\"] = 2] = \"number\";\n    /**\n     * Variable w/ date format\n     */\n    TYPE[TYPE[\"date\"] = 3] = \"date\";\n    /**\n     * Variable w/ time format\n     */\n    TYPE[TYPE[\"time\"] = 4] = \"time\";\n    /**\n     * Variable w/ select format\n     */\n    TYPE[TYPE[\"select\"] = 5] = \"select\";\n    /**\n     * Variable w/ plural format\n     */\n    TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n    /**\n     * Only possible within plural argument.\n     * This is the `#` symbol that will be substituted with the count.\n     */\n    TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n    /**\n     * XML-like tag\n     */\n    TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n    SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n    SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n    return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n    return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n    return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n    return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n    return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n    return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n    return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n    return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n    return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n    return {\n        type: TYPE.literal,\n        value: value,\n    };\n}\nexport function createNumberElement(value, style) {\n    return {\n        type: TYPE.number,\n        value: value,\n        style: style,\n    };\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from) {\r\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n        to[j] = from[i];\r\n    return to;\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, 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 { __assign } from \"tslib\";\n/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n    var result = {};\n    skeleton.replace(DATE_TIME_REGEX, function (match) {\n        var len = match.length;\n        switch (match[0]) {\n            // Era\n            case 'G':\n                result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            // Year\n            case 'y':\n                result.year = len === 2 ? '2-digit' : 'numeric';\n                break;\n            case 'Y':\n            case 'u':\n            case 'U':\n            case 'r':\n                throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n            // Quarter\n            case 'q':\n            case 'Q':\n                throw new RangeError('`q/Q` (quarter) patterns are not supported');\n            // Month\n            case 'M':\n            case 'L':\n                result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n                break;\n            // Week\n            case 'w':\n            case 'W':\n                throw new RangeError('`w/W` (week) patterns are not supported');\n            case 'd':\n                result.day = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'D':\n            case 'F':\n            case 'g':\n                throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n            // Weekday\n            case 'E':\n                result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n                break;\n            case 'e':\n                if (len < 4) {\n                    throw new RangeError('`e..eee` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            case 'c':\n                if (len < 4) {\n                    throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            // Period\n            case 'a': // AM, PM\n                result.hour12 = true;\n                break;\n            case 'b': // am, pm, noon, midnight\n            case 'B': // flexible day periods\n                throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n            // Hour\n            case 'h':\n                result.hourCycle = 'h12';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'H':\n                result.hourCycle = 'h23';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'K':\n                result.hourCycle = 'h11';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'k':\n                result.hourCycle = 'h24';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'j':\n            case 'J':\n            case 'C':\n                throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n            // Minute\n            case 'm':\n                result.minute = ['numeric', '2-digit'][len - 1];\n                break;\n            // Second\n            case 's':\n                result.second = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'S':\n            case 'A':\n                throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n            // Zone\n            case 'z': // 1..3, 4: specific non-location format\n                result.timeZoneName = len < 4 ? 'short' : 'long';\n                break;\n            case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n            case 'O': // 1, 4: miliseconds in day short, long\n            case 'v': // 1, 4: generic non-location format\n            case 'V': // 1, 2, 3, 4: time zone ID or city\n            case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n            case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n                throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n        }\n        return '';\n    });\n    return result;\n}\nfunction icuUnitToEcma(unit) {\n    return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n    var result = {};\n    str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n        // @@@ case\n        if (typeof g2 !== 'string') {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits = g1.length;\n        }\n        // @@@+ case\n        else if (g2 === '+') {\n            result.minimumSignificantDigits = g1.length;\n        }\n        // .### case\n        else if (g1[0] === '#') {\n            result.maximumSignificantDigits = g1.length;\n        }\n        // .@@## or .@@@ case\n        else {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits =\n                g1.length + (typeof g2 === 'string' ? g2.length : 0);\n        }\n        return '';\n    });\n    return result;\n}\nfunction parseSign(str) {\n    switch (str) {\n        case 'sign-auto':\n            return {\n                signDisplay: 'auto',\n            };\n        case 'sign-accounting':\n        case '()':\n            return {\n                currencySign: 'accounting',\n            };\n        case 'sign-always':\n        case '+!':\n            return {\n                signDisplay: 'always',\n            };\n        case 'sign-accounting-always':\n        case '()!':\n            return {\n                signDisplay: 'always',\n                currencySign: 'accounting',\n            };\n        case 'sign-except-zero':\n        case '+?':\n            return {\n                signDisplay: 'exceptZero',\n            };\n        case 'sign-accounting-except-zero':\n        case '()?':\n            return {\n                signDisplay: 'exceptZero',\n                currencySign: 'accounting',\n            };\n        case 'sign-never':\n        case '+_':\n            return {\n                signDisplay: 'never',\n            };\n    }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n    // Engineering\n    var result;\n    if (stem[0] === 'E' && stem[1] === 'E') {\n        result = {\n            notation: 'engineering',\n        };\n        stem = stem.slice(2);\n    }\n    else if (stem[0] === 'E') {\n        result = {\n            notation: 'scientific',\n        };\n        stem = stem.slice(1);\n    }\n    if (result) {\n        var signDisplay = stem.slice(0, 2);\n        if (signDisplay === '+!') {\n            result.signDisplay = 'always';\n            stem = stem.slice(2);\n        }\n        else if (signDisplay === '+?') {\n            result.signDisplay = 'exceptZero';\n            stem = stem.slice(2);\n        }\n        if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n            throw new Error('Malformed concise eng/scientific notation');\n        }\n        result.minimumIntegerDigits = stem.length;\n    }\n    return result;\n}\nfunction parseNotationOptions(opt) {\n    var result = {};\n    var signOpts = parseSign(opt);\n    if (signOpts) {\n        return signOpts;\n    }\n    return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n    var result = {};\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        switch (token.stem) {\n            case 'percent':\n            case '%':\n                result.style = 'percent';\n                continue;\n            case '%x100':\n                result.style = 'percent';\n                result.scale = 100;\n                continue;\n            case 'currency':\n                result.style = 'currency';\n                result.currency = token.options[0];\n                continue;\n            case 'group-off':\n            case ',_':\n                result.useGrouping = false;\n                continue;\n            case 'precision-integer':\n            case '.':\n                result.maximumFractionDigits = 0;\n                continue;\n            case 'measure-unit':\n            case 'unit':\n                result.style = 'unit';\n                result.unit = icuUnitToEcma(token.options[0]);\n                continue;\n            case 'compact-short':\n            case 'K':\n                result.notation = 'compact';\n                result.compactDisplay = 'short';\n                continue;\n            case 'compact-long':\n            case 'KK':\n                result.notation = 'compact';\n                result.compactDisplay = 'long';\n                continue;\n            case 'scientific':\n                result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'engineering':\n                result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'notation-simple':\n                result.notation = 'standard';\n                continue;\n            // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n            case 'unit-width-narrow':\n                result.currencyDisplay = 'narrowSymbol';\n                result.unitDisplay = 'narrow';\n                continue;\n            case 'unit-width-short':\n                result.currencyDisplay = 'code';\n                result.unitDisplay = 'short';\n                continue;\n            case 'unit-width-full-name':\n                result.currencyDisplay = 'name';\n                result.unitDisplay = 'long';\n                continue;\n            case 'unit-width-iso-code':\n                result.currencyDisplay = 'symbol';\n                continue;\n            case 'scale':\n                result.scale = parseFloat(token.options[0]);\n                continue;\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n            case 'integer-width':\n                if (token.options.length > 1) {\n                    throw new RangeError('integer-width stems only accept a single optional option');\n                }\n                token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n                    if (g1) {\n                        result.minimumIntegerDigits = g2.length;\n                    }\n                    else if (g3 && g4) {\n                        throw new Error('We currently do not support maximum integer digits');\n                    }\n                    else if (g5) {\n                        throw new Error('We currently do not support exact integer digits');\n                    }\n                    return '';\n                });\n                continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n        if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n            result.minimumIntegerDigits = token.stem.length;\n            continue;\n        }\n        if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n            // Precision\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n            // precision-integer case\n            if (token.options.length > 1) {\n                throw new RangeError('Fraction-precision stems only accept a single optional option');\n            }\n            token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n                // .000* case (before ICU67 it was .000+)\n                if (g2 === '*') {\n                    result.minimumFractionDigits = g1.length;\n                }\n                // .### case\n                else if (g3 && g3[0] === '#') {\n                    result.maximumFractionDigits = g3.length;\n                }\n                // .00## case\n                else if (g4 && g5) {\n                    result.minimumFractionDigits = g4.length;\n                    result.maximumFractionDigits = g4.length + g5.length;\n                }\n                else {\n                    result.minimumFractionDigits = g1.length;\n                    result.maximumFractionDigits = g1.length;\n                }\n                return '';\n            });\n            if (token.options.length) {\n                result = __assign(__assign({}, result), parseSignificantPrecision(token.options[0]));\n            }\n            continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n        if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n            result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n            continue;\n        }\n        var signOpts = parseSign(token.stem);\n        if (signOpts) {\n            result = __assign(__assign({}, result), signOpts);\n        }\n        var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n        if (conciseScientificAndEngineeringOpts) {\n            result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n        }\n    }\n    return result;\n}\n","// @ts-nocheck\nimport { __assign, __extends } from \"tslib\";\n// @generated\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { parseDateTimeSkeleton, parseNumberSkeleton } from './skeleton';\nvar SyntaxError = /** @class */ (function (_super) {\n    __extends(SyntaxError, _super);\n    function SyntaxError(message, expected, found, location) {\n        var _this = _super.call(this) || this;\n        _this.message = message;\n        _this.expected = expected;\n        _this.found = found;\n        _this.location = location;\n        _this.name = \"SyntaxError\";\n        if (typeof Error.captureStackTrace === \"function\") {\n            Error.captureStackTrace(_this, SyntaxError);\n        }\n        return _this;\n    }\n    SyntaxError.buildMessage = function (expected, found) {\n        function hex(ch) {\n            return ch.charCodeAt(0).toString(16).toUpperCase();\n        }\n        function literalEscape(s) {\n            return s\n                .replace(/\\\\/g, \"\\\\\\\\\")\n                .replace(/\"/g, \"\\\\\\\"\")\n                .replace(/\\0/g, \"\\\\0\")\n                .replace(/\\t/g, \"\\\\t\")\n                .replace(/\\n/g, \"\\\\n\")\n                .replace(/\\r/g, \"\\\\r\")\n                .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n                .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n        }\n        function classEscape(s) {\n            return s\n                .replace(/\\\\/g, \"\\\\\\\\\")\n                .replace(/\\]/g, \"\\\\]\")\n                .replace(/\\^/g, \"\\\\^\")\n                .replace(/-/g, \"\\\\-\")\n                .replace(/\\0/g, \"\\\\0\")\n                .replace(/\\t/g, \"\\\\t\")\n                .replace(/\\n/g, \"\\\\n\")\n                .replace(/\\r/g, \"\\\\r\")\n                .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n                .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n        }\n        function describeExpectation(expectation) {\n            switch (expectation.type) {\n                case \"literal\":\n                    return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n                case \"class\":\n                    var escapedParts = expectation.parts.map(function (part) {\n                        return Array.isArray(part)\n                            ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n                            : classEscape(part);\n                    });\n                    return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n                case \"any\":\n                    return \"any character\";\n                case \"end\":\n                    return \"end of input\";\n                case \"other\":\n                    return expectation.description;\n            }\n        }\n        function describeExpected(expected1) {\n            var descriptions = expected1.map(describeExpectation);\n            var i;\n            var j;\n            descriptions.sort();\n            if (descriptions.length > 0) {\n                for (i = 1, j = 1; i < descriptions.length; i++) {\n                    if (descriptions[i - 1] !== descriptions[i]) {\n                        descriptions[j] = descriptions[i];\n                        j++;\n                    }\n                }\n                descriptions.length = j;\n            }\n            switch (descriptions.length) {\n                case 1:\n                    return descriptions[0];\n                case 2:\n                    return descriptions[0] + \" or \" + descriptions[1];\n                default:\n                    return descriptions.slice(0, -1).join(\", \")\n                        + \", or \"\n                        + descriptions[descriptions.length - 1];\n            }\n        }\n        function describeFound(found1) {\n            return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n        }\n        return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n    };\n    return SyntaxError;\n}(Error));\nexport { SyntaxError };\nfunction peg$parse(input, options) {\n    options = options !== undefined ? options : {};\n    var peg$FAILED = {};\n    var peg$startRuleFunctions = { start: peg$parsestart };\n    var peg$startRuleFunction = peg$parsestart;\n    var peg$c0 = function () { return !ignoreTag; };\n    var peg$c1 = function (x) { return x; };\n    var peg$c2 = function () { return ignoreTag; };\n    var peg$c3 = \"<\";\n    var peg$c4 = peg$literalExpectation(\"<\", false);\n    var peg$c5 = function (parts) {\n        return parts.join('');\n    };\n    var peg$c6 = function () { return '<'; };\n    var peg$c7 = function (messageText) {\n        return __assign({ type: TYPE.literal, value: messageText }, insertLocation());\n    };\n    var peg$c8 = \"#\";\n    var peg$c9 = peg$literalExpectation(\"#\", false);\n    var peg$c10 = function () {\n        return __assign({ type: TYPE.pound }, insertLocation());\n    };\n    var peg$c11 = peg$otherExpectation(\"tagElement\");\n    var peg$c12 = function (open, children, close) {\n        if (open !== close) {\n            error(\"Mismatch tag \\\"\" + open + \"\\\" !== \\\"\" + close + \"\\\"\", location());\n        }\n        return __assign({ type: TYPE.tag, value: open, children: children }, insertLocation());\n    };\n    var peg$c13 = \"/>\";\n    var peg$c14 = peg$literalExpectation(\"/>\", false);\n    var peg$c15 = function (value) {\n        return __assign({ type: TYPE.literal, value: value.join('') }, insertLocation());\n    };\n    var peg$c16 = \">\";\n    var peg$c17 = peg$literalExpectation(\">\", false);\n    var peg$c18 = function (tag) { return tag; };\n    var peg$c19 = \"</\";\n    var peg$c20 = peg$literalExpectation(\"</\", false);\n    var peg$c21 = peg$otherExpectation(\"argumentElement\");\n    var peg$c22 = \"{\";\n    var peg$c23 = peg$literalExpectation(\"{\", false);\n    var peg$c24 = \"}\";\n    var peg$c25 = peg$literalExpectation(\"}\", false);\n    var peg$c26 = function (value) {\n        return __assign({ type: TYPE.argument, value: value }, insertLocation());\n    };\n    var peg$c27 = peg$otherExpectation(\"numberSkeletonId\");\n    var peg$c28 = /^['\\/{}]/;\n    var peg$c29 = peg$classExpectation([\"'\", \"/\", \"{\", \"}\"], false, false);\n    var peg$c30 = peg$anyExpectation();\n    var peg$c31 = peg$otherExpectation(\"numberSkeletonTokenOption\");\n    var peg$c32 = \"/\";\n    var peg$c33 = peg$literalExpectation(\"/\", false);\n    var peg$c34 = function (option) { return option; };\n    var peg$c35 = peg$otherExpectation(\"numberSkeletonToken\");\n    var peg$c36 = function (stem, options) {\n        return { stem: stem, options: options };\n    };\n    var peg$c37 = function (tokens) {\n        return __assign({ type: SKELETON_TYPE.number, tokens: tokens, parsedOptions: shouldParseSkeleton ? parseNumberSkeleton(tokens) : {} }, insertLocation());\n    };\n    var peg$c38 = \"::\";\n    var peg$c39 = peg$literalExpectation(\"::\", false);\n    var peg$c40 = function (skeleton) { return skeleton; };\n    var peg$c41 = function () { messageCtx.push('numberArgStyle'); return true; };\n    var peg$c42 = function (style) {\n        messageCtx.pop();\n        return style.replace(/\\s*$/, '');\n    };\n    var peg$c43 = \",\";\n    var peg$c44 = peg$literalExpectation(\",\", false);\n    var peg$c45 = \"number\";\n    var peg$c46 = peg$literalExpectation(\"number\", false);\n    var peg$c47 = function (value, type, style) {\n        return __assign({ type: type === 'number' ? TYPE.number : type === 'date' ? TYPE.date : TYPE.time, style: style && style[2], value: value }, insertLocation());\n    };\n    var peg$c48 = \"'\";\n    var peg$c49 = peg$literalExpectation(\"'\", false);\n    var peg$c50 = /^[^']/;\n    var peg$c51 = peg$classExpectation([\"'\"], true, false);\n    var peg$c52 = /^[^a-zA-Z'{}]/;\n    var peg$c53 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"'\", \"{\", \"}\"], true, false);\n    var peg$c54 = /^[a-zA-Z]/;\n    var peg$c55 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n    var peg$c56 = function (pattern) {\n        return __assign({ type: SKELETON_TYPE.dateTime, pattern: pattern, parsedOptions: shouldParseSkeleton ? parseDateTimeSkeleton(pattern) : {} }, insertLocation());\n    };\n    var peg$c57 = function () { messageCtx.push('dateOrTimeArgStyle'); return true; };\n    var peg$c58 = \"date\";\n    var peg$c59 = peg$literalExpectation(\"date\", false);\n    var peg$c60 = \"time\";\n    var peg$c61 = peg$literalExpectation(\"time\", false);\n    var peg$c62 = \"plural\";\n    var peg$c63 = peg$literalExpectation(\"plural\", false);\n    var peg$c64 = \"selectordinal\";\n    var peg$c65 = peg$literalExpectation(\"selectordinal\", false);\n    var peg$c66 = \"offset:\";\n    var peg$c67 = peg$literalExpectation(\"offset:\", false);\n    var peg$c68 = function (value, pluralType, offset, options) {\n        return __assign({ type: TYPE.plural, pluralType: pluralType === 'plural' ? 'cardinal' : 'ordinal', value: value, offset: offset ? offset[2] : 0, options: options.reduce(function (all, _a) {\n                var id = _a.id, value = _a.value, optionLocation = _a.location;\n                if (id in all) {\n                    error(\"Duplicate option \\\"\" + id + \"\\\" in plural element: \\\"\" + text() + \"\\\"\", location());\n                }\n                all[id] = {\n                    value: value,\n                    location: optionLocation\n                };\n                return all;\n            }, {}) }, insertLocation());\n    };\n    var peg$c69 = \"select\";\n    var peg$c70 = peg$literalExpectation(\"select\", false);\n    var peg$c71 = function (value, options) {\n        return __assign({ type: TYPE.select, value: value, options: options.reduce(function (all, _a) {\n                var id = _a.id, value = _a.value, optionLocation = _a.location;\n                if (id in all) {\n                    error(\"Duplicate option \\\"\" + id + \"\\\" in select element: \\\"\" + text() + \"\\\"\", location());\n                }\n                all[id] = {\n                    value: value,\n                    location: optionLocation\n                };\n                return all;\n            }, {}) }, insertLocation());\n    };\n    var peg$c72 = \"=\";\n    var peg$c73 = peg$literalExpectation(\"=\", false);\n    var peg$c74 = function (id) { messageCtx.push('select'); return true; };\n    var peg$c75 = function (id, value) {\n        messageCtx.pop();\n        return __assign({ id: id,\n            value: value }, insertLocation());\n    };\n    var peg$c76 = function (id) { messageCtx.push('plural'); return true; };\n    var peg$c77 = function (id, value) {\n        messageCtx.pop();\n        return __assign({ id: id,\n            value: value }, insertLocation());\n    };\n    var peg$c78 = peg$otherExpectation(\"whitespace\");\n    var peg$c79 = /^[\\t-\\r \\x85\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n    var peg$c80 = peg$classExpectation([[\"\\t\", \"\\r\"], \" \", \"\\x85\", \"\\xA0\", \"\\u1680\", [\"\\u2000\", \"\\u200A\"], \"\\u2028\", \"\\u2029\", \"\\u202F\", \"\\u205F\", \"\\u3000\"], false, false);\n    var peg$c81 = peg$otherExpectation(\"syntax pattern\");\n    var peg$c82 = /^[!-\\/:-@[-\\^`{-~\\xA1-\\xA7\\xA9\\xAB\\xAC\\xAE\\xB0\\xB1\\xB6\\xBB\\xBF\\xD7\\xF7\\u2010-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]/;\n    var peg$c83 = peg$classExpectation([[\"!\", \"/\"], [\":\", \"@\"], [\"[\", \"^\"], \"`\", [\"{\", \"~\"], [\"\\xA1\", \"\\xA7\"], \"\\xA9\", \"\\xAB\", \"\\xAC\", \"\\xAE\", \"\\xB0\", \"\\xB1\", \"\\xB6\", \"\\xBB\", \"\\xBF\", \"\\xD7\", \"\\xF7\", [\"\\u2010\", \"\\u2027\"], [\"\\u2030\", \"\\u203E\"], [\"\\u2041\", \"\\u2053\"], [\"\\u2055\", \"\\u205E\"], [\"\\u2190\", \"\\u245F\"], [\"\\u2500\", \"\\u2775\"], [\"\\u2794\", \"\\u2BFF\"], [\"\\u2E00\", \"\\u2E7F\"], [\"\\u3001\", \"\\u3003\"], [\"\\u3008\", \"\\u3020\"], \"\\u3030\", \"\\uFD3E\", \"\\uFD3F\", \"\\uFE45\", \"\\uFE46\"], false, false);\n    var peg$c84 = peg$otherExpectation(\"optional whitespace\");\n    var peg$c85 = peg$otherExpectation(\"number\");\n    var peg$c86 = \"-\";\n    var peg$c87 = peg$literalExpectation(\"-\", false);\n    var peg$c88 = function (negative, num) {\n        return num\n            ? negative\n                ? -num\n                : num\n            : 0;\n    };\n    var peg$c89 = peg$otherExpectation(\"apostrophe\");\n    var peg$c90 = peg$otherExpectation(\"double apostrophes\");\n    var peg$c91 = \"''\";\n    var peg$c92 = peg$literalExpectation(\"''\", false);\n    var peg$c93 = function () { return \"'\"; };\n    var peg$c94 = function (escapedChar, quotedChars) {\n        return escapedChar + quotedChars.replace(\"''\", \"'\");\n    };\n    var peg$c95 = function (x) {\n        return (x !== '<' &&\n            x !== '{' &&\n            !(isInPluralOption() && x === '#') &&\n            !(isNestedMessageText() && x === '}'));\n    };\n    var peg$c96 = \"\\n\";\n    var peg$c97 = peg$literalExpectation(\"\\n\", false);\n    var peg$c98 = function (x) {\n        return x === '<' || x === '>' || x === '{' || x === '}' || (isInPluralOption() && x === '#');\n    };\n    var peg$c99 = peg$otherExpectation(\"argNameOrNumber\");\n    var peg$c100 = peg$otherExpectation(\"validTag\");\n    var peg$c101 = peg$otherExpectation(\"argNumber\");\n    var peg$c102 = \"0\";\n    var peg$c103 = peg$literalExpectation(\"0\", false);\n    var peg$c104 = function () { return 0; };\n    var peg$c105 = /^[1-9]/;\n    var peg$c106 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n    var peg$c107 = /^[0-9]/;\n    var peg$c108 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n    var peg$c109 = function (digits) {\n        return parseInt(digits.join(''), 10);\n    };\n    var peg$c110 = peg$otherExpectation(\"argName\");\n    var peg$c111 = peg$otherExpectation(\"tagName\");\n    var peg$currPos = 0;\n    var peg$savedPos = 0;\n    var peg$posDetailsCache = [{ line: 1, column: 1 }];\n    var peg$maxFailPos = 0;\n    var peg$maxFailExpected = [];\n    var peg$silentFails = 0;\n    var peg$result;\n    if (options.startRule !== undefined) {\n        if (!(options.startRule in peg$startRuleFunctions)) {\n            throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n        }\n        peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n    }\n    function text() {\n        return input.substring(peg$savedPos, peg$currPos);\n    }\n    function location() {\n        return peg$computeLocation(peg$savedPos, peg$currPos);\n    }\n    function expected(description, location1) {\n        location1 = location1 !== undefined\n            ? location1\n            : peg$computeLocation(peg$savedPos, peg$currPos);\n        throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n    }\n    function error(message, location1) {\n        location1 = location1 !== undefined\n            ? location1\n            : peg$computeLocation(peg$savedPos, peg$currPos);\n        throw peg$buildSimpleError(message, location1);\n    }\n    function peg$literalExpectation(text1, ignoreCase) {\n        return { type: \"literal\", text: text1, ignoreCase: ignoreCase };\n    }\n    function peg$classExpectation(parts, inverted, ignoreCase) {\n        return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n    }\n    function peg$anyExpectation() {\n        return { type: \"any\" };\n    }\n    function peg$endExpectation() {\n        return { type: \"end\" };\n    }\n    function peg$otherExpectation(description) {\n        return { type: \"other\", description: description };\n    }\n    function peg$computePosDetails(pos) {\n        var details = peg$posDetailsCache[pos];\n        var p;\n        if (details) {\n            return details;\n        }\n        else {\n            p = pos - 1;\n            while (!peg$posDetailsCache[p]) {\n                p--;\n            }\n            details = peg$posDetailsCache[p];\n            details = {\n                line: details.line,\n                column: details.column\n            };\n            while (p < pos) {\n                if (input.charCodeAt(p) === 10) {\n                    details.line++;\n                    details.column = 1;\n                }\n                else {\n                    details.column++;\n                }\n                p++;\n            }\n            peg$posDetailsCache[pos] = details;\n            return details;\n        }\n    }\n    function peg$computeLocation(startPos, endPos) {\n        var startPosDetails = peg$computePosDetails(startPos);\n        var endPosDetails = peg$computePosDetails(endPos);\n        return {\n            start: {\n                offset: startPos,\n                line: startPosDetails.line,\n                column: startPosDetails.column\n            },\n            end: {\n                offset: endPos,\n                line: endPosDetails.line,\n                column: endPosDetails.column\n            }\n        };\n    }\n    function peg$fail(expected1) {\n        if (peg$currPos < peg$maxFailPos) {\n            return;\n        }\n        if (peg$currPos > peg$maxFailPos) {\n            peg$maxFailPos = peg$currPos;\n            peg$maxFailExpected = [];\n        }\n        peg$maxFailExpected.push(expected1);\n    }\n    function peg$buildSimpleError(message, location1) {\n        return new SyntaxError(message, [], \"\", location1);\n    }\n    function peg$buildStructuredError(expected1, found, location1) {\n        return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n    }\n    function peg$parsestart() {\n        var s0;\n        s0 = peg$parsemessage();\n        return s0;\n    }\n    function peg$parsemessage() {\n        var s0, s1;\n        s0 = [];\n        s1 = peg$parsemessageElement();\n        while (s1 !== peg$FAILED) {\n            s0.push(s1);\n            s1 = peg$parsemessageElement();\n        }\n        return s0;\n    }\n    function peg$parsemessageElement() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        peg$savedPos = peg$currPos;\n        s1 = peg$c0();\n        if (s1) {\n            s1 = undefined;\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsetagElement();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c1(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$parseliteralElement();\n            if (s0 === peg$FAILED) {\n                s0 = peg$parseargumentElement();\n                if (s0 === peg$FAILED) {\n                    s0 = peg$parsesimpleFormatElement();\n                    if (s0 === peg$FAILED) {\n                        s0 = peg$parsepluralElement();\n                        if (s0 === peg$FAILED) {\n                            s0 = peg$parseselectElement();\n                            if (s0 === peg$FAILED) {\n                                s0 = peg$parsepoundElement();\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        return s0;\n    }\n    function peg$parsemessageText() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        peg$savedPos = peg$currPos;\n        s1 = peg$c2();\n        if (s1) {\n            s1 = undefined;\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$parsedoubleApostrophes();\n            if (s3 === peg$FAILED) {\n                s3 = peg$parsequotedString();\n                if (s3 === peg$FAILED) {\n                    s3 = peg$parseunquotedString();\n                    if (s3 === peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 60) {\n                            s3 = peg$c3;\n                            peg$currPos++;\n                        }\n                        else {\n                            s3 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c4);\n                            }\n                        }\n                    }\n                }\n            }\n            if (s3 !== peg$FAILED) {\n                while (s3 !== peg$FAILED) {\n                    s2.push(s3);\n                    s3 = peg$parsedoubleApostrophes();\n                    if (s3 === peg$FAILED) {\n                        s3 = peg$parsequotedString();\n                        if (s3 === peg$FAILED) {\n                            s3 = peg$parseunquotedString();\n                            if (s3 === peg$FAILED) {\n                                if (input.charCodeAt(peg$currPos) === 60) {\n                                    s3 = peg$c3;\n                                    peg$currPos++;\n                                }\n                                else {\n                                    s3 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c4);\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                s2 = peg$FAILED;\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c5(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = [];\n            s2 = peg$parsedoubleApostrophes();\n            if (s2 === peg$FAILED) {\n                s2 = peg$parsequotedString();\n                if (s2 === peg$FAILED) {\n                    s2 = peg$parseunquotedString();\n                    if (s2 === peg$FAILED) {\n                        s2 = peg$parsenonTagStartingAngleBracket();\n                    }\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                while (s2 !== peg$FAILED) {\n                    s1.push(s2);\n                    s2 = peg$parsedoubleApostrophes();\n                    if (s2 === peg$FAILED) {\n                        s2 = peg$parsequotedString();\n                        if (s2 === peg$FAILED) {\n                            s2 = peg$parseunquotedString();\n                            if (s2 === peg$FAILED) {\n                                s2 = peg$parsenonTagStartingAngleBracket();\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                s1 = peg$FAILED;\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c5(s1);\n            }\n            s0 = s1;\n        }\n        return s0;\n    }\n    function peg$parsenonTagStartingAngleBracket() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        peg$silentFails++;\n        s2 = peg$parseopeningTag();\n        if (s2 === peg$FAILED) {\n            s2 = peg$parseclosingTag();\n            if (s2 === peg$FAILED) {\n                s2 = peg$parseselfClosingTag();\n            }\n        }\n        peg$silentFails--;\n        if (s2 === peg$FAILED) {\n            s1 = undefined;\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 60) {\n                s2 = peg$c3;\n                peg$currPos++;\n            }\n            else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c4);\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c6();\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseliteralElement() {\n        var s0, s1;\n        s0 = peg$currPos;\n        s1 = peg$parsemessageText();\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c7(s1);\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parsepoundElement() {\n        var s0, s1;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 35) {\n            s1 = peg$c8;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c9);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c10();\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parsetagElement() {\n        var s0, s1, s2, s3;\n        peg$silentFails++;\n        s0 = peg$parseselfClosingTag();\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$parseopeningTag();\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parsemessage();\n                if (s2 !== peg$FAILED) {\n                    s3 = peg$parseclosingTag();\n                    if (s3 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c12(s1, s2, s3);\n                        s0 = s1;\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c11);\n            }\n        }\n        return s0;\n    }\n    function peg$parseselfClosingTag() {\n        var s0, s1, s2, s3, s4, s5;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 60) {\n            s2 = peg$c3;\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c4);\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            s3 = peg$parsevalidTag();\n            if (s3 !== peg$FAILED) {\n                s4 = peg$parse_();\n                if (s4 !== peg$FAILED) {\n                    if (input.substr(peg$currPos, 2) === peg$c13) {\n                        s5 = peg$c13;\n                        peg$currPos += 2;\n                    }\n                    else {\n                        s5 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c14);\n                        }\n                    }\n                    if (s5 !== peg$FAILED) {\n                        s2 = [s2, s3, s4, s5];\n                        s1 = s2;\n                    }\n                    else {\n                        peg$currPos = s1;\n                        s1 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s1;\n                    s1 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c15(s1);\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parseopeningTag() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 60) {\n            s1 = peg$c3;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c4);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsevalidTag();\n            if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 62) {\n                    s3 = peg$c16;\n                    peg$currPos++;\n                }\n                else {\n                    s3 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c17);\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c18(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseclosingTag() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c19) {\n            s1 = peg$c19;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c20);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsevalidTag();\n            if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 62) {\n                    s3 = peg$c16;\n                    peg$currPos++;\n                }\n                else {\n                    s3 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c17);\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c18(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseargumentElement() {\n        var s0, s1, s2, s3, s4, s5;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 125) {\n                            s5 = peg$c24;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c25);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            peg$savedPos = s0;\n                            s1 = peg$c26(s3);\n                            s0 = s1;\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c21);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberSkeletonId() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$currPos;\n        s3 = peg$currPos;\n        peg$silentFails++;\n        s4 = peg$parsewhiteSpace();\n        if (s4 === peg$FAILED) {\n            if (peg$c28.test(input.charAt(peg$currPos))) {\n                s4 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c29);\n                }\n            }\n        }\n        peg$silentFails--;\n        if (s4 === peg$FAILED) {\n            s3 = undefined;\n        }\n        else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n        }\n        if (s3 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n                s4 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c30);\n                }\n            }\n            if (s4 !== peg$FAILED) {\n                s3 = [s3, s4];\n                s2 = s3;\n            }\n            else {\n                peg$currPos = s2;\n                s2 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                s2 = peg$currPos;\n                s3 = peg$currPos;\n                peg$silentFails++;\n                s4 = peg$parsewhiteSpace();\n                if (s4 === peg$FAILED) {\n                    if (peg$c28.test(input.charAt(peg$currPos))) {\n                        s4 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c29);\n                        }\n                    }\n                }\n                peg$silentFails--;\n                if (s4 === peg$FAILED) {\n                    s3 = undefined;\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n                if (s3 !== peg$FAILED) {\n                    if (input.length > peg$currPos) {\n                        s4 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c30);\n                        }\n                    }\n                    if (s4 !== peg$FAILED) {\n                        s3 = [s3, s4];\n                        s2 = s3;\n                    }\n                    else {\n                        peg$currPos = s2;\n                        s2 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s2;\n                    s2 = peg$FAILED;\n                }\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c27);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberSkeletonTokenOption() {\n        var s0, s1, s2;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 47) {\n            s1 = peg$c32;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c33);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsenumberSkeletonId();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c34(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c31);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberSkeletonToken() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = peg$parse_();\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsenumberSkeletonId();\n            if (s2 !== peg$FAILED) {\n                s3 = [];\n                s4 = peg$parsenumberSkeletonTokenOption();\n                while (s4 !== peg$FAILED) {\n                    s3.push(s4);\n                    s4 = peg$parsenumberSkeletonTokenOption();\n                }\n                if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c36(s2, s3);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c35);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberSkeleton() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$parsenumberSkeletonToken();\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                s2 = peg$parsenumberSkeletonToken();\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c37(s1);\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parsenumberArgStyle() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c38) {\n            s1 = peg$c38;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c39);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsenumberSkeleton();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c40(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            peg$savedPos = peg$currPos;\n            s1 = peg$c41();\n            if (s1) {\n                s1 = undefined;\n            }\n            else {\n                s1 = peg$FAILED;\n            }\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parsemessageText();\n                if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c42(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberFormatElement() {\n        var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 44) {\n                            s5 = peg$c43;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c44);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parse_();\n                            if (s6 !== peg$FAILED) {\n                                if (input.substr(peg$currPos, 6) === peg$c45) {\n                                    s7 = peg$c45;\n                                    peg$currPos += 6;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c46);\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    s8 = peg$parse_();\n                                    if (s8 !== peg$FAILED) {\n                                        s9 = peg$currPos;\n                                        if (input.charCodeAt(peg$currPos) === 44) {\n                                            s10 = peg$c43;\n                                            peg$currPos++;\n                                        }\n                                        else {\n                                            s10 = peg$FAILED;\n                                            if (peg$silentFails === 0) {\n                                                peg$fail(peg$c44);\n                                            }\n                                        }\n                                        if (s10 !== peg$FAILED) {\n                                            s11 = peg$parse_();\n                                            if (s11 !== peg$FAILED) {\n                                                s12 = peg$parsenumberArgStyle();\n                                                if (s12 !== peg$FAILED) {\n                                                    s10 = [s10, s11, s12];\n                                                    s9 = s10;\n                                                }\n                                                else {\n                                                    peg$currPos = s9;\n                                                    s9 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s9;\n                                                s9 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s9;\n                                            s9 = peg$FAILED;\n                                        }\n                                        if (s9 === peg$FAILED) {\n                                            s9 = null;\n                                        }\n                                        if (s9 !== peg$FAILED) {\n                                            s10 = peg$parse_();\n                                            if (s10 !== peg$FAILED) {\n                                                if (input.charCodeAt(peg$currPos) === 125) {\n                                                    s11 = peg$c24;\n                                                    peg$currPos++;\n                                                }\n                                                else {\n                                                    s11 = peg$FAILED;\n                                                    if (peg$silentFails === 0) {\n                                                        peg$fail(peg$c25);\n                                                    }\n                                                }\n                                                if (s11 !== peg$FAILED) {\n                                                    peg$savedPos = s0;\n                                                    s1 = peg$c47(s3, s7, s9);\n                                                    s0 = s1;\n                                                }\n                                                else {\n                                                    peg$currPos = s0;\n                                                    s0 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s0;\n                                                s0 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s0;\n                                            s0 = peg$FAILED;\n                                        }\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsedateTimeSkeletonLiteral() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 39) {\n            s1 = peg$c48;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c49);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$parsedoubleApostrophes();\n            if (s3 === peg$FAILED) {\n                if (peg$c50.test(input.charAt(peg$currPos))) {\n                    s3 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s3 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c51);\n                    }\n                }\n            }\n            if (s3 !== peg$FAILED) {\n                while (s3 !== peg$FAILED) {\n                    s2.push(s3);\n                    s3 = peg$parsedoubleApostrophes();\n                    if (s3 === peg$FAILED) {\n                        if (peg$c50.test(input.charAt(peg$currPos))) {\n                            s3 = input.charAt(peg$currPos);\n                            peg$currPos++;\n                        }\n                        else {\n                            s3 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c51);\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                s2 = peg$FAILED;\n            }\n            if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 39) {\n                    s3 = peg$c48;\n                    peg$currPos++;\n                }\n                else {\n                    s3 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c49);\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    s1 = [s1, s2, s3];\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = [];\n            s1 = peg$parsedoubleApostrophes();\n            if (s1 === peg$FAILED) {\n                if (peg$c52.test(input.charAt(peg$currPos))) {\n                    s1 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c53);\n                    }\n                }\n            }\n            if (s1 !== peg$FAILED) {\n                while (s1 !== peg$FAILED) {\n                    s0.push(s1);\n                    s1 = peg$parsedoubleApostrophes();\n                    if (s1 === peg$FAILED) {\n                        if (peg$c52.test(input.charAt(peg$currPos))) {\n                            s1 = input.charAt(peg$currPos);\n                            peg$currPos++;\n                        }\n                        else {\n                            s1 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c53);\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                s0 = peg$FAILED;\n            }\n        }\n        return s0;\n    }\n    function peg$parsedateTimeSkeletonPattern() {\n        var s0, s1;\n        s0 = [];\n        if (peg$c54.test(input.charAt(peg$currPos))) {\n            s1 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c55);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            while (s1 !== peg$FAILED) {\n                s0.push(s1);\n                if (peg$c54.test(input.charAt(peg$currPos))) {\n                    s1 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c55);\n                    }\n                }\n            }\n        }\n        else {\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsedateTimeSkeleton() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        s2 = [];\n        s3 = peg$parsedateTimeSkeletonLiteral();\n        if (s3 === peg$FAILED) {\n            s3 = peg$parsedateTimeSkeletonPattern();\n        }\n        if (s3 !== peg$FAILED) {\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$parsedateTimeSkeletonLiteral();\n                if (s3 === peg$FAILED) {\n                    s3 = peg$parsedateTimeSkeletonPattern();\n                }\n            }\n        }\n        else {\n            s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n            s1 = input.substring(s1, peg$currPos);\n        }\n        else {\n            s1 = s2;\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c56(s1);\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parsedateOrTimeArgStyle() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c38) {\n            s1 = peg$c38;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c39);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsedateTimeSkeleton();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c40(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            peg$savedPos = peg$currPos;\n            s1 = peg$c57();\n            if (s1) {\n                s1 = undefined;\n            }\n            else {\n                s1 = peg$FAILED;\n            }\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parsemessageText();\n                if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c42(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        return s0;\n    }\n    function peg$parsedateOrTimeFormatElement() {\n        var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 44) {\n                            s5 = peg$c43;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c44);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parse_();\n                            if (s6 !== peg$FAILED) {\n                                if (input.substr(peg$currPos, 4) === peg$c58) {\n                                    s7 = peg$c58;\n                                    peg$currPos += 4;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c59);\n                                    }\n                                }\n                                if (s7 === peg$FAILED) {\n                                    if (input.substr(peg$currPos, 4) === peg$c60) {\n                                        s7 = peg$c60;\n                                        peg$currPos += 4;\n                                    }\n                                    else {\n                                        s7 = peg$FAILED;\n                                        if (peg$silentFails === 0) {\n                                            peg$fail(peg$c61);\n                                        }\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    s8 = peg$parse_();\n                                    if (s8 !== peg$FAILED) {\n                                        s9 = peg$currPos;\n                                        if (input.charCodeAt(peg$currPos) === 44) {\n                                            s10 = peg$c43;\n                                            peg$currPos++;\n                                        }\n                                        else {\n                                            s10 = peg$FAILED;\n                                            if (peg$silentFails === 0) {\n                                                peg$fail(peg$c44);\n                                            }\n                                        }\n                                        if (s10 !== peg$FAILED) {\n                                            s11 = peg$parse_();\n                                            if (s11 !== peg$FAILED) {\n                                                s12 = peg$parsedateOrTimeArgStyle();\n                                                if (s12 !== peg$FAILED) {\n                                                    s10 = [s10, s11, s12];\n                                                    s9 = s10;\n                                                }\n                                                else {\n                                                    peg$currPos = s9;\n                                                    s9 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s9;\n                                                s9 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s9;\n                                            s9 = peg$FAILED;\n                                        }\n                                        if (s9 === peg$FAILED) {\n                                            s9 = null;\n                                        }\n                                        if (s9 !== peg$FAILED) {\n                                            s10 = peg$parse_();\n                                            if (s10 !== peg$FAILED) {\n                                                if (input.charCodeAt(peg$currPos) === 125) {\n                                                    s11 = peg$c24;\n                                                    peg$currPos++;\n                                                }\n                                                else {\n                                                    s11 = peg$FAILED;\n                                                    if (peg$silentFails === 0) {\n                                                        peg$fail(peg$c25);\n                                                    }\n                                                }\n                                                if (s11 !== peg$FAILED) {\n                                                    peg$savedPos = s0;\n                                                    s1 = peg$c47(s3, s7, s9);\n                                                    s0 = s1;\n                                                }\n                                                else {\n                                                    peg$currPos = s0;\n                                                    s0 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s0;\n                                                s0 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s0;\n                                            s0 = peg$FAILED;\n                                        }\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsesimpleFormatElement() {\n        var s0;\n        s0 = peg$parsenumberFormatElement();\n        if (s0 === peg$FAILED) {\n            s0 = peg$parsedateOrTimeFormatElement();\n        }\n        return s0;\n    }\n    function peg$parsepluralElement() {\n        var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 44) {\n                            s5 = peg$c43;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c44);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parse_();\n                            if (s6 !== peg$FAILED) {\n                                if (input.substr(peg$currPos, 6) === peg$c62) {\n                                    s7 = peg$c62;\n                                    peg$currPos += 6;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c63);\n                                    }\n                                }\n                                if (s7 === peg$FAILED) {\n                                    if (input.substr(peg$currPos, 13) === peg$c64) {\n                                        s7 = peg$c64;\n                                        peg$currPos += 13;\n                                    }\n                                    else {\n                                        s7 = peg$FAILED;\n                                        if (peg$silentFails === 0) {\n                                            peg$fail(peg$c65);\n                                        }\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    s8 = peg$parse_();\n                                    if (s8 !== peg$FAILED) {\n                                        if (input.charCodeAt(peg$currPos) === 44) {\n                                            s9 = peg$c43;\n                                            peg$currPos++;\n                                        }\n                                        else {\n                                            s9 = peg$FAILED;\n                                            if (peg$silentFails === 0) {\n                                                peg$fail(peg$c44);\n                                            }\n                                        }\n                                        if (s9 !== peg$FAILED) {\n                                            s10 = peg$parse_();\n                                            if (s10 !== peg$FAILED) {\n                                                s11 = peg$currPos;\n                                                if (input.substr(peg$currPos, 7) === peg$c66) {\n                                                    s12 = peg$c66;\n                                                    peg$currPos += 7;\n                                                }\n                                                else {\n                                                    s12 = peg$FAILED;\n                                                    if (peg$silentFails === 0) {\n                                                        peg$fail(peg$c67);\n                                                    }\n                                                }\n                                                if (s12 !== peg$FAILED) {\n                                                    s13 = peg$parse_();\n                                                    if (s13 !== peg$FAILED) {\n                                                        s14 = peg$parsenumber();\n                                                        if (s14 !== peg$FAILED) {\n                                                            s12 = [s12, s13, s14];\n                                                            s11 = s12;\n                                                        }\n                                                        else {\n                                                            peg$currPos = s11;\n                                                            s11 = peg$FAILED;\n                                                        }\n                                                    }\n                                                    else {\n                                                        peg$currPos = s11;\n                                                        s11 = peg$FAILED;\n                                                    }\n                                                }\n                                                else {\n                                                    peg$currPos = s11;\n                                                    s11 = peg$FAILED;\n                                                }\n                                                if (s11 === peg$FAILED) {\n                                                    s11 = null;\n                                                }\n                                                if (s11 !== peg$FAILED) {\n                                                    s12 = peg$parse_();\n                                                    if (s12 !== peg$FAILED) {\n                                                        s13 = [];\n                                                        s14 = peg$parsepluralOption();\n                                                        if (s14 !== peg$FAILED) {\n                                                            while (s14 !== peg$FAILED) {\n                                                                s13.push(s14);\n                                                                s14 = peg$parsepluralOption();\n                                                            }\n                                                        }\n                                                        else {\n                                                            s13 = peg$FAILED;\n                                                        }\n                                                        if (s13 !== peg$FAILED) {\n                                                            s14 = peg$parse_();\n                                                            if (s14 !== peg$FAILED) {\n                                                                if (input.charCodeAt(peg$currPos) === 125) {\n                                                                    s15 = peg$c24;\n                                                                    peg$currPos++;\n                                                                }\n                                                                else {\n                                                                    s15 = peg$FAILED;\n                                                                    if (peg$silentFails === 0) {\n                                                                        peg$fail(peg$c25);\n                                                                    }\n                                                                }\n                                                                if (s15 !== peg$FAILED) {\n                                                                    peg$savedPos = s0;\n                                                                    s1 = peg$c68(s3, s7, s11, s13);\n                                                                    s0 = s1;\n                                                                }\n                                                                else {\n                                                                    peg$currPos = s0;\n                                                                    s0 = peg$FAILED;\n                                                                }\n                                                            }\n                                                            else {\n                                                                peg$currPos = s0;\n                                                                s0 = peg$FAILED;\n                                                            }\n                                                        }\n                                                        else {\n                                                            peg$currPos = s0;\n                                                            s0 = peg$FAILED;\n                                                        }\n                                                    }\n                                                    else {\n                                                        peg$currPos = s0;\n                                                        s0 = peg$FAILED;\n                                                    }\n                                                }\n                                                else {\n                                                    peg$currPos = s0;\n                                                    s0 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s0;\n                                                s0 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s0;\n                                            s0 = peg$FAILED;\n                                        }\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseselectElement() {\n        var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 44) {\n                            s5 = peg$c43;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c44);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parse_();\n                            if (s6 !== peg$FAILED) {\n                                if (input.substr(peg$currPos, 6) === peg$c69) {\n                                    s7 = peg$c69;\n                                    peg$currPos += 6;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c70);\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    s8 = peg$parse_();\n                                    if (s8 !== peg$FAILED) {\n                                        if (input.charCodeAt(peg$currPos) === 44) {\n                                            s9 = peg$c43;\n                                            peg$currPos++;\n                                        }\n                                        else {\n                                            s9 = peg$FAILED;\n                                            if (peg$silentFails === 0) {\n                                                peg$fail(peg$c44);\n                                            }\n                                        }\n                                        if (s9 !== peg$FAILED) {\n                                            s10 = peg$parse_();\n                                            if (s10 !== peg$FAILED) {\n                                                s11 = [];\n                                                s12 = peg$parseselectOption();\n                                                if (s12 !== peg$FAILED) {\n                                                    while (s12 !== peg$FAILED) {\n                                                        s11.push(s12);\n                                                        s12 = peg$parseselectOption();\n                                                    }\n                                                }\n                                                else {\n                                                    s11 = peg$FAILED;\n                                                }\n                                                if (s11 !== peg$FAILED) {\n                                                    s12 = peg$parse_();\n                                                    if (s12 !== peg$FAILED) {\n                                                        if (input.charCodeAt(peg$currPos) === 125) {\n                                                            s13 = peg$c24;\n                                                            peg$currPos++;\n                                                        }\n                                                        else {\n                                                            s13 = peg$FAILED;\n                                                            if (peg$silentFails === 0) {\n                                                                peg$fail(peg$c25);\n                                                            }\n                                                        }\n                                                        if (s13 !== peg$FAILED) {\n                                                            peg$savedPos = s0;\n                                                            s1 = peg$c71(s3, s11);\n                                                            s0 = s1;\n                                                        }\n                                                        else {\n                                                            peg$currPos = s0;\n                                                            s0 = peg$FAILED;\n                                                        }\n                                                    }\n                                                    else {\n                                                        peg$currPos = s0;\n                                                        s0 = peg$FAILED;\n                                                    }\n                                                }\n                                                else {\n                                                    peg$currPos = s0;\n                                                    s0 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s0;\n                                                s0 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s0;\n                                            s0 = peg$FAILED;\n                                        }\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsepluralRuleSelectValue() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 61) {\n            s2 = peg$c72;\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c73);\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            s3 = peg$parsenumber();\n            if (s3 !== peg$FAILED) {\n                s2 = [s2, s3];\n                s1 = s2;\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$parseargName();\n        }\n        return s0;\n    }\n    function peg$parseselectOption() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        s0 = peg$currPos;\n        s1 = peg$parse_();\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parseargName();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parse_();\n                if (s3 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 123) {\n                        s4 = peg$c22;\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c23);\n                        }\n                    }\n                    if (s4 !== peg$FAILED) {\n                        peg$savedPos = peg$currPos;\n                        s5 = peg$c74(s2);\n                        if (s5) {\n                            s5 = undefined;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parsemessage();\n                            if (s6 !== peg$FAILED) {\n                                if (input.charCodeAt(peg$currPos) === 125) {\n                                    s7 = peg$c24;\n                                    peg$currPos++;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c25);\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    peg$savedPos = s0;\n                                    s1 = peg$c75(s2, s6);\n                                    s0 = s1;\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsepluralOption() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        s0 = peg$currPos;\n        s1 = peg$parse_();\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsepluralRuleSelectValue();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parse_();\n                if (s3 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 123) {\n                        s4 = peg$c22;\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c23);\n                        }\n                    }\n                    if (s4 !== peg$FAILED) {\n                        peg$savedPos = peg$currPos;\n                        s5 = peg$c76(s2);\n                        if (s5) {\n                            s5 = undefined;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parsemessage();\n                            if (s6 !== peg$FAILED) {\n                                if (input.charCodeAt(peg$currPos) === 125) {\n                                    s7 = peg$c24;\n                                    peg$currPos++;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c25);\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    peg$savedPos = s0;\n                                    s1 = peg$c77(s2, s6);\n                                    s0 = s1;\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsewhiteSpace() {\n        var s0, s1;\n        peg$silentFails++;\n        if (peg$c79.test(input.charAt(peg$currPos))) {\n            s0 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c80);\n            }\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c78);\n            }\n        }\n        return s0;\n    }\n    function peg$parsepatternSyntax() {\n        var s0, s1;\n        peg$silentFails++;\n        if (peg$c82.test(input.charAt(peg$currPos))) {\n            s0 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c83);\n            }\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c81);\n            }\n        }\n        return s0;\n    }\n    function peg$parse_() {\n        var s0, s1, s2;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$parsewhiteSpace();\n        while (s2 !== peg$FAILED) {\n            s1.push(s2);\n            s2 = peg$parsewhiteSpace();\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c84);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumber() {\n        var s0, s1, s2;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 45) {\n            s1 = peg$c86;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c87);\n            }\n        }\n        if (s1 === peg$FAILED) {\n            s1 = null;\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parseargNumber();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c88(s1, s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c85);\n            }\n        }\n        return s0;\n    }\n    function peg$parseapostrophe() {\n        var s0, s1;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 39) {\n            s0 = peg$c48;\n            peg$currPos++;\n        }\n        else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c49);\n            }\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c89);\n            }\n        }\n        return s0;\n    }\n    function peg$parsedoubleApostrophes() {\n        var s0, s1;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c91) {\n            s1 = peg$c91;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c92);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c93();\n        }\n        s0 = s1;\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c90);\n            }\n        }\n        return s0;\n    }\n    function peg$parsequotedString() {\n        var s0, s1, s2, s3, s4, s5;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 39) {\n            s1 = peg$c48;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c49);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parseescapedChar();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$currPos;\n                s4 = [];\n                if (input.substr(peg$currPos, 2) === peg$c91) {\n                    s5 = peg$c91;\n                    peg$currPos += 2;\n                }\n                else {\n                    s5 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c92);\n                    }\n                }\n                if (s5 === peg$FAILED) {\n                    if (peg$c50.test(input.charAt(peg$currPos))) {\n                        s5 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s5 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c51);\n                        }\n                    }\n                }\n                while (s5 !== peg$FAILED) {\n                    s4.push(s5);\n                    if (input.substr(peg$currPos, 2) === peg$c91) {\n                        s5 = peg$c91;\n                        peg$currPos += 2;\n                    }\n                    else {\n                        s5 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c92);\n                        }\n                    }\n                    if (s5 === peg$FAILED) {\n                        if (peg$c50.test(input.charAt(peg$currPos))) {\n                            s5 = input.charAt(peg$currPos);\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c51);\n                            }\n                        }\n                    }\n                }\n                if (s4 !== peg$FAILED) {\n                    s3 = input.substring(s3, peg$currPos);\n                }\n                else {\n                    s3 = s4;\n                }\n                if (s3 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 39) {\n                        s4 = peg$c48;\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c49);\n                        }\n                    }\n                    if (s4 === peg$FAILED) {\n                        s4 = null;\n                    }\n                    if (s4 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c94(s2, s3);\n                        s0 = s1;\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseunquotedString() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        if (input.length > peg$currPos) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c30);\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            peg$savedPos = peg$currPos;\n            s3 = peg$c95(s2);\n            if (s3) {\n                s3 = undefined;\n            }\n            else {\n                s3 = peg$FAILED;\n            }\n            if (s3 !== peg$FAILED) {\n                s2 = [s2, s3];\n                s1 = s2;\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 10) {\n                s1 = peg$c96;\n                peg$currPos++;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c97);\n                }\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        return s0;\n    }\n    function peg$parseescapedChar() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        if (input.length > peg$currPos) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c30);\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            peg$savedPos = peg$currPos;\n            s3 = peg$c98(s2);\n            if (s3) {\n                s3 = undefined;\n            }\n            else {\n                s3 = peg$FAILED;\n            }\n            if (s3 !== peg$FAILED) {\n                s2 = [s2, s3];\n                s1 = s2;\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        return s0;\n    }\n    function peg$parseargNameOrNumber() {\n        var s0, s1;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = peg$parseargNumber();\n        if (s1 === peg$FAILED) {\n            s1 = peg$parseargName();\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c99);\n            }\n        }\n        return s0;\n    }\n    function peg$parsevalidTag() {\n        var s0, s1;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = peg$parseargNumber();\n        if (s1 === peg$FAILED) {\n            s1 = peg$parsetagName();\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c100);\n            }\n        }\n        return s0;\n    }\n    function peg$parseargNumber() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 48) {\n            s1 = peg$c102;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c103);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c104();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$currPos;\n            if (peg$c105.test(input.charAt(peg$currPos))) {\n                s2 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c106);\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                s3 = [];\n                if (peg$c107.test(input.charAt(peg$currPos))) {\n                    s4 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s4 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c108);\n                    }\n                }\n                while (s4 !== peg$FAILED) {\n                    s3.push(s4);\n                    if (peg$c107.test(input.charAt(peg$currPos))) {\n                        s4 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c108);\n                        }\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    s2 = [s2, s3];\n                    s1 = s2;\n                }\n                else {\n                    peg$currPos = s1;\n                    s1 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c109(s1);\n            }\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c101);\n            }\n        }\n        return s0;\n    }\n    function peg$parseargName() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$currPos;\n        s3 = peg$currPos;\n        peg$silentFails++;\n        s4 = peg$parsewhiteSpace();\n        if (s4 === peg$FAILED) {\n            s4 = peg$parsepatternSyntax();\n        }\n        peg$silentFails--;\n        if (s4 === peg$FAILED) {\n            s3 = undefined;\n        }\n        else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n        }\n        if (s3 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n                s4 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c30);\n                }\n            }\n            if (s4 !== peg$FAILED) {\n                s3 = [s3, s4];\n                s2 = s3;\n            }\n            else {\n                peg$currPos = s2;\n                s2 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                s2 = peg$currPos;\n                s3 = peg$currPos;\n                peg$silentFails++;\n                s4 = peg$parsewhiteSpace();\n                if (s4 === peg$FAILED) {\n                    s4 = peg$parsepatternSyntax();\n                }\n                peg$silentFails--;\n                if (s4 === peg$FAILED) {\n                    s3 = undefined;\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n                if (s3 !== peg$FAILED) {\n                    if (input.length > peg$currPos) {\n                        s4 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c30);\n                        }\n                    }\n                    if (s4 !== peg$FAILED) {\n                        s3 = [s3, s4];\n                        s2 = s3;\n                    }\n                    else {\n                        peg$currPos = s2;\n                        s2 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s2;\n                    s2 = peg$FAILED;\n                }\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c110);\n            }\n        }\n        return s0;\n    }\n    function peg$parsetagName() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = [];\n        if (input.charCodeAt(peg$currPos) === 45) {\n            s2 = peg$c86;\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c87);\n            }\n        }\n        if (s2 === peg$FAILED) {\n            s2 = peg$currPos;\n            s3 = peg$currPos;\n            peg$silentFails++;\n            s4 = peg$parsewhiteSpace();\n            if (s4 === peg$FAILED) {\n                s4 = peg$parsepatternSyntax();\n            }\n            peg$silentFails--;\n            if (s4 === peg$FAILED) {\n                s3 = undefined;\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            if (s3 !== peg$FAILED) {\n                if (input.length > peg$currPos) {\n                    s4 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s4 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c30);\n                    }\n                }\n                if (s4 !== peg$FAILED) {\n                    s3 = [s3, s4];\n                    s2 = s3;\n                }\n                else {\n                    peg$currPos = s2;\n                    s2 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s2;\n                s2 = peg$FAILED;\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                if (input.charCodeAt(peg$currPos) === 45) {\n                    s2 = peg$c86;\n                    peg$currPos++;\n                }\n                else {\n                    s2 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c87);\n                    }\n                }\n                if (s2 === peg$FAILED) {\n                    s2 = peg$currPos;\n                    s3 = peg$currPos;\n                    peg$silentFails++;\n                    s4 = peg$parsewhiteSpace();\n                    if (s4 === peg$FAILED) {\n                        s4 = peg$parsepatternSyntax();\n                    }\n                    peg$silentFails--;\n                    if (s4 === peg$FAILED) {\n                        s3 = undefined;\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                    if (s3 !== peg$FAILED) {\n                        if (input.length > peg$currPos) {\n                            s4 = input.charAt(peg$currPos);\n                            peg$currPos++;\n                        }\n                        else {\n                            s4 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c30);\n                            }\n                        }\n                        if (s4 !== peg$FAILED) {\n                            s3 = [s3, s4];\n                            s2 = s3;\n                        }\n                        else {\n                            peg$currPos = s2;\n                            s2 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s2;\n                        s2 = peg$FAILED;\n                    }\n                }\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c111);\n            }\n        }\n        return s0;\n    }\n    var messageCtx = ['root'];\n    function isNestedMessageText() {\n        return messageCtx.length > 1;\n    }\n    function isInPluralOption() {\n        return messageCtx[messageCtx.length - 1] === 'plural';\n    }\n    function insertLocation() {\n        return options && options.captureLocation ? {\n            location: location()\n        } : {};\n    }\n    var ignoreTag = options && options.ignoreTag;\n    var shouldParseSkeleton = options && options.shouldParseSkeleton;\n    peg$result = peg$startRuleFunction();\n    if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n        return peg$result;\n    }\n    else {\n        if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n            peg$fail(peg$endExpectation());\n        }\n        throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length\n            ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n            : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n    }\n}\nexport var pegParse = peg$parse;\n","import { __spreadArray } from \"tslib\";\nimport { isPluralElement, isLiteralElement, isSelectElement, } from './types';\nimport { pegParse } from './parser';\nvar PLURAL_HASHTAG_REGEX = /(^|[^\\\\])#/g;\n/**\n * Whether to convert `#` in plural rule options\n * to `{var, number}`\n * @param el AST Element\n * @param pluralStack current plural stack\n */\nexport function normalizeHashtagInPlural(els) {\n    els.forEach(function (el) {\n        // If we're encountering a plural el\n        if (!isPluralElement(el) && !isSelectElement(el)) {\n            return;\n        }\n        // Go down the options and search for # in any literal element\n        Object.keys(el.options).forEach(function (id) {\n            var _a;\n            var opt = el.options[id];\n            // If we got a match, we have to split this\n            // and inject a NumberElement in the middle\n            var matchingLiteralElIndex = -1;\n            var literalEl = undefined;\n            for (var i = 0; i < opt.value.length; i++) {\n                var el_1 = opt.value[i];\n                if (isLiteralElement(el_1) && PLURAL_HASHTAG_REGEX.test(el_1.value)) {\n                    matchingLiteralElIndex = i;\n                    literalEl = el_1;\n                    break;\n                }\n            }\n            if (literalEl) {\n                var newValue = literalEl.value.replace(PLURAL_HASHTAG_REGEX, \"$1{\" + el.value + \", number}\");\n                var newEls = pegParse(newValue);\n                (_a = opt.value).splice.apply(_a, __spreadArray([matchingLiteralElIndex, 1], newEls));\n            }\n            normalizeHashtagInPlural(opt.value);\n        });\n    });\n}\n","import { __assign } from \"tslib\";\nimport { pegParse } from './src/parser';\nimport { normalizeHashtagInPlural } from './src/normalize';\nexport * from './src/types';\nexport * from './src/parser';\nexport function parse(input, opts) {\n    opts = __assign({ normalizeHashtagInPlural: true, shouldParseSkeleton: true }, (opts || {}));\n    var els = pegParse(input, opts);\n    if (opts.normalizeHashtagInPlural) {\n        normalizeHashtagInPlural(els);\n    }\n    return els;\n}\n","import { newInvariantError, invariant } from \"../../utilities/globals/index.js\";\n\nimport type { Observer } from \"../../utilities/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport type {\n  NextLink,\n  Operation,\n  RequestHandler,\n  FetchResult,\n  GraphQLRequest,\n} from \"./types.js\";\nimport {\n  validateOperation,\n  createOperation,\n  transformOperation,\n} from \"../utils/index.js\";\n\nfunction passthrough(op: Operation, forward: NextLink) {\n  return (forward ? forward(op) : Observable.of()) as Observable<FetchResult>;\n}\n\nfunction toLink(handler: RequestHandler | ApolloLink) {\n  return typeof handler === \"function\" ? new ApolloLink(handler) : handler;\n}\n\nfunction isTerminating(link: ApolloLink): boolean {\n  return link.request.length <= 1;\n}\n\nexport class ApolloLink {\n  public static empty(): ApolloLink {\n    return new ApolloLink(() => Observable.of());\n  }\n\n  public static from(links: (ApolloLink | RequestHandler)[]): ApolloLink {\n    if (links.length === 0) return ApolloLink.empty();\n    return links.map(toLink).reduce((x, y) => x.concat(y)) as ApolloLink;\n  }\n\n  public static split(\n    test: (op: Operation) => boolean,\n    left: ApolloLink | RequestHandler,\n    right?: ApolloLink | RequestHandler\n  ): ApolloLink {\n    const leftLink = toLink(left);\n    const rightLink = toLink(right || new ApolloLink(passthrough));\n\n    let ret: ApolloLink;\n    if (isTerminating(leftLink) && isTerminating(rightLink)) {\n      ret = new ApolloLink((operation) => {\n        return test(operation) ?\n            leftLink.request(operation) || Observable.of()\n          : rightLink.request(operation) || Observable.of();\n      });\n    } else {\n      ret = new ApolloLink((operation, forward) => {\n        return test(operation) ?\n            leftLink.request(operation, forward) || Observable.of()\n          : rightLink.request(operation, forward) || Observable.of();\n      });\n    }\n    return Object.assign(ret, { left: leftLink, right: rightLink });\n  }\n\n  public static execute(\n    link: ApolloLink,\n    operation: GraphQLRequest\n  ): Observable<FetchResult> {\n    return (\n      link.request(\n        createOperation(\n          operation.context,\n          transformOperation(validateOperation(operation))\n        )\n      ) || Observable.of()\n    );\n  }\n\n  public static concat(\n    first: ApolloLink | RequestHandler,\n    second: ApolloLink | RequestHandler\n  ) {\n    const firstLink = toLink(first);\n    if (isTerminating(firstLink)) {\n      invariant.warn(\n        `You are calling concat on a terminating link, which will have no effect %o`,\n        firstLink\n      );\n      return firstLink;\n    }\n    const nextLink = toLink(second);\n\n    let ret: ApolloLink;\n    if (isTerminating(nextLink)) {\n      ret = new ApolloLink(\n        (operation) =>\n          firstLink.request(\n            operation,\n            (op) => nextLink.request(op) || Observable.of()\n          ) || Observable.of()\n      );\n    } else {\n      ret = new ApolloLink((operation, forward) => {\n        return (\n          firstLink.request(operation, (op) => {\n            return nextLink.request(op, forward) || Observable.of();\n          }) || Observable.of()\n        );\n      });\n    }\n    return Object.assign(ret, { left: firstLink, right: nextLink });\n  }\n\n  constructor(request?: RequestHandler) {\n    if (request) this.request = request;\n  }\n\n  public split(\n    test: (op: Operation) => boolean,\n    left: ApolloLink | RequestHandler,\n    right?: ApolloLink | RequestHandler\n  ): ApolloLink {\n    return this.concat(\n      ApolloLink.split(test, left, right || new ApolloLink(passthrough))\n    );\n  }\n\n  public concat(next: ApolloLink | RequestHandler): ApolloLink {\n    return ApolloLink.concat(this, next);\n  }\n\n  public request(\n    operation: Operation,\n    forward?: NextLink\n  ): Observable<FetchResult> | null {\n    throw newInvariantError(\"request is not implemented\");\n  }\n\n  protected onError(\n    error: any,\n    observer?: Observer<FetchResult>\n  ): false | void {\n    if (observer && observer.error) {\n      observer.error(error);\n      // Returning false indicates that observer.error does not need to be\n      // called again, since it was already called (on the previous line).\n      // Calling observer.error again would not cause any real problems,\n      // since only the first call matters, but custom onError functions\n      // might have other reasons for wanting to prevent the default\n      // behavior by returning false.\n      return false;\n    }\n    // Throw errors will be passed to observer.error.\n    throw error;\n  }\n\n  public setOnError(fn: ApolloLink[\"onError\"]): this {\n    this.onError = fn;\n    return this;\n  }\n\n  /**\n   * @internal\n   * Used to iterate through all links that are concatenations or `split` links.\n   */\n  readonly left?: ApolloLink;\n  /**\n   * @internal\n   * Used to iterate through all links that are concatenations or `split` links.\n   */\n  readonly right?: ApolloLink;\n\n  /**\n   * @internal\n   * Can be provided by a link that has an internal cache to report it's memory details.\n   */\n  getMemoryInternals?: () => unknown;\n}\n","import type { GraphQLRequest, Operation } from \"../core/index.js\";\n\nexport function createOperation(\n  starting: any,\n  operation: GraphQLRequest\n): Operation {\n  let context = { ...starting };\n  const setContext: Operation[\"setContext\"] = (next) => {\n    if (typeof next === \"function\") {\n      context = { ...context, ...next(context) };\n    } else {\n      context = { ...context, ...next };\n    }\n  };\n  const getContext: Operation[\"getContext\"] = () => ({ ...context });\n\n  Object.defineProperty(operation, \"setContext\", {\n    enumerable: false,\n    value: setContext,\n  });\n\n  Object.defineProperty(operation, \"getContext\", {\n    enumerable: false,\n    value: getContext,\n  });\n\n  return operation as Operation;\n}\n","import type { GraphQLRequest, Operation } from \"../core/index.js\";\nimport { getOperationName } from \"../../utilities/index.js\";\n\nexport function transformOperation(operation: GraphQLRequest): GraphQLRequest {\n  const transformedOperation: GraphQLRequest = {\n    variables: operation.variables || {},\n    extensions: operation.extensions || {},\n    operationName: operation.operationName,\n    query: operation.query,\n  };\n\n  // Best guess at an operation name\n  if (!transformedOperation.operationName) {\n    transformedOperation.operationName =\n      typeof transformedOperation.query !== \"string\" ?\n        getOperationName(transformedOperation.query) || undefined\n      : \"\";\n  }\n\n  return transformedOperation as Operation;\n}\n","import { invariant, newInvariantError } from \"../globals/index.js\";\n\nimport type {\n  DocumentNode,\n  OperationDefinitionNode,\n  FragmentDefinitionNode,\n  ValueNode,\n} from \"graphql\";\n\nimport { valueToObjectRepresentation } from \"./storeUtils.js\";\n\ntype OperationDefinitionWithName = OperationDefinitionNode & {\n  name: NonNullable<OperationDefinitionNode[\"name\"]>;\n};\n\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc: DocumentNode) {\n  invariant(\n    doc && doc.kind === \"Document\",\n    `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`\n  );\n\n  const operations = doc.definitions\n    .filter((d) => d.kind !== \"FragmentDefinition\")\n    .map((definition) => {\n      if (definition.kind !== \"OperationDefinition\") {\n        throw newInvariantError(\n          `Schema type definitions not allowed in queries. Found: \"%s\"`,\n          definition.kind\n        );\n      }\n      return definition;\n    });\n\n  invariant(\n    operations.length <= 1,\n    `Ambiguous GraphQL document: contains %s operations`,\n    operations.length\n  );\n\n  return doc;\n}\n\nexport function getOperationDefinition(\n  doc: DocumentNode\n): OperationDefinitionNode | undefined {\n  checkDocument(doc);\n  return doc.definitions.filter(\n    (definition): definition is OperationDefinitionNode =>\n      definition.kind === \"OperationDefinition\"\n  )[0];\n}\n\nexport function getOperationName(doc: DocumentNode): string | null {\n  return (\n    doc.definitions\n      .filter(\n        (definition): definition is OperationDefinitionWithName =>\n          definition.kind === \"OperationDefinition\" && !!definition.name\n      )\n      .map((x) => x.name.value)[0] || null\n  );\n}\n\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(\n  doc: DocumentNode\n): FragmentDefinitionNode[] {\n  return doc.definitions.filter(\n    (definition): definition is FragmentDefinitionNode =>\n      definition.kind === \"FragmentDefinition\"\n  );\n}\n\nexport function getQueryDefinition(doc: DocumentNode): OperationDefinitionNode {\n  const queryDef = getOperationDefinition(doc)!;\n\n  invariant(\n    queryDef && queryDef.operation === \"query\",\n    \"Must contain a query definition.\"\n  );\n\n  return queryDef;\n}\n\nexport function getFragmentDefinition(\n  doc: DocumentNode\n): FragmentDefinitionNode {\n  invariant(\n    doc.kind === \"Document\",\n    `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`\n  );\n\n  invariant(\n    doc.definitions.length <= 1,\n    \"Fragment must have exactly one definition.\"\n  );\n\n  const fragmentDef = doc.definitions[0] as FragmentDefinitionNode;\n\n  invariant(\n    fragmentDef.kind === \"FragmentDefinition\",\n    \"Must be a fragment definition.\"\n  );\n\n  return fragmentDef as FragmentDefinitionNode;\n}\n\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(\n  queryDoc: DocumentNode\n): OperationDefinitionNode | FragmentDefinitionNode {\n  checkDocument(queryDoc);\n\n  let fragmentDefinition;\n\n  for (let definition of queryDoc.definitions) {\n    if (definition.kind === \"OperationDefinition\") {\n      const operation = (definition as OperationDefinitionNode).operation;\n      if (\n        operation === \"query\" ||\n        operation === \"mutation\" ||\n        operation === \"subscription\"\n      ) {\n        return definition as OperationDefinitionNode;\n      }\n    }\n    if (definition.kind === \"FragmentDefinition\" && !fragmentDefinition) {\n      // we do this because we want to allow multiple fragment definitions\n      // to precede an operation definition.\n      fragmentDefinition = definition as FragmentDefinitionNode;\n    }\n  }\n\n  if (fragmentDefinition) {\n    return fragmentDefinition;\n  }\n\n  throw newInvariantError(\n    \"Expected a parsed GraphQL query with a query, mutation, subscription, or a fragment.\"\n  );\n}\n\nexport function getDefaultValues(\n  definition: OperationDefinitionNode | undefined\n): Record<string, any> {\n  const defaultValues = Object.create(null);\n  const defs = definition && definition.variableDefinitions;\n  if (defs && defs.length) {\n    defs.forEach((def) => {\n      if (def.defaultValue) {\n        valueToObjectRepresentation(\n          defaultValues,\n          def.variable.name,\n          def.defaultValue as ValueNode\n        );\n      }\n    });\n  }\n  return defaultValues;\n}\n","import { newInvariantError } from \"../../utilities/globals/index.js\";\nimport type { GraphQLRequest } from \"../core/index.js\";\n\nexport function validateOperation(operation: GraphQLRequest): GraphQLRequest {\n  const OPERATION_FIELDS = [\n    \"query\",\n    \"operationName\",\n    \"variables\",\n    \"extensions\",\n    \"context\",\n  ];\n  for (let key of Object.keys(operation)) {\n    if (OPERATION_FIELDS.indexOf(key) < 0) {\n      throw newInvariantError(`illegal argument: %s`, key);\n    }\n  }\n\n  return operation;\n}\n","import type { StackFrame, StackLineParser, StackParser } from '@sentry/types';\n\nimport type { GetModuleFn } from './node-stack-trace';\nimport { filenameIsInApp, node } from './node-stack-trace';\n\nexport { filenameIsInApp };\n\nconst STACKTRACE_FRAME_LIMIT = 50;\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\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(...parsers: StackLineParser[]): StackParser {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack: string, skipFirst: number = 0): StackFrame[] => {\n    const frames: StackFrame[] = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirst; i < lines.length; i++) {\n      const line = lines[i];\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n      // input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        continue;\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames);\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\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 (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\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 (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the hub itself, making it:\n    //\n    //   Sentry.captureException()\n    //   getCurrentHub().captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n      localStack.pop();\n    }\n  }\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n    ...frame,\n    filename: frame.filename || localStack[localStack.length - 1].filename,\n    function: frame.function || '?',\n  }));\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\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\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n  return [90, node(getModule)];\n}\n","import { isString } from './is';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\ntype SimpleNode = {\n  parentNode: SimpleNode;\n} | null;\n\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(\n  elem: unknown,\n  options: string[] | { keyAttrs?: string[]; maxStringLength?: number } = {},\n): string {\n  if (!elem) {\n    return '<unknown>';\n  }\n\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    let currentElem = elem as SimpleNode;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\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 maxStringLength\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n        break;\n      }\n\n      out.push(nextStr);\n\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n\n    return out.reverse().join(separator);\n  } catch (_oO) {\n    return '<unknown>';\n  }\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: unknown, keyAttrs?: string[]): string {\n  const elem = el as {\n    tagName?: string;\n    id?: string;\n    className?: string;\n    getAttribute(key: string): string;\n  };\n\n  const out = [];\n  let className;\n  let classes;\n  let key;\n  let attr;\n  let i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  // @ts-expect-error WINDOW has HTMLElement\n  if (WINDOW.HTMLElement) {\n    // If using the component name annotation plugin, this value may be available on the DOM node\n    if (elem instanceof HTMLElement && elem.dataset && elem.dataset['sentryComponent']) {\n      return elem.dataset['sentryComponent'];\n    }\n  }\n\n  out.push(elem.tagName.toLowerCase());\n\n  // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n  const keyAttrPairs =\n    keyAttrs && keyAttrs.length\n      ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n      : null;\n\n  if (keyAttrPairs && keyAttrPairs.length) {\n    keyAttrPairs.forEach(keyAttrPair => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    if (elem.id) {\n      out.push(`#${elem.id}`);\n    }\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  const allowedAttrs = ['aria-label', '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/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n  try {\n    return WINDOW.document.location.href;\n  } catch (oO) {\n    return '';\n  }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDomElement<E = any>(selector: string): E | null {\n  if (WINDOW.document && WINDOW.document.querySelector) {\n    return WINDOW.document.querySelector(selector) as unknown as E;\n  }\n  return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` attribute. This attribute is added at build-time\n * by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nexport function getComponentName(elem: unknown): string | null {\n  // @ts-expect-error WINDOW has HTMLElement\n  if (!WINDOW.HTMLElement) {\n    return null;\n  }\n\n  let currentElem = elem as SimpleNode;\n  const MAX_TRAVERSE_HEIGHT = 5;\n  for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n    if (!currentElem) {\n      return null;\n    }\n\n    if (currentElem instanceof HTMLElement && currentElem.dataset['sentryComponent']) {\n      return currentElem.dataset['sentryComponent'];\n    }\n\n    currentElem = currentElem.parentNode;\n  }\n\n  return null;\n}\n","import type { Event, EventHint, EventProcessor } from '@sentry/types';\nimport { SyncPromise, getGlobalSingleton, isThenable, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\n/**\n * Returns the global event processors.\n * @deprecated Global event processors will be removed in v8.\n */\nexport function getGlobalEventProcessors(): EventProcessor[] {\n  return getGlobalSingleton<EventProcessor[]>('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @deprecated Use `addEventProcessor` instead. Global event processors will be removed in v8.\n */\nexport function addGlobalEventProcessor(callback: EventProcessor): void {\n  // eslint-disable-next-line deprecation/deprecation\n  getGlobalEventProcessors().push(callback);\n}\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function notifyEventProcessors(\n  processors: EventProcessor[],\n  event: Event | null,\n  hint: EventHint,\n  index: number = 0,\n): PromiseLike<Event | null> {\n  return new SyncPromise<Event | null>((resolve, reject) => {\n    const processor = processors[index];\n    if (event === null || typeof processor !== 'function') {\n      resolve(event);\n    } else {\n      const result = processor({ ...event }, hint) as Event | null;\n\n      DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n      if (isThenable(result)) {\n        void result\n          .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n          .then(null, reject);\n      } else {\n        void notifyEventProcessors(processors, result, hint, index + 1)\n          .then(resolve)\n          .then(null, reject);\n      }\n    }\n  });\n}\n","export const DEFAULT_ENVIRONMENT = 'production';\n","import type { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit<SessionContext, 'started' | 'status'>): Session {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = timestampInSeconds();\n\n  const session: Session = {\n    sid: uuid4(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: 'ok',\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session),\n  };\n\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || timestampInSeconds();\n\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude<SessionStatus, 'ok'>): void {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\n  return dropUndefinedKeys({\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  });\n}\n","import type { Span } from '@sentry/types';\n\n/**\n * Returns the root span of a given span.\n *\n * As long as we use `Transaction`s internally, the returned root span\n * will be a `Transaction` but be aware that this might change in the future.\n *\n * If the given span has no root span or transaction, `undefined` is returned.\n */\nexport function getRootSpan(span: Span): Span | undefined {\n  // TODO (v8): Remove this check and just return span\n  // eslint-disable-next-line deprecation/deprecation\n  return span.transaction;\n}\n","import type { DynamicSamplingContext } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { isString } from './is';\nimport { logger } from './logger';\n\nexport const BAGGAGE_HEADER_NAME = 'baggage';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nexport const MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nexport function baggageHeaderToDynamicSamplingContext(\n  // Very liberal definition of what any incoming header might look like\n  baggageHeader: string | string[] | number | null | undefined | boolean,\n): Partial<DynamicSamplingContext> | undefined {\n  if (!isString(baggageHeader) && !Array.isArray(baggageHeader)) {\n    return undefined;\n  }\n\n  // Intermediary object to store baggage key value pairs of incoming baggage headers on.\n  // It is later used to read Sentry-DSC-values from.\n  let baggageObject: Readonly<Record<string, string>> = {};\n\n  if (Array.isArray(baggageHeader)) {\n    // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n    baggageObject = baggageHeader.reduce<Record<string, string>>((acc, curr) => {\n      const currBaggageObject = baggageHeaderToObject(curr);\n      for (const key of Object.keys(currBaggageObject)) {\n        acc[key] = currBaggageObject[key];\n      }\n      return acc;\n    }, {});\n  } else {\n    // Return undefined if baggage header is an empty string (technically an empty baggage header is not spec conform but\n    // this is how we choose to handle it)\n    if (!baggageHeader) {\n      return undefined;\n    }\n\n    baggageObject = baggageHeaderToObject(baggageHeader);\n  }\n\n  // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n  const dynamicSamplingContext = Object.entries(baggageObject).reduce<Record<string, string>>((acc, [key, value]) => {\n    if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n      const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n      acc[nonPrefixedKey] = value;\n    }\n    return acc;\n  }, {});\n\n  // Only return a dynamic sampling context object if there are keys in it.\n  // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n  if (Object.keys(dynamicSamplingContext).length > 0) {\n    return dynamicSamplingContext as Partial<DynamicSamplingContext>;\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nexport function dynamicSamplingContextToSentryBaggageHeader(\n  // this also takes undefined for convenience and bundle size in other places\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n): string | undefined {\n  if (!dynamicSamplingContext) {\n    return undefined;\n  }\n\n  // Prefix all DSC keys with \"sentry-\" and put them into a new object\n  const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce<Record<string, string>>(\n    (acc, [dscKey, dscValue]) => {\n      if (dscValue) {\n        acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n      }\n      return acc;\n    },\n    {},\n  );\n\n  return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader: string): Record<string, string> {\n  return baggageHeader\n    .split(',')\n    .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n    .reduce<Record<string, string>>((acc, [key, value]) => {\n      acc[key] = value;\n      return acc;\n    }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object: Record<string, string>): string | undefined {\n  if (Object.keys(object).length === 0) {\n    // An empty baggage header is not spec compliant: We return undefined.\n    return undefined;\n  }\n\n  return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n    const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n    const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n    if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n        );\n      return baggageHeader;\n    } else {\n      return newBaggageHeader;\n    }\n  }, '');\n}\n","import type { Span, SpanJSON, SpanTimeInput, TraceContext } from '@sentry/types';\nimport { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds } from '@sentry/utils';\nimport type { Span as SpanClass } from '../tracing/span';\n\n// These are aligned with OpenTelemetry trace flags\nexport const TRACE_FLAG_NONE = 0x0;\nexport const TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n */\nexport function spanToTraceContext(span: Span): TraceContext {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, tags, origin } = spanToJSON(span);\n\n  return dropUndefinedKeys({\n    data,\n    op,\n    parent_span_id,\n    span_id,\n    status,\n    tags,\n    trace_id,\n    origin,\n  });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nexport function spanToTraceHeader(span: Span): string {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input intp a timestamp in seconds.\n */\nexport function spanTimeInputToSeconds(input: SpanTimeInput | undefined): number {\n  if (typeof input === 'number') {\n    return ensureTimestampInSeconds(input);\n  }\n\n  if (Array.isArray(input)) {\n    // See {@link HrTime} for the array-based time format\n    return input[0] + input[1] / 1e9;\n  }\n\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n\n  return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n * Note that all fields returned here are optional and need to be guarded against.\n *\n * Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n * This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n * And `spanToJSON` needs the Span class from `span.ts` to check here.\n * TODO v8: When we remove the deprecated stuff from `span.ts`, we can remove the circular dependency again.\n */\nexport function spanToJSON(span: Span): Partial<SpanJSON> {\n  if (spanIsSpanClass(span)) {\n    return span.getSpanJSON();\n  }\n\n  // Fallback: We also check for `.toJSON()` here...\n  // eslint-disable-next-line deprecation/deprecation\n  if (typeof span.toJSON === 'function') {\n    // eslint-disable-next-line deprecation/deprecation\n    return span.toJSON();\n  }\n\n  return {};\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSpanClass(span: Span): span is SpanClass {\n  return typeof (span as SpanClass).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nexport function spanIsSampled(span: Span): boolean {\n  // We align our trace flags with the ones OpenTelemetry use\n  // So we also check for sampled the same way they do.\n  const { traceFlags } = span.spanContext();\n  // eslint-disable-next-line no-bitwise\n  return Boolean(traceFlags & TRACE_FLAG_SAMPLED);\n}\n","import type { Client, DynamicSamplingContext, Scope, Span, Transaction } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getClient, getCurrentScope } from '../exports';\nimport { getRootSpan } from '../utils/getRootSpan';\nimport { spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(\n  trace_id: string,\n  client: Client,\n  scope?: Scope,\n): DynamicSamplingContext {\n  const options = client.getOptions();\n\n  const { publicKey: public_key } = client.getDsn() || {};\n  // TODO(v8): Remove segment from User\n  // eslint-disable-next-line deprecation/deprecation\n  const { segment: user_segment } = (scope && scope.getUser()) || {};\n\n  const dsc = dropUndefinedKeys({\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    user_segment,\n    public_key,\n    trace_id,\n  }) as DynamicSamplingContext;\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\n/**\n * A Span with a frozen dynamic sampling context.\n */\ntype TransactionWithV7FrozenDsc = Transaction & { _frozenDynamicSamplingContext?: DynamicSamplingContext };\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nexport function getDynamicSamplingContextFromSpan(span: Span): Readonly<Partial<DynamicSamplingContext>> {\n  const client = getClient();\n  if (!client) {\n    return {};\n  }\n\n  // passing emit=false here to only emit later once the DSC is actually populated\n  const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client, getCurrentScope());\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  const txn = getRootSpan(span) as TransactionWithV7FrozenDsc | undefined;\n  if (!txn) {\n    return dsc;\n  }\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  // For now we need to avoid breaking users who directly created a txn with a DSC, where this field is still set.\n  // @see Transaction class constructor\n  const v7FrozenDsc = txn && txn._frozenDynamicSamplingContext;\n  if (v7FrozenDsc) {\n    return v7FrozenDsc;\n  }\n\n  // TODO (v8): Replace txn.metadata with txn.attributes[]\n  // We can't do this yet because attributes aren't always set yet.\n  // eslint-disable-next-line deprecation/deprecation\n  const { sampleRate: maybeSampleRate, source } = txn.metadata;\n  if (maybeSampleRate != null) {\n    dsc.sample_rate = `${maybeSampleRate}`;\n  }\n\n  // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n  const jsonSpan = spanToJSON(txn);\n\n  // after JSON conversion, txn.name becomes jsonSpan.description\n  if (source && source !== 'url') {\n    dsc.transaction = jsonSpan.description;\n  }\n\n  dsc.sampled = String(spanIsSampled(txn));\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n","import type { Breadcrumb, Event, PropagationContext, ScopeData, Span } from '@sentry/types';\nimport { arrayify, dropUndefinedKeys } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';\nimport { getRootSpan } from './getRootSpan';\nimport { spanToJSON, spanToTraceContext } from './spanUtils';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nexport function applyScopeDataToEvent(event: Event, data: ScopeData): void {\n  const { fingerprint, span, breadcrumbs, sdkProcessingMetadata, propagationContext } = data;\n\n  // Apply general data\n  applyDataToEvent(event, data);\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 (span) {\n    applySpanToEvent(event, span);\n  }\n\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata, propagationContext);\n}\n\n/** Merge data of two scopes together. */\nexport function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    sdkProcessingMetadata,\n    breadcrumbs,\n    fingerprint,\n    eventProcessors,\n    attachments,\n    propagationContext,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n    span,\n  } = mergeData;\n\n  mergeAndOverwriteScopeData(data, 'extra', extra);\n  mergeAndOverwriteScopeData(data, 'tags', tags);\n  mergeAndOverwriteScopeData(data, 'user', user);\n  mergeAndOverwriteScopeData(data, 'contexts', contexts);\n  mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n  if (level) {\n    data.level = level;\n  }\n\n  if (transactionName) {\n    // eslint-disable-next-line deprecation/deprecation\n    data.transactionName = transactionName;\n  }\n\n  if (span) {\n    data.span = span;\n  }\n\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nexport function mergeAndOverwriteScopeData<\n  Prop extends 'extra' | 'tags' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n  Data extends ScopeData,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n  if (mergeVal && Object.keys(mergeVal).length) {\n    // Clone object\n    data[prop] = { ...data[prop] };\n    for (const key in mergeVal) {\n      if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n        data[prop][key] = mergeVal[key];\n      }\n    }\n  }\n}\n\n/** Exported only for tests */\nexport function mergeArray<Prop extends 'breadcrumbs' | 'fingerprint'>(\n  event: Event,\n  prop: Prop,\n  mergeVal: ScopeData[Prop],\n): void {\n  const prevVal = event[prop];\n  // If we are not merging any new values,\n  // we only need to proceed if there was an empty array before (as we want to replace it with undefined)\n  if (!mergeVal.length && (!prevVal || prevVal.length)) {\n    return;\n  }\n\n  const merged = [...(prevVal || []), ...mergeVal] as ScopeData[Prop];\n  event[prop] = merged.length ? merged : undefined;\n}\n\nfunction applyDataToEvent(event: Event, data: ScopeData): void {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n  } = data;\n\n  const cleanedExtra = dropUndefinedKeys(extra);\n  if (cleanedExtra && Object.keys(cleanedExtra).length) {\n    event.extra = { ...cleanedExtra, ...event.extra };\n  }\n\n  const cleanedTags = dropUndefinedKeys(tags);\n  if (cleanedTags && Object.keys(cleanedTags).length) {\n    event.tags = { ...cleanedTags, ...event.tags };\n  }\n\n  const cleanedUser = dropUndefinedKeys(user);\n  if (cleanedUser && Object.keys(cleanedUser).length) {\n    event.user = { ...cleanedUser, ...event.user };\n  }\n\n  const cleanedContexts = dropUndefinedKeys(contexts);\n  if (cleanedContexts && Object.keys(cleanedContexts).length) {\n    event.contexts = { ...cleanedContexts, ...event.contexts };\n  }\n\n  if (level) {\n    event.level = level;\n  }\n\n  if (transactionName) {\n    event.transaction = transactionName;\n  }\n}\n\nfunction applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void {\n  const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(\n  event: Event,\n  sdkProcessingMetadata: ScopeData['sdkProcessingMetadata'],\n  propagationContext: PropagationContext,\n): void {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata,\n    propagationContext: propagationContext,\n  };\n}\n\nfunction applySpanToEvent(event: Event, span: Span): void {\n  event.contexts = { trace: spanToTraceContext(span), ...event.contexts };\n  const rootSpan = getRootSpan(span);\n  if (rootSpan) {\n    event.sdkProcessingMetadata = {\n      dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n      ...event.sdkProcessingMetadata,\n    };\n    const transactionName = spanToJSON(rootSpan).description;\n    if (transactionName) {\n      event.tags = { transaction: transactionName, ...event.tags };\n    }\n  }\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 */\nfunction applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerprint'] | undefined): void {\n  // Make sure it's an array first and we actually have something in place\n  event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n  // If we have something on the scope, then merge it with event\n  if (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(fingerprint);\n  }\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","/* eslint-disable max-lines */\nimport type {\n  Attachment,\n  Breadcrumb,\n  CaptureContext,\n  Client,\n  Context,\n  Contexts,\n  Event,\n  EventHint,\n  EventProcessor,\n  Extra,\n  Extras,\n  Primitive,\n  PropagationContext,\n  RequestSession,\n  Scope as ScopeInterface,\n  ScopeContext,\n  ScopeData,\n  Session,\n  Severity,\n  SeverityLevel,\n  Span,\n  Transaction,\n  User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, isPlainObject, logger, uuid4 } from '@sentry/utils';\n\nimport { getGlobalEventProcessors, notifyEventProcessors } from './eventProcessors';\nimport { updateSession } from './session';\nimport { applyScopeDataToEvent } from './utils/applyScopeDataToEvent';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * The global scope is kept in this module.\n * When accessing this via `getGlobalScope()` we'll make sure to set one if none is currently present.\n */\nlet globalScope: ScopeInterface | undefined;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nexport class Scope implements ScopeInterface {\n  /** Flag if notifying is happening. */\n  protected _notifyingListeners: boolean;\n\n  /** Callback for client to receive scope changes. */\n  protected _scopeListeners: Array<(scope: Scope) => void>;\n\n  /** Callback list that will be called after {@link applyToEvent}. */\n  protected _eventProcessors: EventProcessor[];\n\n  /** Array of breadcrumbs. */\n  protected _breadcrumbs: Breadcrumb[];\n\n  /** User */\n  protected _user: User;\n\n  /** Tags */\n  protected _tags: { [key: string]: Primitive };\n\n  /** Extra */\n  protected _extra: Extras;\n\n  /** Contexts */\n  protected _contexts: Contexts;\n\n  /** Attachments */\n  protected _attachments: Attachment[];\n\n  /** Propagation Context for distributed tracing */\n  protected _propagationContext: PropagationContext;\n\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  protected _sdkProcessingMetadata: { [key: string]: unknown };\n\n  /** Fingerprint */\n  protected _fingerprint?: string[];\n\n  /** Severity */\n  // eslint-disable-next-line deprecation/deprecation\n  protected _level?: Severity | SeverityLevel;\n\n  /**\n   * Transaction Name\n   */\n  protected _transactionName?: string;\n\n  /** Span */\n  protected _span?: Span;\n\n  /** Session */\n  protected _session?: Session;\n\n  /** Request Mode Session Status */\n  protected _requestSession?: RequestSession;\n\n  /** The client on this scope */\n  protected _client?: Client;\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n  public constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = generatePropagationContext();\n  }\n\n  /**\n   * Inherit values from the parent scope.\n   * @deprecated Use `scope.clone()` and `new Scope()` instead.\n   */\n  public static clone(scope?: Scope): Scope {\n    return scope ? scope.clone() : new Scope();\n  }\n\n  /**\n   * Clone this scope instance.\n   */\n  public clone(): Scope {\n    const newScope = new Scope();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._span = this._span;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._requestSession = this._requestSession;\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n\n    return newScope;\n  }\n\n  /** Update the client on the scope. */\n  public setClient(client: Client | undefined): void {\n    this._client = client;\n  }\n\n  /**\n   * Get the client assigned to this scope.\n   *\n   * It is generally recommended to use the global function `Sentry.getClient()` instead, unless you know what you are doing.\n   */\n  public getClient(): Client | undefined {\n    return this._client;\n  }\n\n  /**\n   * Add internal on change listener. Used for sub SDKs that need to store the scope.\n   * @hidden\n   */\n  public addScopeListener(callback: (scope: Scope) => void): void {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addEventProcessor(callback: EventProcessor): this {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setUser(user: User | null): this {\n    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      segment: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getUser(): User | undefined {\n    return this._user;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getRequestSession(): RequestSession | undefined {\n    return this._requestSession;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setRequestSession(requestSession?: RequestSession): this {\n    this._requestSession = requestSession;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTags(tags: { [key: string]: Primitive }): this {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: Primitive): this {\n    this._tags = { ...this._tags, [key]: value };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtras(extras: Extras): this {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtra(key: string, extra: Extra): this {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setFingerprint(fingerprint: string[]): this {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setLevel(\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel,\n  ): this {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the transaction name on the scope for future events.\n   * @deprecated Use extra or tags instead.\n   */\n  public setTransactionName(name?: string): this {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setContext(key: string, context: Context | null): this {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the Span on the scope.\n   * @param span Span\n   * @deprecated Instead of setting a span on a scope, use `startSpan()`/`startSpanManual()` instead.\n   */\n  public setSpan(span?: Span): this {\n    this._span = span;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Returns the `Span` if there is one.\n   * @deprecated Use `getActiveSpan()` instead.\n   */\n  public getSpan(): Span | undefined {\n    return this._span;\n  }\n\n  /**\n   * Returns the `Transaction` attached to the scope (if there is one).\n   * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n   */\n  public getTransaction(): Transaction | undefined {\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    const span = this._span;\n    // Cannot replace with getRootSpan because getRootSpan returns a span, not a transaction\n    // Also, this method will be removed anyway.\n    // eslint-disable-next-line deprecation/deprecation\n    return span && span.transaction;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setSession(session?: Session): this {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getSession(): Session | undefined {\n    return this._session;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public update(captureContext?: CaptureContext): this {\n    if (!captureContext) {\n      return this;\n    }\n\n    if (typeof captureContext === 'function') {\n      const updatedScope = (captureContext as <T>(scope: T) => T)(this);\n      return updatedScope instanceof Scope ? updatedScope : this;\n    }\n\n    if (captureContext instanceof Scope) {\n      this._tags = { ...this._tags, ...captureContext._tags };\n      this._extra = { ...this._extra, ...captureContext._extra };\n      this._contexts = { ...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      if (captureContext._propagationContext) {\n        this._propagationContext = captureContext._propagationContext;\n      }\n    } else if (isPlainObject(captureContext)) {\n      // eslint-disable-next-line no-param-reassign\n      captureContext = captureContext as ScopeContext;\n      this._tags = { ...this._tags, ...captureContext.tags };\n      this._extra = { ...this._extra, ...captureContext.extra };\n      this._contexts = { ...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      if (captureContext.propagationContext) {\n        this._propagationContext = captureContext.propagationContext;\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clear(): this {\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    this._attachments = [];\n    this._propagationContext = generatePropagationContext();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n    };\n\n    const breadcrumbs = this._breadcrumbs;\n    breadcrumbs.push(mergedBreadcrumb);\n    this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getLastBreadcrumb(): Breadcrumb | undefined {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearBreadcrumbs(): this {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addAttachment(attachment: Attachment): this {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `getScopeData()` instead.\n   */\n  public getAttachments(): Attachment[] {\n    const data = this.getScopeData();\n\n    return data.attachments;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearAttachments(): this {\n    this._attachments = [];\n    return this;\n  }\n\n  /** @inheritDoc */\n  public getScopeData(): ScopeData {\n    const {\n      _breadcrumbs,\n      _attachments,\n      _contexts,\n      _tags,\n      _extra,\n      _user,\n      _level,\n      _fingerprint,\n      _eventProcessors,\n      _propagationContext,\n      _sdkProcessingMetadata,\n      _transactionName,\n      _span,\n    } = this;\n\n    return {\n      breadcrumbs: _breadcrumbs,\n      attachments: _attachments,\n      contexts: _contexts,\n      tags: _tags,\n      extra: _extra,\n      user: _user,\n      level: _level,\n      fingerprint: _fingerprint || [],\n      eventProcessors: _eventProcessors,\n      propagationContext: _propagationContext,\n      sdkProcessingMetadata: _sdkProcessingMetadata,\n      transactionName: _transactionName,\n      span: _span,\n    };\n  }\n\n  /**\n   * Applies data from the scope to the event and runs all event processors on it.\n   *\n   * @param event Event\n   * @param hint Object containing additional information about the original exception, for use by the event processors.\n   * @hidden\n   * @deprecated Use `applyScopeDataToEvent()` directly\n   */\n  public applyToEvent(\n    event: Event,\n    hint: EventHint = {},\n    additionalEventProcessors: EventProcessor[] = [],\n  ): PromiseLike<Event | null> {\n    applyScopeDataToEvent(event, this.getScopeData());\n\n    // TODO (v8): Update this order to be: Global > Client > Scope\n    const eventProcessors: EventProcessor[] = [\n      ...additionalEventProcessors,\n      // eslint-disable-next-line deprecation/deprecation\n      ...getGlobalEventProcessors(),\n      ...this._eventProcessors,\n    ];\n\n    return notifyEventProcessors(eventProcessors, event, hint);\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry\n   */\n  public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n    this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setPropagationContext(context: PropagationContext): this {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getPropagationContext(): PropagationContext {\n    return this._propagationContext;\n  }\n\n  /**\n   * Capture an exception for this scope.\n   *\n   * @param exception The exception to capture.\n   * @param hint Optinal additional data to attach to the Sentry event.\n   * @returns the id of the captured Sentry event.\n   */\n  public captureException(exception: unknown, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a message for this scope.\n   *\n   * @param message The message to capture.\n   * @param level An optional severity level to report the message with.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured message.\n   */\n  public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = new Error(message);\n\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Captures a manually created event for this scope and sends it to Sentry.\n   *\n   * @param exception The event to capture.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured event.\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n  protected _notifyScopeListeners(): void {\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(callback => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): ScopeInterface {\n  if (!globalScope) {\n    globalScope = new Scope();\n  }\n\n  return globalScope;\n}\n\n/**\n * This is mainly needed for tests.\n * DO NOT USE this, as this is an internal API and subject to change.\n * @hidden\n */\nexport function setGlobalScope(scope: ScopeInterface | undefined): void {\n  globalScope = scope;\n}\n\nfunction generatePropagationContext(): PropagationContext {\n  return {\n    traceId: uuid4(),\n    spanId: uuid4().substring(16),\n  };\n}\n","export const SDK_VERSION = '7.98.0';\n","/* eslint-disable max-lines */\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  Client,\n  CustomSamplingContext,\n  Event,\n  EventHint,\n  Extra,\n  Extras,\n  Hub as HubInterface,\n  Integration,\n  IntegrationClass,\n  Primitive,\n  Session,\n  SessionContext,\n  Severity,\n  SeverityLevel,\n  Transaction,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport {\n  GLOBAL_OBJ,\n  consoleSandbox,\n  dateTimestampInSeconds,\n  getGlobalSingleton,\n  isThenable,\n  logger,\n  uuid4,\n} from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport { SDK_VERSION } from './version';\n\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 const API_VERSION = parseFloat(SDK_VERSION);\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\nexport interface RunWithAsyncContextOptions {\n  /** Whether to reuse an existing async context if one exists. Defaults to false. */\n  reuseExisting?: boolean;\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Strategy used to track async context.\n */\nexport interface AsyncContextStrategy {\n  /**\n   * Gets the current async context. Returns undefined if there is no current async context.\n   */\n  getCurrentHub: () => Hub | undefined;\n  /**\n   * Runs the supplied callback in its own async context.\n   */\n  runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions): T;\n}\n\n/**\n * A layer in the process stack.\n * @hidden\n */\nexport interface Layer {\n  client?: Client;\n  scope: Scope;\n}\n\n/**\n * An object that contains a hub and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n  __SENTRY__?: {\n    hub?: Hub;\n    acs?: AsyncContextStrategy;\n    /**\n     * Extra Hub properties injected by various SDKs\n     */\n    integrations?: Integration[];\n    extensions?: {\n      /** Extension methods for the hub, which are bound to the current Hub instance */\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      [key: string]: Function;\n    };\n  };\n}\n\n/**\n * @inheritDoc\n */\nexport class Hub implements HubInterface {\n  /** Is a {@link Layer}[] containing the client and scope */\n  private readonly _stack: Layer[];\n\n  /** Contains the last event id of a captured event.  */\n  private _lastEventId?: string;\n\n  private _isolationScope: Scope;\n\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  public constructor(\n    client?: Client,\n    scope?: Scope,\n    isolationScope?: Scope,\n    private readonly _version: number = API_VERSION,\n  ) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n      assignedScope.setClient(client);\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n      assignedIsolationScope.setClient(client);\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    this._stack = [{ scope: assignedScope }];\n\n    if (client) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.bindClient(client);\n    }\n\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Checks if this hub's version is older than the given version.\n   *\n   * @param version A version number to compare to.\n   * @return True if the given version is newer; otherwise false.\n   *\n   * @deprecated This will be removed in v8.\n   */\n  public isOlderThan(version: number): boolean {\n    return this._version < version;\n  }\n\n  /**\n   * This binds the given client to the current scope.\n   * @param client An SDK client (client) instance.\n   *\n   * @deprecated Use `initAndBind()` directly, or `setCurrentClient()` and/or `client.init()` instead.\n   */\n  public bindClient(client?: Client): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const top = this.getStackTop();\n    top.client = client;\n    top.scope.setClient(client);\n    // eslint-disable-next-line deprecation/deprecation\n    if (client && client.setupIntegrations) {\n      // eslint-disable-next-line deprecation/deprecation\n      client.setupIntegrations();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n  public pushScope(): Scope {\n    // We want to clone the content of prev scope\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.getScope().clone();\n    // eslint-disable-next-line deprecation/deprecation\n    this.getStack().push({\n      // eslint-disable-next-line deprecation/deprecation\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n  public popScope(): boolean {\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.getStack().length <= 1) return false;\n    // eslint-disable-next-line deprecation/deprecation\n    return !!this.getStack().pop();\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.withScope()` instead.\n   */\n  public withScope<T>(callback: (scope: Scope) => T): T {\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.pushScope();\n\n    let maybePromiseResult: T;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          return res;\n        },\n        e => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          throw e;\n        },\n      );\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    this.popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.getClient()` instead.\n   */\n  public getClient<C extends Client>(): C | undefined {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().client as C;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   *\n   * @deprecated Use `Sentry.getCurrentScope()` instead.\n   */\n  public getScope(): Scope {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * @deprecated Use `Sentry.getIsolationScope()` instead.\n   */\n  public getIsolationScope(): Scope {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the scope stack for domains or the process.\n   * @deprecated This will be removed in v8.\n   */\n  public getStack(): Layer[] {\n    return this._stack;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   * @deprecated This will be removed in v8.\n   */\n  public getStackTop(): Layer {\n    return this._stack[this._stack.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureException()` instead.\n   */\n  public captureException(exception: unknown, hint?: EventHint): string {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error('Sentry syntheticException');\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureException(exception, {\n      originalException: exception,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use  `Sentry.captureMessage()` instead.\n   */\n  public captureMessage(\n    message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    level?: Severity | SeverityLevel,\n    hint?: EventHint,\n  ): string {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error(message);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureMessage(message, level, {\n      originalException: message,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureEvent()` instead.\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n    if (!event.type) {\n      this._lastEventId = eventId;\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureEvent(event, { ...hint, event_id: eventId });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated This will be removed in v8.\n   */\n  public lastEventId(): string | undefined {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.addBreadcrumb()` instead.\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n\n    if (!client) return;\n\n    const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n      (client.getOptions && client.getOptions()) || {};\n\n    if (maxBreadcrumbs <= 0) return;\n\n    const timestamp = dateTimestampInSeconds();\n    const mergedBreadcrumb = { timestamp, ...breadcrumb };\n    const finalBreadcrumb = beforeBreadcrumb\n      ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n      : mergedBreadcrumb;\n\n    if (finalBreadcrumb === null) return;\n\n    if (client.emit) {\n      client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n    }\n\n    // TODO(v8): I know this comment doesn't make much sense because the hub will be deprecated but I still wanted to\n    // write it down. In theory, we would have to add the breadcrumbs to the isolation scope here, however, that would\n    // duplicate all of the breadcrumbs. There was the possibility of adding breadcrumbs to both, the isolation scope\n    // and the normal scope, and deduplicating it down the line in the event processing pipeline. However, that would\n    // have been very fragile, because the breadcrumb objects would have needed to keep their identity all throughout\n    // the event processing pipeline.\n    // In the new implementation, the top level `Sentry.addBreadcrumb()` should ONLY write to the isolation scope.\n\n    scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setUser()` instead.\n   */\n  public setUser(user: User | null): void {\n    // TODO(v8): The top level `Sentry.setUser()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setUser(user);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTags()` instead.\n   */\n  public setTags(tags: { [key: string]: Primitive }): void {\n    // TODO(v8): The top level `Sentry.setTags()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTags(tags);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtras()` instead.\n   */\n  public setExtras(extras: Extras): void {\n    // TODO(v8): The top level `Sentry.setExtras()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtras(extras);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTag()` instead.\n   */\n  public setTag(key: string, value: Primitive): void {\n    // TODO(v8): The top level `Sentry.setTag()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTag(key, value);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtra()` instead.\n   */\n  public setExtra(key: string, extra: Extra): void {\n    // TODO(v8): The top level `Sentry.setExtra()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtra(key, extra);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtra(key, extra);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setContext()` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public setContext(name: string, context: { [key: string]: any } | null): void {\n    // TODO(v8): The top level `Sentry.setContext()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setContext(name, context);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setContext(name, context);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `getScope()` directly.\n   */\n  public configureScope(callback: (scope: Scope) => void): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public run(callback: (hub: Hub) => void): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const oldHub = makeMain(this);\n    try {\n      callback(this);\n    } finally {\n      // eslint-disable-next-line deprecation/deprecation\n      makeMain(oldHub);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.getClient().getIntegrationByName()` instead.\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this.getClient();\n    if (!client) return null;\n    try {\n      // eslint-disable-next-line deprecation/deprecation\n      return client.getIntegration(integration);\n    } catch (_oO) {\n      DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n      return null;\n    }\n  }\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 `.end()` 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   *\n   * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n   */\n  public startTransaction(context: TransactionContext, customSamplingContext?: CustomSamplingContext): Transaction {\n    const result = this._callExtensionMethod<Transaction>('startTransaction', context, customSamplingContext);\n\n    if (DEBUG_BUILD && !result) {\n      // eslint-disable-next-line deprecation/deprecation\n      const client = this.getClient();\n      if (!client) {\n        logger.warn(\n          \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n        );\n      } else {\n        logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n`);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `spanToTraceHeader()` instead.\n   */\n  public traceHeaders(): { [key: string]: string } {\n    return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders');\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use top level `captureSession` instead.\n   */\n  public captureSession(endSession: boolean = false): void {\n    // both send the update and pull the session from the scope\n    if (endSession) {\n      // eslint-disable-next-line deprecation/deprecation\n      return this.endSession();\n    }\n\n    // only send the update\n    this._sendSessionUpdate();\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `endSession` instead.\n   */\n  public endSession(): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const layer = this.getStackTop();\n    const scope = layer.scope;\n    const session = scope.getSession();\n    if (session) {\n      closeSession(session);\n    }\n    this._sendSessionUpdate();\n\n    // the session is over; take it off of the scope\n    scope.setSession();\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `startSession` instead.\n   */\n  public startSession(context?: SessionContext): Session {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n    const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n    // Will fetch userAgent if called from browser sdk\n    const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n    const session = makeSession({\n      release,\n      environment,\n      user: scope.getUser(),\n      ...(userAgent && { userAgent }),\n      ...context,\n    });\n\n    // End existing session if there's one\n    const currentSession = scope.getSession && scope.getSession();\n    if (currentSession && currentSession.status === 'ok') {\n      updateSession(currentSession, { status: 'exited' });\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.endSession();\n\n    // Afterwards we set the new session on the scope\n    scope.setSession(session);\n\n    return session;\n  }\n\n  /**\n   * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n   * when Tracing is used.\n   *\n   * @deprecated Use top-level `getClient().getOptions().sendDefaultPii` instead. This function\n   * only unnecessarily increased API surface but only wrapped accessing the option.\n   */\n  public shouldSendDefaultPii(): boolean {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this.getClient();\n    const options = client && client.getOptions();\n    return Boolean(options && options.sendDefaultPii);\n  }\n\n  /**\n   * Sends the current Session on the scope\n   */\n  private _sendSessionUpdate(): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n\n    const session = scope.getSession();\n    if (session && client && client.captureSession) {\n      client.captureSession(session);\n    }\n  }\n\n  /**\n   * Calls global extension method and binding current instance to the function call\n   */\n  // @ts-expect-error 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  private _callExtensionMethod<T>(method: string, ...args: any[]): T {\n    const carrier = getMainCarrier();\n    const sentry = carrier.__SENTRY__;\n    if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n      return sentry.extensions[method].apply(this, args);\n    }\n    DEBUG_BUILD && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n  }\n}\n\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(): Carrier {\n  GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n    extensions: {},\n    hub: undefined,\n  };\n  return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n *\n * @deprecated Use `setCurrentClient()` instead.\n */\nexport function makeMain(hub: Hub): Hub {\n  const registry = getMainCarrier();\n  const oldHub = getHubFromCarrier(registry);\n  setHubOnCarrier(registry, hub);\n  return oldHub;\n}\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 *\n * @deprecated Use the respective replacement method directly instead.\n */\nexport function getCurrentHub(): Hub {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    const hub = registry.__SENTRY__.acs.getCurrentHub();\n\n    if (hub) {\n      return hub;\n    }\n  }\n\n  // Return hub that lives on a global object\n  return getGlobalHub(registry);\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context,\n * meaning that it will remain stable for the same Hub.\n */\nexport function getIsolationScope(): Scope {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getIsolationScope();\n}\n\nfunction getGlobalHub(registry: Carrier = getMainCarrier()): Hub {\n  // If there's no hub, or its an old API, assign a new one\n\n  if (\n    !hasHubOnCarrier(registry) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(registry).isOlderThan(API_VERSION)\n  ) {\n    setHubOnCarrier(registry, new Hub());\n  }\n\n  // Return hub that lives on a global object\n  return getHubFromCarrier(registry);\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * If the carrier does not contain a hub, a new hub is created with the global hub client and scope.\n */\nexport function ensureHubOnCarrier(carrier: Carrier, parent: Hub = getGlobalHub()): void {\n  // If there's no hub on current domain, or it's an old API, assign a new one\n  if (\n    !hasHubOnCarrier(carrier) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(carrier).isOlderThan(API_VERSION)\n  ) {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = parent.getClient();\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = parent.getScope();\n    // eslint-disable-next-line deprecation/deprecation\n    const isolationScope = parent.getIsolationScope();\n    setHubOnCarrier(carrier, new Hub(client, scope.clone(), isolationScope.clone()));\n  }\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  registry.__SENTRY__ = registry.__SENTRY__ || {};\n  registry.__SENTRY__.acs = strategy;\n}\n\n/**\n * Runs the supplied callback in its own async context. Async Context strategies are defined per SDK.\n *\n * @param callback The callback to run in its own async context\n * @param options Options to pass to the async context strategy\n * @returns The result of the callback\n */\nexport function runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions = {}): T {\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    return registry.__SENTRY__.acs.runWithAsyncContext(callback, options);\n  }\n\n  // if there was no strategy, fallback to just calling the callback\n  return callback();\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: Carrier): boolean {\n  return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\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: Carrier): Hub {\n  return getGlobalSingleton<Hub>('hub', () => new Hub(), carrier);\n}\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: Carrier, hub: Hub): boolean {\n  if (!carrier) return false;\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n  __SENTRY__.hub = hub;\n  return true;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MemoFunc = [\n  // memoize\n  (obj: any) => boolean,\n  // unmemoize\n  (obj: any) => void,\n];\n\n/**\n * Helper to decycle json objects\n */\nexport function memoBuilder(): MemoFunc {\n  const hasWeakSet = typeof WeakSet === 'function';\n  const inner: any = hasWeakSet ? new WeakSet() : [];\n  function memoize(obj: any): boolean {\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 (let i = 0; i < inner.length; i++) {\n      const value = inner[i];\n      if (value === obj) {\n        return true;\n      }\n    }\n    inner.push(obj);\n    return false;\n  }\n\n  function unmemoize(obj: any): void {\n    if (hasWeakSet) {\n      inner.delete(obj);\n    } else {\n      for (let 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","import type {\n  CaptureContext,\n  Client,\n  ClientOptions,\n  Event,\n  EventHint,\n  Scope as ScopeInterface,\n  ScopeContext,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, addExceptionMechanism, dateTimestampInSeconds, normalize, truncate, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getGlobalEventProcessors, notifyEventProcessors } from '../eventProcessors';\nimport { Scope, getGlobalScope } from '../scope';\nimport { applyScopeDataToEvent, mergeScopeData } from './applyScopeDataToEvent';\nimport { spanToJSON } from './spanUtils';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\nexport type ExclusiveEventHintOrCaptureContext =\n  | (CaptureContext & Partial<{ [key in keyof EventHint]: never }>)\n  | (EventHint & Partial<{ [key in keyof ScopeContext]: never }>);\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 * Note: This also triggers callbacks for `addGlobalEventProcessor`, but not `beforeSend`.\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 * @hidden\n */\nexport function prepareEvent(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n  scope?: Scope,\n  client?: Client,\n  isolationScope?: Scope,\n): PromiseLike<Event | null> {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n  const prepared: Event = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\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  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    addExceptionMechanism(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client && client.getEventProcessors ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Hub.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = getGlobalScope().getScopeData();\n\n  if (isolationScope) {\n    const isolationData = isolationScope.getScopeData();\n    mergeScopeData(data, isolationData);\n  }\n\n  if (finalScope) {\n    const finalScopeData = finalScope.getScopeData();\n    mergeScopeData(data, finalScopeData);\n  }\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  applyScopeDataToEvent(prepared, data);\n\n  // TODO (v8): Update this order to be: Global > Client > Scope\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // eslint-disable-next-line deprecation/deprecation\n    ...getGlobalEventProcessors(),\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\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 */\nfunction applyClientOptions(event: Event, options: ClientOptions): void {\n  const { environment, release, dist, maxValueLength = 250 } = options;\n\n  if (!('environment' in event)) {\n    event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n  }\n\n  if (event.release === undefined && release !== undefined) {\n    event.release = release;\n  }\n\n  if (event.dist === undefined && dist !== undefined) {\n    event.dist = dist;\n  }\n\n  if (event.message) {\n    event.message = truncate(event.message, maxValueLength);\n  }\n\n  const exception = event.exception && event.exception.values && event.exception.values[0];\n  if (exception && exception.value) {\n    exception.value = truncate(exception.value, maxValueLength);\n  }\n\n  const request = event.request;\n  if (request && request.url) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n}\n\nconst debugIdStackParserCache = new WeakMap<StackParser, Map<string, StackFrame[]>>();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n  if (!debugIdMap) {\n    return;\n  }\n\n  let debugIdStackFramesCache: Map<string, StackFrame[]>;\n  const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n  if (cachedDebugIdStackFrameCache) {\n    debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n  } else {\n    debugIdStackFramesCache = new Map<string, StackFrame[]>();\n    debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n  }\n\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = Object.keys(debugIdMap).reduce<Record<string, string>>((acc, debugIdStackTrace) => {\n    let parsedStack: StackFrame[];\n    const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n    if (cachedParsedStack) {\n      parsedStack = cachedParsedStack;\n    } else {\n      parsedStack = stackParser(debugIdStackTrace);\n      debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n    }\n\n    for (let i = parsedStack.length - 1; i >= 0; i--) {\n      const stackFrame = parsedStack[i];\n      if (stackFrame.filename) {\n        acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n        break;\n      }\n    }\n    return acc;\n  }, {});\n\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event!.exception!.values!.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace!.frames!.forEach(frame => {\n        if (frame.filename) {\n          frame.debug_id = filenameDebugIdMap[frame.filename];\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap: Record<string, string> = {};\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace!.frames!.forEach(frame => {\n        if (frame.debug_id) {\n          if (frame.abs_path) {\n            filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n          } else if (frame.filename) {\n            filenameDebugIdMap[frame.filename] = frame.debug_id;\n          }\n          delete frame.debug_id;\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.keys(filenameDebugIdMap).forEach(filename => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id: filenameDebugIdMap[filename],\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\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 */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n  if (!event) {\n    return null;\n  }\n\n  const normalized: Event = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: normalize(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: normalize(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth),\n    }),\n  };\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 && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      const data = spanToJSON(span).data;\n\n      if (data) {\n        // This is a bit weird, as we generally have `Span` instances here, but to be safe we do not assume so\n        // eslint-disable-next-line deprecation/deprecation\n        span.data = normalize(data, depth, maxBreadth);\n      }\n\n      return span;\n    });\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(scope: Scope | undefined, captureContext: CaptureContext | undefined): Scope | undefined {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nexport function parseEventHintOrCaptureContext(\n  hint: ExclusiveEventHintOrCaptureContext | undefined,\n): EventHint | undefined {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(\n  hint: CaptureContext | EventHint,\n): hint is ScopeInterface | ((scope: ScopeInterface) => ScopeInterface) {\n  return hint instanceof Scope || typeof hint === 'function';\n}\n\ntype ScopeContextProperty = keyof ScopeContext;\nconst captureContextKeys: readonly ScopeContextProperty[] = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'requestSession',\n  'propagationContext',\n] as const;\n\nfunction hintIsScopeContext(hint: Partial<ScopeContext> | EventHint): hint is Partial<ScopeContext> {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key as ScopeContextProperty));\n}\n","import type {\n  Breadcrumb,\n  BreadcrumbHint,\n  CaptureContext,\n  CheckIn,\n  Client,\n  CustomSamplingContext,\n  Event,\n  EventHint,\n  Extra,\n  Extras,\n  FinishedCheckIn,\n  MonitorConfig,\n  Primitive,\n  Scope as ScopeInterface,\n  Session,\n  SessionContext,\n  Severity,\n  SeverityLevel,\n  Span,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, isThenable, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Hub } from './hub';\nimport { runWithAsyncContext } from './hub';\nimport { getCurrentHub, getIsolationScope } from './hub';\nimport type { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  exception: any,\n  hint?: ExclusiveEventHintOrCaptureContext,\n): string {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(\n  message: string,\n  // eslint-disable-next-line deprecation/deprecation\n  captureContext?: CaptureContext | Severity | SeverityLevel,\n): string {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param exception The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n *\n * @deprecated Use getCurrentScope() directly.\n */\nexport function configureScope(callback: (scope: Scope) => void): ReturnType<Hub['configureScope']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().configureScope(callback);\n}\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: Breadcrumb, hint?: BreadcrumbHint): ReturnType<Hub['addBreadcrumb']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().addBreadcrumb(breadcrumb, hint);\n}\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: string, context: { [key: string]: any } | null): ReturnType<Hub['setContext']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setContext(name, context);\n}\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: Extras): ReturnType<Hub['setExtras']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setExtras(extras);\n}\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: string, extra: Extra): ReturnType<Hub['setExtra']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setExtra(key, extra);\n}\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: { [key: string]: Primitive }): ReturnType<Hub['setTags']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setTags(tags);\n}\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: string, value: Primitive): ReturnType<Hub['setTag']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setTag(key, value);\n}\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: User | null): ReturnType<Hub['setUser']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setUser(user);\n}\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 */\nexport function withScope<T>(callback: (scope: Scope) => T): T;\n/**\n * Set the given scope as the active scope in the callback.\n */\nexport function withScope<T>(scope: ScopeInterface | undefined, callback: (scope: Scope) => T): T;\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nexport function withScope<T>(\n  ...rest: [callback: (scope: Scope) => T] | [scope: ScopeInterface | undefined, callback: (scope: Scope) => T]\n): T {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n    if (!scope) {\n      // eslint-disable-next-line deprecation/deprecation\n      return hub.withScope(callback);\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    return hub.withScope(() => {\n      // eslint-disable-next-line deprecation/deprecation\n      hub.getStackTop().scope = scope as Scope;\n      return callback(scope as Scope);\n    });\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return hub.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * @param callback The callback in which the passed isolation scope is active. (Note: In environments without async\n * context strategy, the currently active isolation scope may change within execution of the callback.)\n * @returns The same value that `callback` returns.\n */\nexport function withIsolationScope<T>(callback: (isolationScope: Scope) => T): T {\n  return runWithAsyncContext(() => {\n    return callback(getIsolationScope());\n  });\n}\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback.\n *\n * @param span Spans started in the context of the provided callback will be children of this span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nexport function withActiveSpan<T>(span: Span, callback: (scope: Scope) => T): T {\n  return withScope(scope => {\n    // eslint-disable-next-line deprecation/deprecation\n    scope.setSpan(span);\n    return callback(scope);\n  });\n}\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 `.end()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\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 *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\nexport function startTransaction(\n  context: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n): ReturnType<Hub['startTransaction']> {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n  const scope = getCurrentScope();\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor<T>(\n  monitorSlug: CheckIn['monitorSlug'],\n  callback: () => T,\n  upsertMonitorConfig?: MonitorConfig,\n): T {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = timestampInSeconds();\n\n  function finishCheckIn(status: FinishedCheckIn['status']): void {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback();\n  } catch (e) {\n    finishCheckIn('error');\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishCheckIn('ok');\n      },\n      () => {\n        finishCheckIn('error');\n      },\n    );\n  } else {\n    finishCheckIn('ok');\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n  const client = getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n  const client = getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n * @deprecated This function will be removed in the next major version of the Sentry SDK.\n */\nexport function lastEventId(): string | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().lastEventId();\n}\n\n/**\n * Get the currently active client.\n */\nexport function getClient<C extends Client>(): C | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getClient<C>();\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n  return !!getClient();\n}\n\n/**\n * Get the currently active scope.\n */\nexport function getCurrentScope(): Scope {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getScope();\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n  // Will fetch userAgent if called from browser sdk\n  const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n  const session = makeSession({\n    release,\n    environment,\n    user: currentScope.getUser() || isolationScope.getUser(),\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession && currentSession.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n  const client = getClient();\n  // TODO (v8): Remove currentScope and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session && client && client.captureSession) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n","import type {\n  Client,\n  Event,\n  EventHint,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  IntegrationFnResult,\n  Options,\n} from '@sentry/types';\nimport { arrayify, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { addGlobalEventProcessor } from './eventProcessors';\nimport { getClient } from './exports';\nimport { getCurrentHub } from './hub';\n\ndeclare module '@sentry/types' {\n  interface Integration {\n    isDefaultInstance?: boolean;\n  }\n}\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n  [key: string]: Integration;\n};\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n  const integrationsByName: { [key: string]: Integration } = {};\n\n  integrations.forEach(currentInstance => {\n    const { name } = currentInstance;\n\n    const existingInstance = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(options: Pick<Options, 'defaultIntegrations' | 'integrations'>): Integration[] {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach(integration => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations: Integration[];\n\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === 'function') {\n    integrations = arrayify(userIntegrations(defaultIntegrations));\n  } else {\n    integrations = defaultIntegrations;\n  }\n\n  const finalIntegrations = filterDuplicates(integrations);\n\n  // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n  // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n  // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n  // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n  const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n  if (debugIndex !== -1) {\n    const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n    finalIntegrations.push(debugInstance);\n  }\n\n  return finalIntegrations;\n}\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(client: Client, integrations: Integration[]): IntegrationIndex {\n  const integrationIndex: IntegrationIndex = {};\n\n  integrations.forEach(integration => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/** Setup a single integration.  */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n  if (integrationIndex[integration.name]) {\n    DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n\n  // `setupOnce` is only called the first time\n  if (installedIntegrations.indexOf(integration.name) === -1) {\n    // eslint-disable-next-line deprecation/deprecation\n    integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n    installedIntegrations.push(integration.name);\n  }\n\n  // `setup` is run for each client\n  if (integration.setup && typeof integration.setup === 'function') {\n    integration.setup(client);\n  }\n\n  if (client.on && typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (client.addEventProcessor && typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n    const processor = Object.assign((event: Event, hint: EventHint) => callback(event, hint, client), {\n      id: integration.name,\n    });\n\n    client.addEventProcessor(processor);\n  }\n\n  DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current hub's client. */\nexport function addIntegration(integration: Integration): void {\n  const client = getClient();\n\n  if (!client || !client.addIntegration) {\n    DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex<T>(arr: T[], callback: (item: T) => boolean): number {\n  for (let i = 0; i < arr.length; i++) {\n    if (callback(arr[i]) === true) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\n/**\n * Convert a new integration function to the legacy class syntax.\n * In v8, we can remove this and instead export the integration functions directly.\n *\n * @deprecated This will be removed in v8!\n */\nexport function convertIntegrationFnToClass<Fn extends IntegrationFn>(\n  name: string,\n  fn: Fn,\n): IntegrationClass<Integration> {\n  return Object.assign(\n    function ConvertedIntegration(...args: Parameters<Fn>): Integration {\n      return fn(...args);\n    },\n    { id: name },\n  ) as unknown as IntegrationClass<Integration>;\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nexport function defineIntegration<Fn extends IntegrationFn>(fn: Fn): (...args: Parameters<Fn>) => IntegrationFnResult {\n  return fn;\n}\n","import type { Integration, IntegrationClass, IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { getOriginalFunction } from '@sentry/utils';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\nlet originalFunctionToString: () => void;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      originalFunctionToString = Function.prototype.toString;\n\n      // intrinsics (like Function.prototype) might be immutable in some environments\n      // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        Function.prototype.toString = function (this: WrappedFunction, ...args: any[]): string {\n          const context = getOriginalFunction(this) || this;\n          return originalFunctionToString.apply(context, args);\n        };\n      } catch {\n        // ignore errors here, just don't patch this\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n * @deprecated Use `functionToStringIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const FunctionToString = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  functionToStringIntegration,\n) as IntegrationClass<Integration & { setupOnce: () => void }>;\n","import type { Client, Event, EventHint, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { getEventDescription, logger, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\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.\nconst DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n\nconst DEFAULT_IGNORE_TRANSACTIONS = [\n  /^.*\\/healthcheck$/,\n  /^.*\\/healthy$/,\n  /^.*\\/live$/,\n  /^.*\\/ready$/,\n  /^.*\\/heartbeat$/,\n  /^.*\\/health$/,\n  /^.*\\/healthz$/,\n];\n\n/** Options for the InboundFilters integration */\nexport interface InboundFiltersOptions {\n  allowUrls: Array<string | RegExp>;\n  denyUrls: Array<string | RegExp>;\n  ignoreErrors: Array<string | RegExp>;\n  ignoreTransactions: Array<string | RegExp>;\n  ignoreInternal: boolean;\n  disableErrorDefaults: boolean;\n  disableTransactionDefaults: boolean;\n}\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options: Partial<InboundFiltersOptions> = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event, _hint, client) {\n      const clientOptions = client.getOptions();\n      const mergedOptions = _mergeOptions(options, clientOptions);\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\n/**\n * Inbound filters configurable by the user.\n * @deprecated Use `inboundFiltersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const InboundFilters = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  inboundFiltersIntegration,\n) as IntegrationClass<Integration & { preprocessEvent: (event: Event, hint: EventHint, client: Client) => void }> & {\n  new (\n    options?: Partial<{\n      allowUrls: Array<string | RegExp>;\n      denyUrls: Array<string | RegExp>;\n      ignoreErrors: Array<string | RegExp>;\n      ignoreTransactions: Array<string | RegExp>;\n      ignoreInternal: boolean;\n      disableErrorDefaults: boolean;\n      disableTransactionDefaults: boolean;\n    }>,\n  ): Integration;\n};\n\nfunction _mergeOptions(\n  internalOptions: Partial<InboundFiltersOptions> = {},\n  clientOptions: Partial<InboundFiltersOptions> = {},\n): Partial<InboundFiltersOptions> {\n  return {\n    allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n    denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n    ignoreErrors: [\n      ...(internalOptions.ignoreErrors || []),\n      ...(clientOptions.ignoreErrors || []),\n      ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n    ],\n    ignoreTransactions: [\n      ...(internalOptions.ignoreTransactions || []),\n      ...(clientOptions.ignoreTransactions || []),\n      ...(internalOptions.disableTransactionDefaults ? [] : DEFAULT_IGNORE_TRANSACTIONS),\n    ],\n    ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n  };\n}\n\nfunction _shouldDropEvent(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n  if (options.ignoreInternal && _isSentryError(event)) {\n    DEBUG_BUILD &&\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n    return true;\n  }\n  if (_isIgnoredError(event, options.ignoreErrors)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isDeniedUrl(event, options.denyUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  if (!_isAllowedUrl(event, options.allowUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  return false;\n}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array<string | RegExp>): boolean {\n  // If event.type, this is not an error\n  if (event.type || !ignoreErrors || !ignoreErrors.length) {\n    return false;\n  }\n\n  return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event: Event, ignoreTransactions?: Array<string | RegExp>): boolean {\n  if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array<string | RegExp>): boolean {\n  // TODO: Use Glob instead?\n  if (!denyUrls || !denyUrls.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array<string | RegExp>): boolean {\n  // TODO: Use Glob instead?\n  if (!allowUrls || !allowUrls.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event: Event): string[] {\n  const possibleMessages: string[] = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  let lastException;\n  try {\n    // @ts-expect-error Try catching to save bundle size\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    lastException = event.exception.values[event.exception.values.length - 1];\n  } catch (e) {\n    // try catching to save bundle size checking existence of variables\n  }\n\n  if (lastException) {\n    if (lastException.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  }\n\n  if (DEBUG_BUILD && possibleMessages.length === 0) {\n    logger.error(`Could not extract message for event ${getEventDescription(event)}`);\n  }\n\n  return possibleMessages;\n}\n\nfunction _isSentryError(event: Event): boolean {\n  try {\n    // @ts-expect-error can't be a sentry error if undefined\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return event.exception.values[0].type === 'SentryError';\n  } catch (e) {\n    // ignore\n  }\n  return false;\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n  try {\n    let frames;\n    try {\n      // @ts-expect-error we only care about frames if the whole thing here is defined\n      frames = event.exception.values[0].stacktrace.frames;\n    } catch (e) {\n      // ignore\n    }\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch (oO) {\n    DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Client, Event, EventHint, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\nimport { exceptionFromError } from '../eventbuilder';\n\ninterface LinkedErrorsOptions {\n  key?: string;\n  limit?: number;\n}\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options: LinkedErrorsOptions = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      applyAggregateErrorsToEvent(\n        // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n        exceptionFromError,\n        options.stackParser,\n        options.maxValueLength,\n        key,\n        limit,\n        event,\n        hint,\n      );\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\n/**\n * Aggregrate linked errors in an event.\n * @deprecated Use `linkedErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration) as IntegrationClass<\n  Integration & { preprocessEvent: (event: Event, hint: EventHint, client: Client) => void }\n> & { new (options?: { key?: string; limit?: number }): Integration };\n","export type { ClientClass } from './sdk';\nexport type { AsyncContextStrategy, Carrier, Layer, RunWithAsyncContextOptions } from './hub';\nexport type { OfflineStore, OfflineTransportOptions } from './transports/offline';\nexport type { ServerRuntimeClientOptions } from './server-runtime-client';\nexport type { RequestDataIntegrationOptions } from './integrations/requestdata';\nexport type { IntegrationIndex } from './integration';\n\nexport * from './tracing';\nexport * from './semanticAttributes';\nexport { createEventEnvelope, createSessionEnvelope } from './envelope';\nexport {\n  addBreadcrumb,\n  captureCheckIn,\n  withMonitor,\n  captureException,\n  captureEvent,\n  captureMessage,\n  close,\n  // eslint-disable-next-line deprecation/deprecation\n  configureScope,\n  flush,\n  // eslint-disable-next-line deprecation/deprecation\n  lastEventId,\n  // eslint-disable-next-line deprecation/deprecation\n  startTransaction,\n  setContext,\n  setExtra,\n  setExtras,\n  setTag,\n  setTags,\n  setUser,\n  withScope,\n  withIsolationScope,\n  getClient,\n  isInitialized,\n  getCurrentScope,\n  startSession,\n  endSession,\n  captureSession,\n  withActiveSpan,\n} from './exports';\nexport {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub,\n  getIsolationScope,\n  getHubFromCarrier,\n  Hub,\n  // eslint-disable-next-line deprecation/deprecation\n  makeMain,\n  getMainCarrier,\n  runWithAsyncContext,\n  setHubOnCarrier,\n  ensureHubOnCarrier,\n  setAsyncContextStrategy,\n} from './hub';\nexport { makeSession, closeSession, updateSession } from './session';\nexport { SessionFlusher } from './sessionflusher';\nexport { Scope, getGlobalScope, setGlobalScope } from './scope';\nexport {\n  notifyEventProcessors,\n  // eslint-disable-next-line deprecation/deprecation\n  addGlobalEventProcessor,\n} from './eventProcessors';\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint } from './api';\nexport { BaseClient, addEventProcessor } from './baseclient';\nexport { ServerRuntimeClient } from './server-runtime-client';\nexport { initAndBind, setCurrentClient } from './sdk';\nexport { createTransport } from './transports/base';\nexport { makeOfflineTransport } from './transports/offline';\nexport { makeMultiplexedTransport } from './transports/multiplexed';\nexport { SDK_VERSION } from './version';\nexport {\n  getIntegrationsToSetup,\n  addIntegration,\n  defineIntegration,\n  // eslint-disable-next-line deprecation/deprecation\n  convertIntegrationFnToClass,\n} from './integration';\nexport { applyScopeDataToEvent, mergeScopeData } from './utils/applyScopeDataToEvent';\nexport { prepareEvent } from './utils/prepareEvent';\nexport { createCheckInEnvelope } from './checkin';\nexport { hasTracingEnabled } from './utils/hasTracingEnabled';\nexport { isSentryRequestUrl } from './utils/isSentryRequestUrl';\nexport { handleCallbackErrors } from './utils/handleCallbackErrors';\nexport { parameterize } from './utils/parameterize';\nexport {\n  spanToTraceHeader,\n  spanToJSON,\n  spanIsSampled,\n} from './utils/spanUtils';\nexport { getRootSpan } from './utils/getRootSpan';\nexport { applySdkMetadata } from './utils/sdkMetadata';\nexport { DEFAULT_ENVIRONMENT } from './constants';\n/* eslint-disable deprecation/deprecation */\nexport { ModuleMetadata } from './integrations/metadata';\nexport { RequestData } from './integrations/requestdata';\nexport { InboundFilters } from './integrations/inboundfilters';\nexport { FunctionToString } from './integrations/functiontostring';\nexport { LinkedErrors } from './integrations/linkederrors';\n/* eslint-enable deprecation/deprecation */\nimport * as INTEGRATIONS from './integrations';\nexport { functionToStringIntegration } from './integrations/functiontostring';\nexport { inboundFiltersIntegration } from './integrations/inboundfilters';\nexport { linkedErrorsIntegration } from './integrations/linkederrors';\nexport { moduleMetadataIntegration } from './integrations/metadata';\nexport { requestDataIntegration } from './integrations/requestdata';\nexport { metrics } from './metrics/exports';\n\n/** @deprecated Import the integration function directly, e.g. `inboundFiltersIntegration()` instead of `new Integrations.InboundFilter(). */\nconst Integrations = INTEGRATIONS;\n\n// eslint-disable-next-line deprecation/deprecation\nexport { Integrations };\n","import type { Event, StackParser } from '@sentry/types';\nimport { GLOBAL_OBJ } from '@sentry/utils';\n\n/** Keys are source filename/url, values are metadata objects. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst filenameMetadataMap = new Map<string, any>();\n/** Set of stack strings that have already been parsed. */\nconst parsedStacks = new Set<string>();\n\nfunction ensureMetadataStacksAreParsed(parser: StackParser): void {\n  if (!GLOBAL_OBJ._sentryModuleMetadata) {\n    return;\n  }\n\n  for (const stack of Object.keys(GLOBAL_OBJ._sentryModuleMetadata)) {\n    const metadata = GLOBAL_OBJ._sentryModuleMetadata[stack];\n\n    if (parsedStacks.has(stack)) {\n      continue;\n    }\n\n    // Ensure this stack doesn't get parsed again\n    parsedStacks.add(stack);\n\n    const frames = parser(stack);\n\n    // Go through the frames starting from the top of the stack and find the first one with a filename\n    for (const frame of frames.reverse()) {\n      if (frame.filename) {\n        // Save the metadata for this filename\n        filenameMetadataMap.set(frame.filename, metadata);\n        break;\n      }\n    }\n  }\n}\n\n/**\n * Retrieve metadata for a specific JavaScript file URL.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getMetadataForUrl(parser: StackParser, filename: string): any | undefined {\n  ensureMetadataStacksAreParsed(parser);\n  return filenameMetadataMap.get(filename);\n}\n\n/**\n * Adds metadata to stack frames.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\nexport function addMetadataToStackFrames(parser: StackParser, event: Event): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        if (!frame.filename) {\n          continue;\n        }\n\n        const metadata = getMetadataForUrl(parser, frame.filename);\n\n        if (metadata) {\n          frame.module_metadata = metadata;\n        }\n      }\n    });\n  } catch (_) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Strips metadata from stack frames.\n */\nexport function stripMetadataFromStackFrames(event: Event): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        delete frame.module_metadata;\n      }\n    });\n  } catch (_) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n","import type { Client, Event, EventHint, EventItem, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { forEachEnvelopeItem } from '@sentry/utils';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\nimport { addMetadataToStackFrames, stripMetadataFromStackFrames } from '../metadata';\n\nconst INTEGRATION_NAME = 'ModuleMetadata';\n\nconst _moduleMetadataIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      if (typeof client.on !== 'function') {\n        return;\n      }\n\n      // We need to strip metadata from stack frames before sending them to Sentry since these are client side only.\n      client.on('beforeEnvelope', envelope => {\n        forEachEnvelopeItem(envelope, (item, type) => {\n          if (type === 'event') {\n            const event = Array.isArray(item) ? (item as EventItem)[1] : undefined;\n\n            if (event) {\n              stripMetadataFromStackFrames(event);\n              item[1] = event;\n            }\n          }\n        });\n      });\n    },\n\n    processEvent(event, _hint, client) {\n      const stackParser = client.getOptions().stackParser;\n      addMetadataToStackFrames(stackParser, event);\n      return event;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const moduleMetadataIntegration = defineIntegration(_moduleMetadataIntegration);\n\n/**\n * Adds module metadata to stack frames.\n *\n * Metadata can be injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n *\n * When this integration is added, the metadata passed to the bundler plugin is added to the stack frames of all events\n * under the `module_metadata` property. This can be used to help in tagging or routing of events from different teams\n * our sources\n *\n * @deprecated Use `moduleMetadataIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const ModuleMetadata = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  moduleMetadataIntegration,\n) as IntegrationClass<\n  Integration & {\n    setup: (client: Client) => void;\n    processEvent: (event: Event, hint: EventHint, client: Client) => Event;\n  }\n>;\n","import type { ClientOptions, DsnComponents, DsnLike, SdkInfo } from '@sentry/types';\nimport { dsnToString, makeDsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n  const port = dsn.port ? `:${dsn.port}` : '';\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n  return urlEncode({\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    sentry_key: dsn.publicKey,\n    sentry_version: SENTRY_API_VERSION,\n    ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n  });\n}\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 */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(\n  dsn: DsnComponents,\n  // TODO (v8): Remove `tunnelOrOptions` in favor of `options`, and use the substitute code below\n  // options: ClientOptions = {} as ClientOptions,\n  tunnelOrOptions: string | ClientOptions = {} as ClientOptions,\n): string {\n  // TODO (v8): Use this code instead\n  // const { tunnel, _metadata = {} } = options;\n  // return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, _metadata.sdk)}`;\n\n  const tunnel = typeof tunnelOrOptions === 'string' ? tunnelOrOptions : tunnelOrOptions.tunnel;\n  const sdkInfo =\n    typeof tunnelOrOptions === 'string' || !tunnelOrOptions._metadata ? undefined : tunnelOrOptions._metadata.sdk;\n\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(\n  dsnLike: DsnLike,\n  dialogOptions: {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    [key: string]: any;\n    user?: { name?: string; email?: string };\n  },\n): string {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'onClose') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n","export const COUNTER_METRIC_TYPE = 'c' as const;\nexport const GAUGE_METRIC_TYPE = 'g' as const;\nexport const SET_METRIC_TYPE = 's' as const;\nexport const DISTRIBUTION_METRIC_TYPE = 'd' as const;\n\n/**\n * Normalization regex for metric names and metric tag names.\n *\n * This enforces that names and tag keys only contain alphanumeric characters,\n * underscores, forward slashes, periods, and dashes.\n *\n * See: https://develop.sentry.dev/sdk/metrics/#normalization\n */\nexport const NAME_AND_TAG_KEY_NORMALIZATION_REGEX = /[^a-zA-Z0-9_/.-]+/g;\n\n/**\n * Normalization regex for metric tag values.\n *\n * This enforces that values only contain words, digits, or the following\n * special characters: _:/@.{}[\\]$-\n *\n * See: https://develop.sentry.dev/sdk/metrics/#normalization\n */\nexport const TAG_VALUE_NORMALIZATION_REGEX = /[^\\w\\d_:/@.{}[\\]$-]+/g;\n\n/**\n * This does not match spec in https://develop.sentry.dev/sdk/metrics\n * but was chosen to optimize for the most common case in browser environments.\n */\nexport const DEFAULT_BROWSER_FLUSH_INTERVAL = 5000;\n\n/**\n * SDKs are required to bucket into 10 second intervals (rollup in seconds)\n * which is the current lower bound of metric accuracy.\n */\nexport const DEFAULT_FLUSH_INTERVAL = 10000;\n\n/**\n * The maximum number of metrics that should be stored in memory.\n */\nexport const MAX_WEIGHT = 10000;\n","/* eslint-disable max-lines */\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  Client,\n  ClientOptions,\n  DataCategory,\n  DsnComponents,\n  DynamicSamplingContext,\n  Envelope,\n  ErrorEvent,\n  Event,\n  EventDropReason,\n  EventHint,\n  EventProcessor,\n  FeedbackEvent,\n  Integration,\n  IntegrationClass,\n  MetricBucketItem,\n  MetricsAggregator,\n  Outcome,\n  ParameterizedString,\n  PropagationContext,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  Severity,\n  SeverityLevel,\n  Transaction,\n  TransactionEvent,\n  Transport,\n  TransportMakeRequestResponse,\n} from '@sentry/types';\nimport {\n  SentryError,\n  SyncPromise,\n  addItemToEnvelope,\n  checkOrSetAlreadyCaught,\n  createAttachmentEnvelopeItem,\n  isParameterizedString,\n  isPlainObject,\n  isPrimitive,\n  isThenable,\n  logger,\n  makeDsn,\n  rejectedSyncPromise,\n  resolvedSyncPromise,\n} from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport { getClient } from './exports';\nimport { getIsolationScope } from './hub';\nimport type { IntegrationIndex } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport { createMetricEnvelope } from './metrics/envelope';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext';\nimport { prepareEvent } from './utils/prepareEvent';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\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, 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<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nexport abstract class BaseClient<O extends ClientOptions> implements Client<O> {\n  /**\n   * A reference to a metrics aggregator\n   *\n   * @experimental Note this is alpha API. It may experience breaking changes in the future.\n   */\n  public metricsAggregator?: MetricsAggregator;\n\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n  protected readonly _dsn?: DsnComponents;\n\n  protected readonly _transport?: Transport;\n\n  /** Array of set up integrations. */\n  protected _integrations: IntegrationIndex;\n\n  /** Indicates whether this client's integrations have been set up. */\n  protected _integrationsInitialized: boolean;\n\n  /** Number of calls being processed */\n  protected _numProcessing: number;\n\n  protected _eventProcessors: EventProcessor[];\n\n  /** Holds flushable  */\n  private _outcomes: { [key: string]: number };\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  private _hooks: Record<string, Function[]>;\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n  protected constructor(options: O) {\n    this._options = options;\n    this._integrations = {};\n    this._integrationsInitialized = false;\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n    }\n\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n      this._transport = options.transport({\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url,\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined {\n    // ensure we haven't captured this very object before\n    if (checkOrSetAlreadyCaught(exception)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId: string | undefined = hint && hint.event_id;\n\n    this._process(\n      this.eventFromException(exception, hint)\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureMessage(\n    message: ParameterizedString,\n    // eslint-disable-next-line deprecation/deprecation\n    level?: Severity | SeverityLevel,\n    hint?: EventHint,\n    scope?: Scope,\n  ): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n\n    const eventMessage = isParameterizedString(message) ? message : String(message);\n\n    const promisedEvent = isPrimitive(message)\n      ? this.eventFromMessage(eventMessage, level, hint)\n      : this.eventFromException(message, hint);\n\n    this._process(\n      promisedEvent\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n    // ensure we haven't captured this very object before\n    if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId: string | undefined = hint && hint.event_id;\n\n    this._process(\n      this._captureEvent(event, hint, scope).then(result => {\n        eventId = result;\n      }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureSession(session: Session): void {\n    if (!(typeof session.release === 'string')) {\n      DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n    } else {\n      this.sendSession(session);\n      // After sending, we set init false to indicate it's not the first occurrence\n      updateSession(session, { init: false });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getDsn(): DsnComponents | undefined {\n    return this._dsn;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getOptions(): O {\n    return this._options;\n  }\n\n  /**\n   * @see SdkMetadata in @sentry/types\n   *\n   * @return The metadata of the SDK\n   */\n  public getSdkMetadata(): SdkMetadata | undefined {\n    return this._options._metadata;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTransport(): Transport | undefined {\n    return this._transport;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public flush(timeout?: number): PromiseLike<boolean> {\n    const transport = this._transport;\n    if (transport) {\n      if (this.metricsAggregator) {\n        this.metricsAggregator.flush();\n      }\n      return this._isClientDoneProcessing(timeout).then(clientFinished => {\n        return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n      });\n    } else {\n      return resolvedSyncPromise(true);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(timeout?: number): PromiseLike<boolean> {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      if (this.metricsAggregator) {\n        this.metricsAggregator.close();\n      }\n      return result;\n    });\n  }\n\n  /** Get all installed event processors. */\n  public getEventProcessors(): EventProcessor[] {\n    return this._eventProcessors;\n  }\n\n  /** @inheritDoc */\n  public addEventProcessor(eventProcessor: EventProcessor): void {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /**\n   * This is an internal function to setup all integrations that should run on the client.\n   * @deprecated Use `client.init()` instead.\n   */\n  public setupIntegrations(forceInitialize?: boolean): void {\n    if ((forceInitialize && !this._integrationsInitialized) || (this._isEnabled() && !this._integrationsInitialized)) {\n      this._setupIntegrations();\n    }\n  }\n\n  /** @inheritdoc */\n  public init(): void {\n    if (this._isEnabled()) {\n      this._setupIntegrations();\n    }\n  }\n\n  /**\n   * Gets an installed integration by its `id`.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `id` was installed.\n   * @deprecated Use `getIntegrationByName()` instead.\n   */\n  public getIntegrationById(integrationId: string): Integration | undefined {\n    return this.getIntegrationByName(integrationId);\n  }\n\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n  public getIntegrationByName<T extends Integration = Integration>(integrationName: string): T | undefined {\n    return this._integrations[integrationName] as T | undefined;\n  }\n\n  /**\n   * Returns the client's instance of the given integration class, it any.\n   * @deprecated Use `getIntegrationByName()` instead.\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    try {\n      return (this._integrations[integration.id] as T) || null;\n    } catch (_oO) {\n      DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addIntegration(integration: Integration): void {\n    setupIntegration(this, integration, this._integrations);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event, hint: EventHint = {}): void {\n    this.emit('beforeSendEvent', event, hint);\n\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n    for (const attachment of hint.attachments || []) {\n      env = addItemToEnvelope(\n        env,\n        createAttachmentEnvelopeItem(\n          attachment,\n          this._options.transportOptions && this._options.transportOptions.textEncoder,\n        ),\n      );\n    }\n\n    const promise = this._sendEnvelope(env);\n    if (promise) {\n      promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendSession(session: Session | SessionAggregates): void {\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(env);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public recordDroppedEvent(reason: EventDropReason, category: DataCategory, _event?: Event): void {\n    // Note: we use `event` in replay, where we overwrite this hook.\n\n    if (this._options.sendClientReports) {\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\n      const key = `${reason}:${category}`;\n      DEBUG_BUILD && logger.log(`Adding outcome: \"${key}\"`);\n\n      // The following works because undefined + 1 === NaN and NaN is falsy\n      this._outcomes[key] = this._outcomes[key] + 1 || 1;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureAggregateMetrics(metricBucketItems: Array<MetricBucketItem>): void {\n    DEBUG_BUILD && logger.log(`Flushing aggregated metrics, number of metrics: ${metricBucketItems.length}`);\n    const metricsEnvelope = createMetricEnvelope(\n      metricBucketItems,\n      this._dsn,\n      this._options._metadata,\n      this._options.tunnel,\n    );\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(metricsEnvelope);\n  }\n\n  // Keep on() & emit() signatures in sync with types' client.ts interface\n  /* eslint-disable @typescript-eslint/unified-signatures */\n\n  /** @inheritdoc */\n  public on(hook: 'startTransaction', callback: (transaction: Transaction) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'finishTransaction', callback: (transaction: Transaction) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n  /** @inheritdoc */\n  public on(\n    hook: 'afterSendEvent',\n    callback: (event: Event, sendResponse: TransportMakeRequestResponse | void) => void,\n  ): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'otelSpanEnd', callback: (otelSpan: unknown, mutableOptions: { drop: boolean }) => void): void;\n\n  /** @inheritdoc */\n  public on(\n    hook: 'beforeSendFeedback',\n    callback: (feedback: FeedbackEvent, options?: { includeReplay: boolean }) => void,\n  ): void;\n\n  /** @inheritdoc */\n  public on(hook: string, callback: unknown): void {\n    if (!this._hooks[hook]) {\n      this._hooks[hook] = [];\n    }\n\n    // @ts-expect-error We assue the types are correct\n    this._hooks[hook].push(callback);\n  }\n\n  /** @inheritdoc */\n  public emit(hook: 'startTransaction', transaction: Transaction): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'finishTransaction', transaction: Transaction): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse | void): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'createDsc', dsc: DynamicSamplingContext): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'otelSpanEnd', otelSpan: unknown, mutableOptions: { drop: boolean }): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeSendFeedback', feedback: FeedbackEvent, options?: { includeReplay: boolean }): void;\n\n  /** @inheritdoc */\n  public emit(hook: string, ...rest: unknown[]): void {\n    if (this._hooks[hook]) {\n      this._hooks[hook].forEach(callback => callback(...rest));\n    }\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\n\n  /** Setup integrations for this client. */\n  protected _setupIntegrations(): void {\n    this._integrations = setupIntegrations(this, this._options.integrations);\n    // TODO v8: We don't need this flag anymore\n    this._integrationsInitialized = true;\n  }\n\n  /** Updates existing session based on the provided event */\n  protected _updateSessionFromEvent(session: Session, event: Event): void {\n    let crashed = false;\n    let errored = false;\n    const exceptions = event.exception && event.exception.values;\n\n    if (exceptions) {\n      errored = true;\n\n      for (const ex of exceptions) {\n        const mechanism = ex.mechanism;\n        if (mechanism && mechanism.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\n  }\n\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n  protected _isClientDoneProcessing(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise(resolve => {\n      let ticked: number = 0;\n      const tick: number = 1;\n\n      const interval = setInterval(() => {\n        if (this._numProcessing == 0) {\n          clearInterval(interval);\n          resolve(true);\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            clearInterval(interval);\n            resolve(false);\n          }\n        }\n      }, tick);\n    });\n  }\n\n  /** Determines whether this SDK is enabled and a transport is present. */\n  protected _isEnabled(): boolean {\n    return this.getOptions().enabled !== false && this._transport !== undefined;\n  }\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  protected _prepareEvent(\n    event: Event,\n    hint: EventHint,\n    scope?: Scope,\n    isolationScope = getIsolationScope(),\n  ): PromiseLike<Event | null> {\n    const options = this.getOptions();\n    const integrations = Object.keys(this._integrations);\n    if (!hint.integrations && integrations.length > 0) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    return prepareEvent(options, event, hint, scope, this, isolationScope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      // If a trace context is not set on the event, we use the propagationContext set on the event to\n      // generate a trace context. If the propagationContext does not have a dynamic sampling context, we\n      // also generate one for it.\n      const { propagationContext } = evt.sdkProcessingMetadata || {};\n      const trace = evt.contexts && evt.contexts.trace;\n      if (!trace && propagationContext) {\n        const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext as PropagationContext;\n        evt.contexts = {\n          trace: {\n            trace_id,\n            span_id: spanId,\n            parent_span_id: parentSpanId,\n          },\n          ...evt.contexts,\n        };\n\n        const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this, scope);\n\n        evt.sdkProcessingMetadata = {\n          dynamicSamplingContext,\n          ...evt.sdkProcessingMetadata,\n        };\n      }\n      return evt;\n    });\n  }\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  protected _captureEvent(event: Event, hint: EventHint = {}, scope?: Scope): PromiseLike<string | undefined> {\n    return this._processEvent(event, hint, scope).then(\n      finalEvent => {\n        return finalEvent.event_id;\n      },\n      reason => {\n        if (DEBUG_BUILD) {\n          // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n          // control flow, log just the message (no stack) as a log-level log.\n          const sentryError = reason as SentryError;\n          if (sentryError.logLevel === 'log') {\n            logger.log(sentryError.message);\n          } else {\n            logger.warn(sentryError);\n          }\n        }\n        return undefined;\n      },\n    );\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  protected _processEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event> {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || 'error';\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    if (isError && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n      this.recordDroppedEvent('sample_rate', 'error', event);\n      return rejectedSyncPromise(\n        new SentryError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n          'log',\n        ),\n      );\n    }\n\n    const dataCategory: DataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n    return this._prepareEvent(event, hint, scope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory, event);\n          throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n        }\n\n        const isInternalException = hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n        if (isInternalException) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory, event);\n          throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n        }\n\n        const session = scope && scope.getSession();\n        if (!isTransaction && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\n        const transactionInfo = processedEvent.transaction_info;\n        if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n          const source = 'custom';\n          processedEvent.transaction_info = {\n            ...transactionInfo,\n            source,\n          };\n        }\n\n        this.sendEvent(processedEvent, hint);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (reason instanceof SentryError) {\n          throw reason;\n        }\n\n        this.captureException(reason, {\n          data: {\n            __sentry__: true,\n          },\n          originalException: reason,\n        });\n        throw new SentryError(\n          `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\n  /**\n   * Occupies the client with processing and event\n   */\n  protected _process<T>(promise: PromiseLike<T>): void {\n    this._numProcessing++;\n    void promise.then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  protected _sendEnvelope(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> | void {\n    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\n      return this._transport.send(envelope).then(null, reason => {\n        DEBUG_BUILD && logger.error('Error while sending event:', reason);\n      });\n    } else {\n      DEBUG_BUILD && logger.error('Transport disabled');\n    }\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n  protected _clearOutcomes(): Outcome[] {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.keys(outcomes).map(key => {\n      const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n      return {\n        reason,\n        category,\n        quantity: outcomes[key],\n      };\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public abstract eventFromException(_exception: any, _hint?: EventHint): PromiseLike<Event>;\n\n  /**\n   * @inheritDoc\n   */\n  public abstract eventFromMessage(\n    _message: ParameterizedString,\n    // eslint-disable-next-line deprecation/deprecation\n    _level?: Severity | SeverityLevel,\n    _hint?: EventHint,\n  ): PromiseLike<Event>;\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult: PromiseLike<Event | null> | Event | null,\n  beforeSendLabel: string,\n): PromiseLike<Event | null> | Event | null {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!isPlainObject(event) && event !== null) {\n          throw new SentryError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw new SentryError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n): PromiseLike<Event | null> | Event | null {\n  const { beforeSend, beforeSendTransaction } = options;\n\n  if (isErrorEvent(event) && beforeSend) {\n    return beforeSend(event, hint);\n  }\n\n  if (isTransactionEvent(event) && beforeSendTransaction) {\n    return beforeSendTransaction(event, hint);\n  }\n\n  return event;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n\n/**\n * Add an event processor to the current client.\n * This event processor will run for all events processed by this client.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n  const client = getClient();\n\n  if (!client || !client.addEventProcessor) {\n    return;\n  }\n\n  client.addEventProcessor(callback);\n}\n","import type { DsnComponents, MetricBucketItem, SdkMetadata, StatsdEnvelope, StatsdItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\nimport { serializeMetricBuckets } from './utils';\n\n/**\n * Create envelope from a metric aggregate.\n */\nexport function createMetricEnvelope(\n  metricBucketItems: Array<MetricBucketItem>,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): StatsdEnvelope {\n  const headers: StatsdEnvelope[0] = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (metadata && metadata.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  const item = createMetricEnvelopeItem(metricBucketItems);\n  return createEnvelope<StatsdEnvelope>(headers, [item]);\n}\n\nfunction createMetricEnvelopeItem(metricBucketItems: MetricBucketItem[]): StatsdItem {\n  const payload = serializeMetricBuckets(metricBucketItems);\n  const metricHeaders: StatsdItem[0] = {\n    type: 'statsd',\n    length: payload.length,\n  };\n  return [metricHeaders, payload];\n}\n","import type { MeasurementUnit, MetricBucketItem, Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport { NAME_AND_TAG_KEY_NORMALIZATION_REGEX, TAG_VALUE_NORMALIZATION_REGEX } from './constants';\nimport type { MetricType } from './types';\n\n/**\n * Generate bucket key from metric properties.\n */\nexport function getBucketKey(\n  metricType: MetricType,\n  name: string,\n  unit: MeasurementUnit,\n  tags: Record<string, string>,\n): string {\n  const stringifiedTags = Object.entries(dropUndefinedKeys(tags)).sort((a, b) => a[0].localeCompare(b[0]));\n  return `${metricType}${name}${unit}${stringifiedTags}`;\n}\n\n/* eslint-disable no-bitwise */\n/**\n * Simple hash function for strings.\n */\nexport function simpleHash(s: string): number {\n  let rv = 0;\n  for (let i = 0; i < s.length; i++) {\n    const c = s.charCodeAt(i);\n    rv = (rv << 5) - rv + c;\n    rv &= rv;\n  }\n  return rv >>> 0;\n}\n/* eslint-enable no-bitwise */\n\n/**\n * Serialize metrics buckets into a string based on statsd format.\n *\n * Example of format:\n * metric.name@second:1:1.2|d|#a:value,b:anothervalue|T12345677\n * Segments:\n * name: metric.name\n * unit: second\n * value: [1, 1.2]\n * type of metric: d (distribution)\n * tags: { a: value, b: anothervalue }\n * timestamp: 12345677\n */\nexport function serializeMetricBuckets(metricBucketItems: MetricBucketItem[]): string {\n  let out = '';\n  for (const item of metricBucketItems) {\n    const tagEntries = Object.entries(item.tags);\n    const maybeTags = tagEntries.length > 0 ? `|#${tagEntries.map(([key, value]) => `${key}:${value}`).join(',')}` : '';\n    out += `${item.name}@${item.unit}:${item.metric}|${item.metricType}${maybeTags}|T${item.timestamp}\\n`;\n  }\n  return out;\n}\n\n/**\n * Sanitizes tags.\n */\nexport function sanitizeTags(unsanitizedTags: Record<string, Primitive>): Record<string, string> {\n  const tags: Record<string, string> = {};\n  for (const key in unsanitizedTags) {\n    if (Object.prototype.hasOwnProperty.call(unsanitizedTags, key)) {\n      const sanitizedKey = key.replace(NAME_AND_TAG_KEY_NORMALIZATION_REGEX, '_');\n      tags[sanitizedKey] = String(unsanitizedTags[key]).replace(TAG_VALUE_NORMALIZATION_REGEX, '_');\n    }\n  }\n  return tags;\n}\n","import type { Transaction } from '@sentry/types';\nimport { extractTraceparentData as _extractTraceparentData } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\n\n/**\n * Grabs active transaction off scope.\n *\n * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n */\nexport function getActiveTransaction<T extends Transaction>(maybeHub?: Hub): T | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = maybeHub || getCurrentHub();\n  // eslint-disable-next-line deprecation/deprecation\n  const scope = hub.getScope();\n  // eslint-disable-next-line deprecation/deprecation\n  return scope.getTransaction() as T | undefined;\n}\n\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n\n/**\n * The `extractTraceparentData` function and `TRACEPARENT_REGEXP` constant used\n * to be declared in this file. It was later moved into `@sentry/utils` as part of a\n * move to remove `@sentry/tracing` dependencies from `@sentry/node` (`extractTraceparentData`\n * is the only tracing function used by `@sentry/node`).\n *\n * These exports are kept here for backwards compatability's sake.\n *\n * See https://github.com/getsentry/sentry-javascript/issues/4642 for more details.\n *\n * @deprecated Import this function from `@sentry/utils` instead\n */\nexport const extractTraceparentData = _extractTraceparentData;\n","import {\n  addGlobalErrorInstrumentationHandler,\n  addGlobalUnhandledRejectionInstrumentationHandler,\n  logger,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { SpanStatusType } from './span';\nimport { getActiveTransaction } from './utils';\n\nlet errorsInstrumented = false;\n\n/**\n * Configures global error listeners\n */\nexport function registerErrorInstrumentation(): void {\n  if (errorsInstrumented) {\n    return;\n  }\n\n  errorsInstrumented = true;\n  addGlobalErrorInstrumentationHandler(errorCallback);\n  addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback(): void {\n  // eslint-disable-next-line deprecation/deprecation\n  const activeTransaction = getActiveTransaction();\n  if (activeTransaction) {\n    const status: SpanStatusType = 'internal_error';\n    DEBUG_BUILD && logger.log(`[Tracing] Transaction: ${status} -> Global error occured`);\n    activeTransaction.setStatus(status);\n  }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n","/* eslint-disable max-lines */\nimport type {\n  Instrumenter,\n  Primitive,\n  Span as SpanInterface,\n  SpanAttributeValue,\n  SpanAttributes,\n  SpanContext,\n  SpanContextData,\n  SpanJSON,\n  SpanOrigin,\n  SpanTimeInput,\n  TraceContext,\n  Transaction,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes';\nimport { getRootSpan } from '../utils/getRootSpan';\nimport {\n  TRACE_FLAG_NONE,\n  TRACE_FLAG_SAMPLED,\n  spanTimeInputToSeconds,\n  spanToJSON,\n  spanToTraceContext,\n  spanToTraceHeader,\n} from '../utils/spanUtils';\n\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nexport class SpanRecorder {\n  public spans: Span[];\n\n  private readonly _maxlen: number;\n\n  public constructor(maxlen: number = 1000) {\n    this._maxlen = maxlen;\n    this.spans = [];\n  }\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  public add(span: Span): void {\n    if (this.spans.length > this._maxlen) {\n      // eslint-disable-next-line deprecation/deprecation\n      span.spanRecorder = undefined;\n    } else {\n      this.spans.push(span);\n    }\n  }\n}\n\n/**\n * Span contains all data about a span\n */\nexport class Span implements SpanInterface {\n  /**\n   * Tags for the span.\n   * @deprecated Use `getSpanAttributes(span)` instead.\n   */\n  public tags: { [key: string]: Primitive };\n\n  /**\n   * Data for the span.\n   * @deprecated Use `getSpanAttributes(span)` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public data: { [key: string]: any };\n\n  /**\n   * List of spans that were finalized\n   *\n   * @deprecated This property will no longer be public. Span recording will be handled internally.\n   */\n  public spanRecorder?: SpanRecorder;\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `Sentry.getRootSpan()` instead\n   */\n  public transaction?: Transaction;\n\n  /**\n   * The instrumenter that created this span.\n   *\n   * TODO (v8): This can probably be replaced by an `instanceOf` check of the span class.\n   *            the instrumenter can only be sentry or otel so we can check the span instance\n   *            to verify which one it is and remove this field entirely.\n   *\n   * @deprecated This field will be removed.\n   */\n  public instrumenter: Instrumenter;\n\n  protected _traceId: string;\n  protected _spanId: string;\n  protected _parentSpanId?: string;\n  protected _sampled: boolean | undefined;\n  protected _name?: string;\n  protected _attributes: SpanAttributes;\n  /** Epoch timestamp in seconds when the span started. */\n  protected _startTime: number;\n  /** Epoch timestamp in seconds when the span ended. */\n  protected _endTime?: number;\n  /** Internal keeper of the status */\n  protected _status?: SpanStatusType | string;\n\n  private _logMessage?: string;\n\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  public constructor(spanContext: SpanContext = {}) {\n    this._traceId = spanContext.traceId || uuid4();\n    this._spanId = spanContext.spanId || uuid4().substring(16);\n    this._startTime = spanContext.startTimestamp || timestampInSeconds();\n    // eslint-disable-next-line deprecation/deprecation\n    this.tags = spanContext.tags ? { ...spanContext.tags } : {};\n    // eslint-disable-next-line deprecation/deprecation\n    this.data = spanContext.data ? { ...spanContext.data } : {};\n    this._attributes = spanContext.attributes ? { ...spanContext.attributes } : {};\n    // eslint-disable-next-line deprecation/deprecation\n    this.instrumenter = spanContext.instrumenter || 'sentry';\n\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, spanContext.origin || 'manual');\n\n    // eslint-disable-next-line deprecation/deprecation\n    this._name = spanContext.name || spanContext.description;\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.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, spanContext.op);\n    }\n    if (spanContext.status) {\n      this._status = spanContext.status;\n    }\n    if (spanContext.endTimestamp) {\n      this._endTime = spanContext.endTimestamp;\n    }\n  }\n\n  // This rule conflicts with another eslint rule :(\n  /* eslint-disable @typescript-eslint/member-ordering */\n\n  /**\n   * An alias for `description` of the Span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public get name(): string {\n    return this._name || '';\n  }\n\n  /**\n   * Update the name of the span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public set name(name: string) {\n    this.updateName(name);\n  }\n\n  /**\n   * Get the description of the Span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public get description(): string | undefined {\n    return this._name;\n  }\n\n  /**\n   * Get the description of the Span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public set description(description: string | undefined) {\n    this._name = description;\n  }\n\n  /**\n   * The ID of the trace.\n   * @deprecated Use `spanContext().traceId` instead.\n   */\n  public get traceId(): string {\n    return this._traceId;\n  }\n\n  /**\n   * The ID of the trace.\n   * @deprecated You cannot update the traceId of a span after span creation.\n   */\n  public set traceId(traceId: string) {\n    this._traceId = traceId;\n  }\n\n  /**\n   * The ID of the span.\n   * @deprecated Use `spanContext().spanId` instead.\n   */\n  public get spanId(): string {\n    return this._spanId;\n  }\n\n  /**\n   * The ID of the span.\n   * @deprecated You cannot update the spanId of a span after span creation.\n   */\n  public set spanId(spanId: string) {\n    this._spanId = spanId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `startSpan` functions instead.\n   */\n  public set parentSpanId(string) {\n    this._parentSpanId = string;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToJSON(span).parent_span_id` instead.\n   */\n  public get parentSpanId(): string | undefined {\n    return this._parentSpanId;\n  }\n\n  /**\n   * Was this span chosen to be sent as part of the sample?\n   * @deprecated Use `isRecording()` instead.\n   */\n  public get sampled(): boolean | undefined {\n    return this._sampled;\n  }\n\n  /**\n   * Was this span chosen to be sent as part of the sample?\n   * @deprecated You cannot update the sampling decision of a span after span creation.\n   */\n  public set sampled(sampled: boolean | undefined) {\n    this._sampled = sampled;\n  }\n\n  /**\n   * Attributes for the span.\n   * @deprecated Use `getSpanAttributes(span)` instead.\n   */\n  public get attributes(): SpanAttributes {\n    return this._attributes;\n  }\n\n  /**\n   * Attributes for the span.\n   * @deprecated Use `setAttributes()` instead.\n   */\n  public set attributes(attributes: SpanAttributes) {\n    this._attributes = attributes;\n  }\n\n  /**\n   * Timestamp in seconds (epoch time) indicating when the span started.\n   * @deprecated Use `spanToJSON()` instead.\n   */\n  public get startTimestamp(): number {\n    return this._startTime;\n  }\n\n  /**\n   * Timestamp in seconds (epoch time) indicating when the span started.\n   * @deprecated In v8, you will not be able to update the span start time after creation.\n   */\n  public set startTimestamp(startTime: number) {\n    this._startTime = startTime;\n  }\n\n  /**\n   * Timestamp in seconds when the span ended.\n   * @deprecated Use `spanToJSON()` instead.\n   */\n  public get endTimestamp(): number | undefined {\n    return this._endTime;\n  }\n\n  /**\n   * Timestamp in seconds when the span ended.\n   * @deprecated Set the end time via `span.end()` instead.\n   */\n  public set endTimestamp(endTime: number | undefined) {\n    this._endTime = endTime;\n  }\n\n  /**\n   * The status of the span.\n   *\n   * @deprecated Use `spanToJSON().status` instead to get the status.\n   */\n  public get status(): SpanStatusType | string | undefined {\n    return this._status;\n  }\n\n  /**\n   * The status of the span.\n   *\n   * @deprecated Use `.setStatus()` instead to set or update the status.\n   */\n  public set status(status: SpanStatusType | string | undefined) {\n    this._status = status;\n  }\n\n  /**\n   * Operation of the span\n   *\n   * @deprecated Use `spanToJSON().op` to read the op instead.\n   */\n  public get op(): string | undefined {\n    return this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] as string | undefined;\n  }\n\n  /**\n   * Operation of the span\n   *\n   * @deprecated Use `startSpan()` functions to set or `span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'op')\n   *             to update the span instead.\n   */\n  public set op(op: string | undefined) {\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, op);\n  }\n\n  /**\n   * The origin of the span, giving context about what created the span.\n   *\n   * @deprecated Use `spanToJSON().origin` to read the origin instead.\n   */\n  public get origin(): SpanOrigin | undefined {\n    return this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined;\n  }\n\n  /**\n   * The origin of the span, giving context about what created the span.\n   *\n   * @deprecated Use `startSpan()` functions to set the origin instead.\n   */\n  public set origin(origin: SpanOrigin | undefined) {\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, origin);\n  }\n\n  /* eslint-enable @typescript-eslint/member-ordering */\n\n  /** @inheritdoc */\n  public spanContext(): SpanContextData {\n    const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n    return {\n      spanId,\n      traceId,\n      traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n    };\n  }\n\n  /**\n   * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n   * Also the `sampled` decision will be inherited.\n   *\n   * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n   */\n  public startChild(\n    spanContext?: Pick<SpanContext, Exclude<keyof SpanContext, 'sampled' | 'traceId' | 'parentSpanId'>>,\n  ): Span {\n    const childSpan = new Span({\n      ...spanContext,\n      parentSpanId: this._spanId,\n      sampled: this._sampled,\n      traceId: this._traceId,\n    });\n\n    // eslint-disable-next-line deprecation/deprecation\n    childSpan.spanRecorder = this.spanRecorder;\n    // eslint-disable-next-line deprecation/deprecation\n    if (childSpan.spanRecorder) {\n      // eslint-disable-next-line deprecation/deprecation\n      childSpan.spanRecorder.add(childSpan);\n    }\n\n    const rootSpan = getRootSpan(this);\n    // TODO: still set span.transaction here until we have a more permanent solution\n    // Probably similarly to the weakmap we hold in node-experimental\n    // eslint-disable-next-line deprecation/deprecation\n    childSpan.transaction = rootSpan as Transaction;\n\n    if (DEBUG_BUILD && rootSpan) {\n      const opStr = (spanContext && spanContext.op) || '< unknown op >';\n      const nameStr = spanToJSON(childSpan).description || '< unknown name >';\n      const idStr = rootSpan.spanContext().spanId;\n\n      const logMessage = `[Tracing] Starting '${opStr}' span on transaction '${nameStr}' (${idStr}).`;\n      logger.log(logMessage);\n      this._logMessage = logMessage;\n    }\n\n    return childSpan;\n  }\n\n  /**\n   * Sets the tag attribute on the current span.\n   *\n   * Can also be used to unset a tag, by passing `undefined`.\n   *\n   * @param key Tag key\n   * @param value Tag value\n   * @deprecated Use `setAttribute()` instead.\n   */\n  public setTag(key: string, value: Primitive): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.tags = { ...this.tags, [key]: value };\n    return this;\n  }\n\n  /**\n   * Sets the data attribute on the current span\n   * @param key Data key\n   * @param value Data value\n   * @deprecated Use `setAttribute()` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public setData(key: string, value: any): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.data = { ...this.data, [key]: value };\n    return this;\n  }\n\n  /** @inheritdoc */\n  public setAttribute(key: string, value: SpanAttributeValue | undefined): void {\n    if (value === undefined) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._attributes[key];\n    } else {\n      this._attributes[key] = value;\n    }\n  }\n\n  /** @inheritdoc */\n  public setAttributes(attributes: SpanAttributes): void {\n    Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setStatus(value: SpanStatusType): this {\n    this._status = value;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setHttpStatus(httpStatus: number): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.setTag('http.status_code', String(httpStatus));\n    // eslint-disable-next-line deprecation/deprecation\n    this.setData('http.response.status_code', httpStatus);\n    const spanStatus = spanStatusfromHttpCode(httpStatus);\n    if (spanStatus !== 'unknown_error') {\n      this.setStatus(spanStatus);\n    }\n    return this;\n  }\n\n  /**\n   * @inheritdoc\n   *\n   * @deprecated Use `.updateName()` instead.\n   */\n  public setName(name: string): void {\n    this.updateName(name);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateName(name: string): this {\n    this._name = name;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToJSON(span).status === 'ok'` instead.\n   */\n  public isSuccess(): boolean {\n    return this._status === 'ok';\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `.end()` instead.\n   */\n  public finish(endTimestamp?: number): void {\n    return this.end(endTimestamp);\n  }\n\n  /** @inheritdoc */\n  public end(endTimestamp?: SpanTimeInput): void {\n    // If already ended, skip\n    if (this._endTime) {\n      return;\n    }\n    const rootSpan = getRootSpan(this);\n    if (\n      DEBUG_BUILD &&\n      // Don't call this for transactions\n      rootSpan &&\n      rootSpan.spanContext().spanId !== this._spanId\n    ) {\n      const logMessage = this._logMessage;\n      if (logMessage) {\n        logger.log((logMessage as string).replace('Starting', 'Finishing'));\n      }\n    }\n\n    this._endTime = spanTimeInputToSeconds(endTimestamp);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToTraceHeader()` instead.\n   */\n  public toTraceparent(): string {\n    return spanToTraceHeader(this);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToJSON()` or access the fields directly instead.\n   */\n  public toContext(): SpanContext {\n    return dropUndefinedKeys({\n      data: this._getData(),\n      description: this._name,\n      endTimestamp: this._endTime,\n      // eslint-disable-next-line deprecation/deprecation\n      op: this.op,\n      parentSpanId: this._parentSpanId,\n      sampled: this._sampled,\n      spanId: this._spanId,\n      startTimestamp: this._startTime,\n      status: this._status,\n      // eslint-disable-next-line deprecation/deprecation\n      tags: this.tags,\n      traceId: this._traceId,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Update the fields directly instead.\n   */\n  public updateWithContext(spanContext: SpanContext): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.data = spanContext.data || {};\n    // eslint-disable-next-line deprecation/deprecation\n    this._name = spanContext.name || spanContext.description;\n    this._endTime = spanContext.endTimestamp;\n    // eslint-disable-next-line deprecation/deprecation\n    this.op = spanContext.op;\n    this._parentSpanId = spanContext.parentSpanId;\n    this._sampled = spanContext.sampled;\n    this._spanId = spanContext.spanId || this._spanId;\n    this._startTime = spanContext.startTimestamp || this._startTime;\n    this._status = spanContext.status;\n    // eslint-disable-next-line deprecation/deprecation\n    this.tags = spanContext.tags || {};\n    this._traceId = spanContext.traceId || this._traceId;\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToTraceContext()` util function instead.\n   */\n  public getTraceContext(): TraceContext {\n    return spanToTraceContext(this);\n  }\n\n  /**\n   * Get JSON representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToJSON(span)` instead.\n   */\n  public getSpanJSON(): SpanJSON {\n    return dropUndefinedKeys({\n      data: this._getData(),\n      description: this._name,\n      op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] as string | undefined,\n      parent_span_id: this._parentSpanId,\n      span_id: this._spanId,\n      start_timestamp: this._startTime,\n      status: this._status,\n      // eslint-disable-next-line deprecation/deprecation\n      tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n      timestamp: this._endTime,\n      trace_id: this._traceId,\n      origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n    });\n  }\n\n  /** @inheritdoc */\n  public isRecording(): boolean {\n    return !this._endTime && !!this._sampled;\n  }\n\n  /**\n   * Convert the object to JSON.\n   * @deprecated Use `spanToJSON(span)` instead.\n   */\n  public toJSON(): SpanJSON {\n    return this.getSpanJSON();\n  }\n\n  /**\n   * Get the merged data for this span.\n   * For now, this combines `data` and `attributes` together,\n   * until eventually we can ingest `attributes` directly.\n   */\n  private _getData():\n    | {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        [key: string]: any;\n      }\n    | undefined {\n    // eslint-disable-next-line deprecation/deprecation\n    const { data, _attributes: attributes } = this;\n\n    const hasData = Object.keys(data).length > 0;\n    const hasAttributes = Object.keys(attributes).length > 0;\n\n    if (!hasData && !hasAttributes) {\n      return undefined;\n    }\n\n    if (hasData && hasAttributes) {\n      return {\n        ...data,\n        ...attributes,\n      };\n    }\n\n    return hasData ? data : attributes;\n  }\n}\n\nexport type SpanStatusType =\n  /** The operation completed successfully. */\n  | 'ok'\n  /** Deadline expired before operation could complete. */\n  | 'deadline_exceeded'\n  /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n  | 'unauthenticated'\n  /** 403 Forbidden */\n  | 'permission_denied'\n  /** 404 Not Found. Some requested entity (file or directory) was not found. */\n  | 'not_found'\n  /** 429 Too Many Requests */\n  | 'resource_exhausted'\n  /** Client specified an invalid argument. 4xx. */\n  | 'invalid_argument'\n  /** 501 Not Implemented */\n  | 'unimplemented'\n  /** 503 Service Unavailable */\n  | 'unavailable'\n  /** Other/generic 5xx. */\n  | 'internal_error'\n  /** Unknown. Any non-standard HTTP status code. */\n  | 'unknown_error'\n  /** The operation was cancelled (typically by the user). */\n  | 'cancelled'\n  /** Already exists (409) */\n  | 'already_exists'\n  /** Operation was rejected because the system is not in a state required for the operation's */\n  | 'failed_precondition'\n  /** The operation was aborted, typically due to a concurrency issue. */\n  | 'aborted'\n  /** Operation was attempted past the valid range. */\n  | 'out_of_range'\n  /** Unrecoverable data loss or corruption */\n  | 'data_loss';\n\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: number): SpanStatusType {\n  if (httpStatus < 400 && httpStatus >= 100) {\n    return 'ok';\n  }\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\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\n  return 'unknown_error';\n}\n","import type {\n  Context,\n  Contexts,\n  DynamicSamplingContext,\n  MeasurementUnit,\n  Measurements,\n  SpanTimeInput,\n  Transaction as TransactionInterface,\n  TransactionContext,\n  TransactionEvent,\n  TransactionMetadata,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport { spanTimeInputToSeconds, spanToJSON, spanToTraceContext } from '../utils/spanUtils';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { Span as SpanClass, SpanRecorder } from './span';\n\n/** JSDoc */\nexport class Transaction extends SpanClass implements TransactionInterface {\n  /**\n   * The reference to the current hub.\n   */\n  public _hub: Hub;\n\n  protected _name: string;\n\n  private _measurements: Measurements;\n\n  private _contexts: Contexts;\n\n  private _trimEnd?: boolean;\n\n  // DO NOT yet remove this property, it is used in a hack for v7 backwards compatibility.\n  private _frozenDynamicSamplingContext: Readonly<Partial<DynamicSamplingContext>> | undefined;\n\n  private _metadata: Partial<TransactionMetadata>;\n\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   * @deprecated Transactions will be removed in v8. Use spans instead.\n   */\n  public constructor(transactionContext: TransactionContext, hub?: Hub) {\n    super(transactionContext);\n    this._measurements = {};\n    this._contexts = {};\n\n    // eslint-disable-next-line deprecation/deprecation\n    this._hub = hub || getCurrentHub();\n\n    this._name = transactionContext.name || '';\n\n    this._metadata = {\n      // eslint-disable-next-line deprecation/deprecation\n      ...transactionContext.metadata,\n    };\n\n    this._trimEnd = transactionContext.trimEnd;\n\n    // this is because transactions are also spans, and spans have a transaction pointer\n    // TODO (v8): Replace this with another way to set the root span\n    // eslint-disable-next-line deprecation/deprecation\n    this.transaction = this;\n\n    // If Dynamic Sampling Context is provided during the creation of the transaction, we freeze it as it usually means\n    // there is incoming Dynamic Sampling Context. (Either through an incoming request, a baggage meta-tag, or other means)\n    const incomingDynamicSamplingContext = this._metadata.dynamicSamplingContext;\n    if (incomingDynamicSamplingContext) {\n      // We shallow copy this in case anything writes to the original reference of the passed in `dynamicSamplingContext`\n      this._frozenDynamicSamplingContext = { ...incomingDynamicSamplingContext };\n    }\n  }\n\n  // This sadly conflicts with the getter/setter ordering :(\n  /* eslint-disable @typescript-eslint/member-ordering */\n\n  /**\n   * Getter for `name` property.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public get name(): string {\n    return this._name;\n  }\n\n  /**\n   * Setter for `name` property, which also sets `source` as custom.\n   * @deprecated Use `updateName()` and `setMetadata()` instead.\n   */\n  public set name(newName: string) {\n    // eslint-disable-next-line deprecation/deprecation\n    this.setName(newName);\n  }\n\n  /**\n   * Get the metadata for this transaction.\n   * @deprecated Use `spanGetMetadata(transaction)` instead.\n   */\n  public get metadata(): TransactionMetadata {\n    // We merge attributes in for backwards compatibility\n    return {\n      // Defaults\n      // eslint-disable-next-line deprecation/deprecation\n      source: 'custom',\n      spanMetadata: {},\n\n      // Legacy metadata\n      ...this._metadata,\n\n      // From attributes\n      ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && {\n        source: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionMetadata['source'],\n      }),\n      ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && {\n        sampleRate: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] as TransactionMetadata['sampleRate'],\n      }),\n    };\n  }\n\n  /**\n   * Update the metadata for this transaction.\n   * @deprecated Use `spanGetMetadata(transaction)` instead.\n   */\n  public set metadata(metadata: TransactionMetadata) {\n    this._metadata = metadata;\n  }\n\n  /* eslint-enable @typescript-eslint/member-ordering */\n\n  /**\n   * Setter for `name` property, which also sets `source` on the metadata.\n   *\n   * @deprecated Use `.updateName()` and `.setAttribute()` instead.\n   */\n  public setName(name: string, source: TransactionMetadata['source'] = 'custom'): void {\n    this._name = name;\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n  }\n\n  /** @inheritdoc */\n  public updateName(name: string): this {\n    this._name = name;\n    return this;\n  }\n\n  /**\n   * Attaches SpanRecorder to the span itself\n   * @param maxlen maximum number of spans that can be recorded\n   */\n  public initSpanRecorder(maxlen: number = 1000): void {\n    // eslint-disable-next-line deprecation/deprecation\n    if (!this.spanRecorder) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.spanRecorder = new SpanRecorder(maxlen);\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.spanRecorder.add(this);\n  }\n\n  /**\n   * Set the context of a transaction event.\n   * @deprecated Use either `.setAttribute()`, or set the context on the scope before creating the transaction.\n   */\n  public setContext(key: string, context: Context | null): void {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use top-level `setMeasurement()` instead.\n   */\n  public setMeasurement(name: string, value: number, unit: MeasurementUnit = ''): void {\n    this._measurements[name] = { value, unit };\n  }\n\n  /**\n   * Store metadata on this transaction.\n   * @deprecated Use attributes or store data on the scope instead.\n   */\n  public setMetadata(newMetadata: Partial<TransactionMetadata>): void {\n    this._metadata = { ...this._metadata, ...newMetadata };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public end(endTimestamp?: SpanTimeInput): string | undefined {\n    const timestampInS = spanTimeInputToSeconds(endTimestamp);\n    const transaction = this._finishTransaction(timestampInS);\n    if (!transaction) {\n      return undefined;\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    return this._hub.captureEvent(transaction);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toContext(): TransactionContext {\n    // eslint-disable-next-line deprecation/deprecation\n    const spanContext = super.toContext();\n\n    return dropUndefinedKeys({\n      ...spanContext,\n      name: this._name,\n      trimEnd: this._trimEnd,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateWithContext(transactionContext: TransactionContext): this {\n    // eslint-disable-next-line deprecation/deprecation\n    super.updateWithContext(transactionContext);\n\n    this._name = transactionContext.name || '';\n    this._trimEnd = transactionContext.trimEnd;\n\n    return this;\n  }\n\n  /**\n   * @inheritdoc\n   *\n   * @experimental\n   *\n   * @deprecated Use top-level `getDynamicSamplingContextFromSpan` instead.\n   */\n  public getDynamicSamplingContext(): Readonly<Partial<DynamicSamplingContext>> {\n    return getDynamicSamplingContextFromSpan(this);\n  }\n\n  /**\n   * Override the current hub with a new one.\n   * Used if you want another hub to finish the transaction.\n   *\n   * @internal\n   */\n  public setHub(hub: Hub): void {\n    this._hub = hub;\n  }\n\n  /**\n   * Finish the transaction & prepare the event to send to Sentry.\n   */\n  protected _finishTransaction(endTimestamp?: number): TransactionEvent | undefined {\n    // This transaction is already finished, so we should not flush it again.\n    if (this._endTime !== undefined) {\n      return undefined;\n    }\n\n    if (!this._name) {\n      DEBUG_BUILD && logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n      this._name = '<unlabeled transaction>';\n    }\n\n    // just sets the end timestamp\n    super.end(endTimestamp);\n\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this._hub.getClient();\n    if (client && client.emit) {\n      client.emit('finishTransaction', this);\n    }\n\n    if (this._sampled !== true) {\n      // At this point if `sampled !== true` we want to discard the transaction.\n      DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n      if (client) {\n        client.recordDroppedEvent('sample_rate', 'transaction');\n      }\n\n      return undefined;\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    const finishedSpans = this.spanRecorder\n      ? // eslint-disable-next-line deprecation/deprecation\n        this.spanRecorder.spans.filter(span => span !== this && spanToJSON(span).timestamp)\n      : [];\n\n    if (this._trimEnd && finishedSpans.length > 0) {\n      const endTimes = finishedSpans.map(span => spanToJSON(span).timestamp).filter(Boolean) as number[];\n      this._endTime = endTimes.reduce((prev, current) => {\n        return prev > current ? prev : current;\n      });\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    const { metadata } = this;\n    // eslint-disable-next-line deprecation/deprecation\n    const { source } = metadata;\n\n    const transaction: TransactionEvent = {\n      contexts: {\n        ...this._contexts,\n        // We don't want to override trace context\n        trace: spanToTraceContext(this),\n      },\n      // TODO: Pass spans serialized via `spanToJSON()` here instead in v8.\n      spans: finishedSpans,\n      start_timestamp: this._startTime,\n      // eslint-disable-next-line deprecation/deprecation\n      tags: this.tags,\n      timestamp: this._endTime,\n      transaction: this._name,\n      type: 'transaction',\n      sdkProcessingMetadata: {\n        ...metadata,\n        dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n      },\n      ...(source && {\n        transaction_info: {\n          source,\n        },\n      }),\n    };\n\n    const hasMeasurements = Object.keys(this._measurements).length > 0;\n\n    if (hasMeasurements) {\n      DEBUG_BUILD &&\n        logger.log(\n          '[Measurements] Adding measurements to transaction',\n          JSON.stringify(this._measurements, undefined, 2),\n        );\n      transaction.measurements = this._measurements;\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    DEBUG_BUILD && logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`);\n\n    return transaction;\n  }\n}\n","/* eslint-disable max-lines */\nimport type { SpanTimeInput, TransactionContext } from '@sentry/types';\nimport { logger, timestampInSeconds } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\nimport type { Span } from './span';\nimport { SpanRecorder } from './span';\nimport { Transaction } from './transaction';\n\nexport const TRACING_DEFAULTS = {\n  idleTimeout: 1000,\n  finalTimeout: 30000,\n  heartbeatInterval: 5000,\n};\n\nconst FINISH_REASON_TAG = 'finishReason';\n\nconst IDLE_TRANSACTION_FINISH_REASONS = [\n  'heartbeatFailed',\n  'idleTimeout',\n  'documentHidden',\n  'finalTimeout',\n  'externalFinish',\n  'cancelled',\n];\n\n/**\n * @inheritDoc\n */\nexport class IdleTransactionSpanRecorder extends SpanRecorder {\n  public constructor(\n    private readonly _pushActivity: (id: string) => void,\n    private readonly _popActivity: (id: string) => void,\n    public transactionSpanId: string,\n    maxlen?: number,\n  ) {\n    super(maxlen);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public add(span: Span): void {\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.spanContext().spanId !== this.transactionSpanId) {\n      // We patch span.end() to pop an activity after setting an endTimestamp.\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const originalEnd = span.end;\n      span.end = (...rest: unknown[]) => {\n        this._popActivity(span.spanContext().spanId);\n        return originalEnd.apply(span, rest);\n      };\n\n      // We should only push new activities if the span does not have an end timestamp.\n      if (spanToJSON(span).timestamp === undefined) {\n        this._pushActivity(span.spanContext().spanId);\n      }\n    }\n\n    super.add(span);\n  }\n}\n\nexport type BeforeFinishCallback = (transactionSpan: IdleTransaction, endTimestamp: number) => void;\n\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 */\nexport class IdleTransaction extends Transaction {\n  // Activities store a list of active spans\n  public activities: Record<string, boolean>;\n  // Track state of activities in previous heartbeat\n  private _prevHeartbeatString: string | undefined;\n\n  // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n  private _heartbeatCounter: number;\n\n  // We should not use heartbeat if we finished a transaction\n  private _finished: boolean;\n\n  // Idle timeout was canceled and we should finish the transaction with the last span end.\n  private _idleTimeoutCanceledPermanently: boolean;\n\n  private readonly _beforeFinishCallbacks: BeforeFinishCallback[];\n\n  /**\n   * Timer that tracks Transaction idleTimeout\n   */\n  private _idleTimeoutID: ReturnType<typeof setTimeout> | undefined;\n\n  private _finishReason: (typeof IDLE_TRANSACTION_FINISH_REASONS)[number];\n\n  private _autoFinishAllowed: boolean;\n\n  /**\n   * @deprecated Transactions will be removed in v8. Use spans instead.\n   */\n  public constructor(\n    transactionContext: TransactionContext,\n    private readonly _idleHub: Hub,\n    /**\n     * The time to wait in ms until the idle transaction will be finished. This timer is started each time\n     * there are no active spans on this transaction.\n     */\n    private readonly _idleTimeout: number = TRACING_DEFAULTS.idleTimeout,\n    /**\n     * The final value in ms that a transaction cannot exceed\n     */\n    private readonly _finalTimeout: number = TRACING_DEFAULTS.finalTimeout,\n    private readonly _heartbeatInterval: number = TRACING_DEFAULTS.heartbeatInterval,\n    // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n    private readonly _onScope: boolean = false,\n    /**\n     * When set to `true`, will disable the idle timeout (`_idleTimeout` option) and heartbeat mechanisms (`_heartbeatInterval`\n     * option) until the `sendAutoFinishSignal()` method is called. The final timeout mechanism (`_finalTimeout` option)\n     * will not be affected by this option, meaning the transaction will definitely be finished when the final timeout is\n     * reached, no matter what this option is configured to.\n     *\n     * Defaults to `false`.\n     */\n    delayAutoFinishUntilSignal: boolean = false,\n  ) {\n    super(transactionContext, _idleHub);\n\n    this.activities = {};\n    this._heartbeatCounter = 0;\n    this._finished = false;\n    this._idleTimeoutCanceledPermanently = false;\n    this._beforeFinishCallbacks = [];\n    this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[4];\n    this._autoFinishAllowed = !delayAutoFinishUntilSignal;\n\n    if (_onScope) {\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      DEBUG_BUILD && logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`);\n      // eslint-disable-next-line deprecation/deprecation\n      _idleHub.getScope().setSpan(this);\n    }\n\n    if (!delayAutoFinishUntilSignal) {\n      this._restartIdleTimeout();\n    }\n\n    setTimeout(() => {\n      if (!this._finished) {\n        this.setStatus('deadline_exceeded');\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[3];\n        this.end();\n      }\n    }, this._finalTimeout);\n  }\n\n  /** {@inheritDoc} */\n  public end(endTimestamp?: SpanTimeInput): string | undefined {\n    const endTimestampInS = spanTimeInputToSeconds(endTimestamp);\n\n    this._finished = true;\n    this.activities = {};\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.op === 'ui.action.click') {\n      this.setAttribute(FINISH_REASON_TAG, this._finishReason);\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.spanRecorder) {\n      DEBUG_BUILD &&\n        // eslint-disable-next-line deprecation/deprecation\n        logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestampInS * 1000).toISOString(), this.op);\n\n      for (const callback of this._beforeFinishCallbacks) {\n        callback(this, endTimestampInS);\n      }\n\n      // eslint-disable-next-line deprecation/deprecation\n      this.spanRecorder.spans = this.spanRecorder.spans.filter((span: Span) => {\n        // If we are dealing with the transaction itself, we just return it\n        if (span.spanContext().spanId === this.spanContext().spanId) {\n          return true;\n        }\n\n        // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n        if (!spanToJSON(span).timestamp) {\n          span.setStatus('cancelled');\n          span.end(endTimestampInS);\n          DEBUG_BUILD &&\n            logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n        }\n\n        const { start_timestamp: startTime, timestamp: endTime } = spanToJSON(span);\n        const spanStartedBeforeTransactionFinish = startTime && startTime < endTimestampInS;\n\n        // Add a delta with idle timeout so that we prevent false positives\n        const timeoutWithMarginOfError = (this._finalTimeout + this._idleTimeout) / 1000;\n        const spanEndedBeforeFinalTimeout = endTime && startTime && endTime - startTime < timeoutWithMarginOfError;\n\n        if (DEBUG_BUILD) {\n          const stringifiedSpan = JSON.stringify(span, undefined, 2);\n          if (!spanStartedBeforeTransactionFinish) {\n            logger.log('[Tracing] discarding Span since it happened after Transaction was finished', stringifiedSpan);\n          } else if (!spanEndedBeforeFinalTimeout) {\n            logger.log('[Tracing] discarding Span since it finished after Transaction final timeout', stringifiedSpan);\n          }\n        }\n\n        return spanStartedBeforeTransactionFinish && spanEndedBeforeFinalTimeout;\n      });\n\n      DEBUG_BUILD && logger.log('[Tracing] flushing IdleTransaction');\n    } else {\n      DEBUG_BUILD && logger.log('[Tracing] No active IdleTransaction');\n    }\n\n    // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n    if (this._onScope) {\n      // eslint-disable-next-line deprecation/deprecation\n      const scope = this._idleHub.getScope();\n      // eslint-disable-next-line deprecation/deprecation\n      if (scope.getTransaction() === this) {\n        // eslint-disable-next-line deprecation/deprecation\n        scope.setSpan(undefined);\n      }\n    }\n\n    return super.end(endTimestamp);\n  }\n\n  /**\n   * Register a callback function that gets executed 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  public registerBeforeFinishCallback(callback: BeforeFinishCallback): void {\n    this._beforeFinishCallbacks.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public initSpanRecorder(maxlen?: number): void {\n    // eslint-disable-next-line deprecation/deprecation\n    if (!this.spanRecorder) {\n      const pushActivity = (id: string): void => {\n        if (this._finished) {\n          return;\n        }\n        this._pushActivity(id);\n      };\n      const popActivity = (id: string): void => {\n        if (this._finished) {\n          return;\n        }\n        this._popActivity(id);\n      };\n\n      // eslint-disable-next-line deprecation/deprecation\n      this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanContext().spanId, maxlen);\n\n      // Start heartbeat so that transactions do not run forever.\n      DEBUG_BUILD && logger.log('Starting heartbeat');\n      this._pingHeartbeat();\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.spanRecorder.add(this);\n  }\n\n  /**\n   * Cancels the existing idle timeout, if there is one.\n   * @param restartOnChildSpanChange Default is `true`.\n   *                                 If set to false the transaction will end\n   *                                 with the last child span.\n   */\n  public cancelIdleTimeout(\n    endTimestamp?: Parameters<IdleTransaction['end']>[0],\n    {\n      restartOnChildSpanChange,\n    }: {\n      restartOnChildSpanChange?: boolean;\n    } = {\n      restartOnChildSpanChange: true,\n    },\n  ): void {\n    this._idleTimeoutCanceledPermanently = restartOnChildSpanChange === false;\n    if (this._idleTimeoutID) {\n      clearTimeout(this._idleTimeoutID);\n      this._idleTimeoutID = undefined;\n\n      if (Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n        this.end(endTimestamp);\n      }\n    }\n  }\n\n  /**\n   * Temporary method used to externally set the transaction's `finishReason`\n   *\n   * ** WARNING**\n   * This is for the purpose of experimentation only and will be removed in the near future, do not use!\n   *\n   * @internal\n   *\n   */\n  public setFinishReason(reason: string): void {\n    this._finishReason = reason;\n  }\n\n  /**\n   * Permits the IdleTransaction to automatically end itself via the idle timeout and heartbeat mechanisms when the `delayAutoFinishUntilSignal` option was set to `true`.\n   */\n  public sendAutoFinishSignal(): void {\n    if (!this._autoFinishAllowed) {\n      DEBUG_BUILD && logger.log('[Tracing] Received finish signal for idle transaction.');\n      this._restartIdleTimeout();\n      this._autoFinishAllowed = true;\n    }\n  }\n\n  /**\n   * Restarts idle timeout, if there is no running idle timeout it will start one.\n   */\n  private _restartIdleTimeout(endTimestamp?: Parameters<IdleTransaction['end']>[0]): void {\n    this.cancelIdleTimeout();\n    this._idleTimeoutID = setTimeout(() => {\n      if (!this._finished && Object.keys(this.activities).length === 0) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[1];\n        this.end(endTimestamp);\n      }\n    }, this._idleTimeout);\n  }\n\n  /**\n   * Start tracking a specific activity.\n   * @param spanId The span id that represents the activity\n   */\n  private _pushActivity(spanId: string): void {\n    this.cancelIdleTimeout(undefined, { restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently });\n    DEBUG_BUILD && logger.log(`[Tracing] pushActivity: ${spanId}`);\n    this.activities[spanId] = true;\n    DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n  }\n\n  /**\n   * Remove an activity from usage\n   * @param spanId The span id that represents the activity\n   */\n  private _popActivity(spanId: string): void {\n    if (this.activities[spanId]) {\n      DEBUG_BUILD && logger.log(`[Tracing] popActivity ${spanId}`);\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this.activities[spanId];\n      DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n    }\n\n    if (Object.keys(this.activities).length === 0) {\n      const endTimestamp = timestampInSeconds();\n      if (this._idleTimeoutCanceledPermanently) {\n        if (this._autoFinishAllowed) {\n          this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n          this.end(endTimestamp);\n        }\n      } else {\n        // We need to add the timeout here to have the real endtimestamp of the transaction\n        // Remember timestampInSeconds is in seconds, timeout is in ms\n        this._restartIdleTimeout(endTimestamp + this._idleTimeout / 1000);\n      }\n    }\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  private _beat(): void {\n    // We should not be running heartbeat if the idle transaction is finished.\n    if (this._finished) {\n      return;\n    }\n\n    const heartbeatString = Object.keys(this.activities).join('');\n\n    if (heartbeatString === this._prevHeartbeatString) {\n      this._heartbeatCounter++;\n    } else {\n      this._heartbeatCounter = 1;\n    }\n\n    this._prevHeartbeatString = heartbeatString;\n\n    if (this._heartbeatCounter >= 3) {\n      if (this._autoFinishAllowed) {\n        DEBUG_BUILD && logger.log('[Tracing] Transaction finished because of no change for 3 heart beats');\n        this.setStatus('deadline_exceeded');\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[0];\n        this.end();\n      }\n    } else {\n      this._pingHeartbeat();\n    }\n  }\n\n  /**\n   * Pings the heartbeat\n   */\n  private _pingHeartbeat(): void {\n    DEBUG_BUILD && logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`);\n    setTimeout(() => {\n      this._beat();\n    }, this._heartbeatInterval);\n  }\n}\n","import type { Options } from '@sentry/types';\n\nimport { getClient } from '../exports';\n\n// Treeshakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean | undefined;\n\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(\n  maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,\n): boolean {\n  if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n    return false;\n  }\n\n  const client = getClient();\n  const options = maybeOptions || (client && client.getOptions());\n  return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n","import type { Options, SamplingContext } from '@sentry/types';\nimport { isNaN, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanToJSON } from '../utils/spanUtils';\nimport type { Transaction } from './transaction';\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 * This method muttes the given `transaction` and will set the `sampled` value on it.\n * It returns the same transaction, for convenience.\n */\nexport function sampleTransaction<T extends Transaction>(\n  transaction: T,\n  options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,\n  samplingContext: SamplingContext,\n): T {\n  // nothing to do if tracing is not enabled\n  if (!hasTracingEnabled(options)) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n  // eslint-disable-next-line deprecation/deprecation\n  if (transaction.sampled !== undefined) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(transaction.sampled));\n    return transaction;\n  }\n\n  // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n  // work; prefer the hook if so\n  let sampleRate;\n  if (typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler(samplingContext);\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n  } else if (samplingContext.parentSampled !== undefined) {\n    sampleRate = samplingContext.parentSampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n  } else {\n    // When `enableTracing === true`, we use a sample rate of 100%\n    sampleRate = 1;\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\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    DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.sampled = false;\n    return transaction;\n  }\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    DEBUG_BUILD &&\n      logger.log(\n        `[Tracing] Discarding transaction because ${\n          typeof options.tracesSampler === 'function'\n            ? 'tracesSampler returned 0 or false'\n            : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n        }`,\n      );\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.sampled = false;\n    return transaction;\n  }\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  // eslint-disable-next-line deprecation/deprecation\n  transaction.sampled = Math.random() < (sampleRate as number | boolean);\n\n  // if we're not going to keep it, we're done\n  // eslint-disable-next-line deprecation/deprecation\n  if (!transaction.sampled) {\n    DEBUG_BUILD &&\n      logger.log(\n        `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n          sampleRate,\n        )})`,\n      );\n    return transaction;\n  }\n\n  DEBUG_BUILD &&\n    // eslint-disable-next-line deprecation/deprecation\n    logger.log(`[Tracing] starting ${transaction.op} transaction - ${spanToJSON(transaction).description}`);\n  return transaction;\n}\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: unknown): boolean {\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    DEBUG_BUILD &&\n      logger.warn(\n        `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          rate,\n        )} of type ${JSON.stringify(typeof rate)}.`,\n      );\n    return false;\n  }\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    DEBUG_BUILD &&\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","import type { ClientOptions, CustomSamplingContext, TransactionContext } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getMainCarrier } from '../hub';\nimport { spanToTraceHeader } from '../utils/spanUtils';\nimport { registerErrorInstrumentation } from './errors';\nimport { IdleTransaction } from './idletransaction';\nimport { sampleTransaction } from './sampling';\nimport { Transaction } from './transaction';\n\n/** Returns all trace headers that are currently on the top scope. */\nfunction traceHeaders(this: Hub): { [key: string]: string } {\n  // eslint-disable-next-line deprecation/deprecation\n  const scope = this.getScope();\n  // eslint-disable-next-line deprecation/deprecation\n  const span = scope.getSpan();\n\n  return span\n    ? {\n        'sentry-trace': spanToTraceHeader(span),\n      }\n    : {};\n}\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(\n  this: Hub,\n  transactionContext: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n): Transaction {\n  // eslint-disable-next-line deprecation/deprecation\n  const client = this.getClient();\n  const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n  const configInstrumenter = options.instrumenter || 'sentry';\n  const transactionInstrumenter = transactionContext.instrumenter || 'sentry';\n\n  if (configInstrumenter !== transactionInstrumenter) {\n    DEBUG_BUILD &&\n      logger.error(\n        `A transaction was started with instrumenter=\\`${transactionInstrumenter}\\`, but the SDK is configured with the \\`${configInstrumenter}\\` instrumenter.\nThe transaction will not be sampled. Please use the ${configInstrumenter} instrumentation to start transactions.`,\n      );\n\n    // eslint-disable-next-line deprecation/deprecation\n    transactionContext.sampled = false;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  let transaction = new Transaction(transactionContext, this);\n  transaction = sampleTransaction(transaction, options, {\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    ...customSamplingContext,\n  });\n  if (transaction.isRecording()) {\n    transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n  }\n  if (client && client.emit) {\n    client.emit('startTransaction', transaction);\n  }\n  return transaction;\n}\n\n/**\n * Create new idle transaction.\n */\nexport function startIdleTransaction(\n  hub: Hub,\n  transactionContext: TransactionContext,\n  idleTimeout: number,\n  finalTimeout: number,\n  onScope?: boolean,\n  customSamplingContext?: CustomSamplingContext,\n  heartbeatInterval?: number,\n  delayAutoFinishUntilSignal: boolean = false,\n): IdleTransaction {\n  // eslint-disable-next-line deprecation/deprecation\n  const client = hub.getClient();\n  const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n  // eslint-disable-next-line deprecation/deprecation\n  let transaction = new IdleTransaction(\n    transactionContext,\n    hub,\n    idleTimeout,\n    finalTimeout,\n    heartbeatInterval,\n    onScope,\n    delayAutoFinishUntilSignal,\n  );\n  transaction = sampleTransaction(transaction, options, {\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    ...customSamplingContext,\n  });\n  if (transaction.isRecording()) {\n    transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n  }\n  if (client && client.emit) {\n    client.emit('startTransaction', transaction);\n  }\n  return transaction;\n}\n\n/**\n * Adds tracing extensions to the global hub.\n */\nexport function addTracingExtensions(): void {\n  const 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  registerErrorInstrumentation();\n}\n","import { isThenable } from '@sentry/utils';\n\n/**\n * Wrap a callback function with error handling.\n * If an error is thrown, it will be passed to the `onError` callback and re-thrown.\n *\n * If the return value of the function is a promise, it will be handled with `maybeHandlePromiseRejection`.\n *\n * If an `onFinally` callback is provided, this will be called when the callback has finished\n * - so if it returns a promise, once the promise resolved/rejected,\n * else once the callback has finished executing.\n * The `onFinally` callback will _always_ be called, no matter if an error was thrown or not.\n */\nexport function handleCallbackErrors<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  Fn extends () => any,\n>(\n  fn: Fn,\n  onError: (error: unknown) => void,\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onFinally: () => void = () => {},\n): ReturnType<Fn> {\n  let maybePromiseResult: ReturnType<Fn>;\n  try {\n    maybePromiseResult = fn();\n  } catch (e) {\n    onError(e);\n    onFinally();\n    throw e;\n  }\n\n  return maybeHandlePromiseRejection(maybePromiseResult, onError, onFinally);\n}\n\n/**\n * Maybe handle a promise rejection.\n * This expects to be given a value that _may_ be a promise, or any other value.\n * If it is a promise, and it rejects, it will call the `onError` callback.\n * Other than this, it will generally return the given value as-is.\n */\nfunction maybeHandlePromiseRejection<MaybePromise>(\n  value: MaybePromise,\n  onError: (error: unknown) => void,\n  onFinally: () => void,\n): MaybePromise {\n  if (isThenable(value)) {\n    // @ts-expect-error - the isThenable check returns the \"wrong\" type here\n    return value.then(\n      res => {\n        onFinally();\n        return res;\n      },\n      e => {\n        onError(e);\n        onFinally();\n        throw e;\n      },\n    );\n  }\n\n  onFinally();\n  return value;\n}\n","import type {\n  Instrumenter,\n  Primitive,\n  Scope,\n  Span,\n  SpanTimeInput,\n  TransactionContext,\n  TransactionMetadata,\n} from '@sentry/types';\nimport type { SpanAttributes } from '@sentry/types';\nimport type { SpanOrigin } from '@sentry/types';\nimport type { TransactionSource } from '@sentry/types';\nimport { dropUndefinedKeys, logger, tracingContextFromHeaders } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getCurrentScope, withScope } from '../exports';\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\n\ninterface StartSpanOptions extends TransactionContext {\n  /** A manually specified start time for the created `Span` object. */\n  startTime?: SpanTimeInput;\n\n  /** If defined, start this span off this scope instead off the current scope. */\n  scope?: Scope;\n\n  /** The name of the span. */\n  name: string;\n\n  /** An op for the span. This is a categorization for spans. */\n  op?: string;\n\n  /** The origin of the span - if it comes from auto instrumenation or manual instrumentation. */\n  origin?: SpanOrigin;\n\n  /** Attributes for the span. */\n  attributes?: SpanAttributes;\n\n  // All remaining fields are deprecated\n\n  /**\n   * @deprecated Manually set the end timestamp instead.\n   */\n  trimEnd?: boolean;\n\n  /**\n   * @deprecated This cannot be set manually anymore.\n   */\n  parentSampled?: boolean;\n\n  /**\n   * @deprecated Use attributes or set data on scopes instead.\n   */\n  metadata?: Partial<TransactionMetadata>;\n\n  /**\n   * The name thingy.\n   * @deprecated Use `name` instead.\n   */\n  description?: string;\n\n  /**\n   * @deprecated Use `span.setStatus()` instead.\n   */\n  status?: string;\n\n  /**\n   * @deprecated Use `scope` instead.\n   */\n  parentSpanId?: string;\n\n  /**\n   * @deprecated You cannot manually set the span to sampled anymore.\n   */\n  sampled?: boolean;\n\n  /**\n   * @deprecated You cannot manually set the spanId anymore.\n   */\n  spanId?: string;\n\n  /**\n   * @deprecated You cannot manually set the traceId anymore.\n   */\n  traceId?: string;\n\n  /**\n   * @deprecated Use an attribute instead.\n   */\n  source?: TransactionSource;\n\n  /**\n   * @deprecated Use attributes or set tags on the scope instead.\n   */\n  tags?: { [key: string]: Primitive };\n\n  /**\n   * @deprecated Use attributes instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  data?: { [key: string]: any };\n\n  /**\n   * @deprecated Use `startTime` instead.\n   */\n  startTimestamp?: number;\n\n  /**\n   * @deprecated Use `span.end()` instead.\n   */\n  endTimestamp?: number;\n\n  /**\n   * @deprecated You cannot set the instrumenter manually anymore.\n   */\n  instrumenter?: Instrumenter;\n}\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n *\n * This function is meant to be used internally and may break at any time. Use at your own risk.\n *\n * @internal\n * @private\n *\n * @deprecated Use `startSpan` instead.\n */\nexport function trace<T>(\n  context: TransactionContext,\n  callback: (span?: Span) => T,\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onError: (error: unknown, span?: Span) => void = () => {},\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  afterFinish: () => void = () => {},\n): T {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  const scope = getCurrentScope();\n  // eslint-disable-next-line deprecation/deprecation\n  const parentSpan = scope.getSpan();\n\n  const ctx = normalizeContext(context);\n  const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n\n  // eslint-disable-next-line deprecation/deprecation\n  scope.setSpan(activeSpan);\n\n  return handleCallbackErrors(\n    () => callback(activeSpan),\n    error => {\n      activeSpan && activeSpan.setStatus('internal_error');\n      onError(error, activeSpan);\n    },\n    () => {\n      activeSpan && activeSpan.end();\n      // eslint-disable-next-line deprecation/deprecation\n      scope.setSpan(parentSpan);\n      afterFinish();\n    },\n  );\n}\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpan<T>(context: StartSpanOptions, callback: (span: Span | undefined) => T): T {\n  const ctx = normalizeContext(context);\n\n  return withScope(context.scope, scope => {\n    // eslint-disable-next-line deprecation/deprecation\n    const hub = getCurrentHub();\n    // eslint-disable-next-line deprecation/deprecation\n    const parentSpan = scope.getSpan();\n\n    const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n    // eslint-disable-next-line deprecation/deprecation\n    scope.setSpan(activeSpan);\n\n    return handleCallbackErrors(\n      () => callback(activeSpan),\n      () => {\n        // Only update the span status if it hasn't been changed yet\n        if (activeSpan) {\n          const { status } = spanToJSON(activeSpan);\n          if (!status || status === 'ok') {\n            activeSpan.setStatus('internal_error');\n          }\n        }\n      },\n      () => activeSpan && activeSpan.end(),\n    );\n  });\n}\n\n/**\n * @deprecated Use {@link startSpan} instead.\n */\nexport const startActiveSpan = startSpan;\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpanManual<T>(\n  context: StartSpanOptions,\n  callback: (span: Span | undefined, finish: () => void) => T,\n): T {\n  const ctx = normalizeContext(context);\n\n  return withScope(context.scope, scope => {\n    // eslint-disable-next-line deprecation/deprecation\n    const hub = getCurrentHub();\n    // eslint-disable-next-line deprecation/deprecation\n    const parentSpan = scope.getSpan();\n\n    const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n    // eslint-disable-next-line deprecation/deprecation\n    scope.setSpan(activeSpan);\n\n    function finishAndSetSpan(): void {\n      activeSpan && activeSpan.end();\n    }\n\n    return handleCallbackErrors(\n      () => callback(activeSpan, finishAndSetSpan),\n      () => {\n        // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n        if (activeSpan && activeSpan.isRecording()) {\n          const { status } = spanToJSON(activeSpan);\n          if (!status || status === 'ok') {\n            activeSpan.setStatus('internal_error');\n          }\n        }\n      },\n    );\n  });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startInactiveSpan(context: StartSpanOptions): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n\n  const ctx = normalizeContext(context);\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  const parentSpan = context.scope\n    ? // eslint-disable-next-line deprecation/deprecation\n      context.scope.getSpan()\n    : getActiveSpan();\n  return parentSpan\n    ? // eslint-disable-next-line deprecation/deprecation\n      parentSpan.startChild(ctx)\n    : // eslint-disable-next-line deprecation/deprecation\n      hub.startTransaction(ctx);\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentScope().getSpan();\n}\n\nexport function continueTrace({\n  sentryTrace,\n  baggage,\n}: {\n  sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n  baggage: Parameters<typeof tracingContextFromHeaders>[1];\n}): Partial<TransactionContext>;\nexport function continueTrace<V>(\n  {\n    sentryTrace,\n    baggage,\n  }: {\n    sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n    baggage: Parameters<typeof tracingContextFromHeaders>[1];\n  },\n  callback: (transactionContext: Partial<TransactionContext>) => V,\n): V;\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers,\n * or in the browser from `<meta name=\"sentry-trace\">` and `<meta name=\"baggage\">` HTML tags.\n *\n * The callback receives a transactionContext that may be used for `startTransaction` or `startSpan`.\n */\nexport function continueTrace<V>(\n  {\n    sentryTrace,\n    baggage,\n  }: {\n    sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n    baggage: Parameters<typeof tracingContextFromHeaders>[1];\n  },\n  callback?: (transactionContext: Partial<TransactionContext>) => V,\n): V | Partial<TransactionContext> {\n  const currentScope = getCurrentScope();\n\n  const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n    sentryTrace,\n    baggage,\n  );\n\n  currentScope.setPropagationContext(propagationContext);\n\n  if (DEBUG_BUILD && traceparentData) {\n    logger.log(`[Tracing] Continuing trace ${traceparentData.traceId}.`);\n  }\n\n  const transactionContext: Partial<TransactionContext> = {\n    ...traceparentData,\n    metadata: dropUndefinedKeys({\n      dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,\n    }),\n  };\n\n  if (!callback) {\n    return transactionContext;\n  }\n\n  return callback(transactionContext);\n}\n\nfunction createChildSpanOrTransaction(\n  hub: Hub,\n  parentSpan: Span | undefined,\n  ctx: TransactionContext,\n): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n  return parentSpan\n    ? // eslint-disable-next-line deprecation/deprecation\n      parentSpan.startChild(ctx)\n    : // eslint-disable-next-line deprecation/deprecation\n      hub.startTransaction(ctx);\n}\n\n/**\n * This converts StartSpanOptions to TransactionContext.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n *\n * Eventually the StartSpanOptions will be more aligned with OpenTelemetry.\n */\nfunction normalizeContext(context: StartSpanOptions): TransactionContext {\n  if (context.startTime) {\n    const ctx: TransactionContext & { startTime?: SpanTimeInput } = { ...context };\n    ctx.startTimestamp = spanTimeInputToSeconds(context.startTime);\n    delete ctx.startTime;\n    return ctx;\n  }\n\n  return context;\n}\n","import type {\n  Envelope,\n  EnvelopeItem,\n  EnvelopeItemType,\n  Event,\n  EventDropReason,\n  EventItem,\n  InternalBaseTransportOptions,\n  Transport,\n  TransportMakeRequestResponse,\n  TransportRequestExecutor,\n} from '@sentry/types';\nimport type { PromiseBuffer, RateLimits } from '@sentry/utils';\nimport {\n  SentryError,\n  createEnvelope,\n  envelopeItemTypeToDataCategory,\n  forEachEnvelopeItem,\n  isRateLimited,\n  logger,\n  makePromiseBuffer,\n  resolvedSyncPromise,\n  serializeEnvelope,\n  updateRateLimits,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n  options: InternalBaseTransportOptions,\n  makeRequest: TransportRequestExecutor,\n  buffer: PromiseBuffer<void | TransportMakeRequestResponse> = makePromiseBuffer(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n): Transport {\n  let rateLimits: RateLimits = {};\n  const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);\n\n  function send(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> {\n    const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n    // Drop rate limited items from envelope\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const envelopeItemDataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, envelopeItemDataCategory)) {\n        const event: Event | undefined = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent('ratelimit_backoff', envelopeItemDataCategory, event);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return resolvedSyncPromise();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as any);\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason: EventDropReason): void => {\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        const event: Event | undefined = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n      });\n    };\n\n    const requestTask = (): PromiseLike<void | TransportMakeRequestResponse> =>\n      makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).then(\n        response => {\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n            DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\n\n          rateLimits = updateRateLimits(rateLimits, response);\n          return response;\n        },\n        error => {\n          recordEnvelopeLoss('network_error');\n          throw error;\n        },\n      );\n\n    return buffer.add(requestTask).then(\n      result => result,\n      error => {\n        if (error instanceof SentryError) {\n          DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n          recordEnvelopeLoss('queue_overflow');\n          return resolvedSyncPromise();\n        } else {\n          throw error;\n        }\n      },\n    );\n  }\n\n  // We use this to identifify if the transport is the base transport\n  // TODO (v8): Remove this again as we'll no longer need it\n  send.__sentry__baseTransport__ = true;\n\n  return {\n    send,\n    flush,\n  };\n}\n\nfunction getEventForEnvelopeItem(item: Envelope[1][number], type: EnvelopeItemType): Event | undefined {\n  if (type !== 'event' && type !== 'transaction') {\n    return undefined;\n  }\n\n  return Array.isArray(item) ? (item as EventItem)[1] : undefined;\n}\n","import type {\n  BaseTransportOptions,\n  Envelope,\n  EnvelopeItemType,\n  Event,\n  EventItem,\n  Transport,\n  TransportMakeRequestResponse,\n} from '@sentry/types';\nimport { dsnFromString, forEachEnvelopeItem } from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from '../api';\n\ninterface MatchParam {\n  /** The envelope to be sent */\n  envelope: Envelope;\n  /**\n   * A function that returns an event from the envelope if one exists. You can optionally pass an array of envelope item\n   * types to filter by - only envelopes matching the given types will be multiplexed.\n   * Allowed values are: 'event', 'transaction', 'profile', 'replay_event'\n   *\n   * @param types Defaults to ['event']\n   */\n  getEvent(types?: EnvelopeItemType[]): Event | undefined;\n}\n\ntype RouteTo = { dsn: string; release: string };\ntype Matcher = (param: MatchParam) => (string | RouteTo)[];\n\n/**\n * Gets an event from an envelope.\n *\n * This is only exported for use in the tests\n */\nexport function eventFromEnvelope(env: Envelope, types: EnvelopeItemType[]): Event | undefined {\n  let event: Event | undefined;\n\n  forEachEnvelopeItem(env, (item, type) => {\n    if (types.includes(type)) {\n      event = Array.isArray(item) ? (item as EventItem)[1] : undefined;\n    }\n    // bail out if we found an event\n    return !!event;\n  });\n\n  return event;\n}\n\n/**\n * Creates a transport that overrides the release on all events.\n */\nfunction makeOverrideReleaseTransport<TO extends BaseTransportOptions>(\n  createTransport: (options: TO) => Transport,\n  release: string,\n): (options: TO) => Transport {\n  return options => {\n    const transport = createTransport(options);\n\n    return {\n      send: async (envelope: Envelope): Promise<void | TransportMakeRequestResponse> => {\n        const event = eventFromEnvelope(envelope, ['event', 'transaction', 'profile', 'replay_event']);\n\n        if (event) {\n          event.release = release;\n        }\n        return transport.send(envelope);\n      },\n      flush: timeout => transport.flush(timeout),\n    };\n  };\n}\n\n/**\n * Creates a transport that can send events to different DSNs depending on the envelope contents.\n */\nexport function makeMultiplexedTransport<TO extends BaseTransportOptions>(\n  createTransport: (options: TO) => Transport,\n  matcher: Matcher,\n): (options: TO) => Transport {\n  return options => {\n    const fallbackTransport = createTransport(options);\n    const otherTransports: Record<string, Transport> = {};\n\n    function getTransport(dsn: string, release: string | undefined): Transport | undefined {\n      // We create a transport for every unique dsn/release combination as there may be code from multiple releases in\n      // use at the same time\n      const key = release ? `${dsn}:${release}` : dsn;\n\n      if (!otherTransports[key]) {\n        const validatedDsn = dsnFromString(dsn);\n        if (!validatedDsn) {\n          return undefined;\n        }\n        const url = getEnvelopeEndpointWithUrlEncodedAuth(validatedDsn);\n\n        otherTransports[key] = release\n          ? makeOverrideReleaseTransport(createTransport, release)({ ...options, url })\n          : createTransport({ ...options, url });\n      }\n\n      return otherTransports[key];\n    }\n\n    async function send(envelope: Envelope): Promise<void | TransportMakeRequestResponse> {\n      function getEvent(types?: EnvelopeItemType[]): Event | undefined {\n        const eventTypes: EnvelopeItemType[] = types && types.length ? types : ['event'];\n        return eventFromEnvelope(envelope, eventTypes);\n      }\n\n      const transports = matcher({ envelope, getEvent })\n        .map(result => {\n          if (typeof result === 'string') {\n            return getTransport(result, undefined);\n          } else {\n            return getTransport(result.dsn, result.release);\n          }\n        })\n        .filter((t): t is Transport => !!t);\n\n      // If we have no transports to send to, use the fallback transport\n      if (transports.length === 0) {\n        transports.push(fallbackTransport);\n      }\n\n      const results = await Promise.all(transports.map(transport => transport.send(envelope)));\n\n      return results[0];\n    }\n\n    async function flush(timeout: number | undefined): Promise<boolean> {\n      const allTransports = [...Object.keys(otherTransports).map(dsn => otherTransports[dsn]), fallbackTransport];\n      const results = await Promise.all(allTransports.map(transport => transport.flush(timeout)));\n      return results.every(r => r);\n    }\n\n    return {\n      send,\n      flush,\n    };\n  };\n}\n","import type { MetricInstance } from '@sentry/types';\nimport { COUNTER_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, GAUGE_METRIC_TYPE, SET_METRIC_TYPE } from './constants';\nimport { simpleHash } from './utils';\n\n/**\n * A metric instance representing a counter.\n */\nexport class CounterMetric implements MetricInstance {\n  public constructor(private _value: number) {}\n\n  /** @inheritDoc */\n  public get weight(): number {\n    return 1;\n  }\n\n  /** @inheritdoc */\n  public add(value: number): void {\n    this._value += value;\n  }\n\n  /** @inheritdoc */\n  public toString(): string {\n    return `${this._value}`;\n  }\n}\n\n/**\n * A metric instance representing a gauge.\n */\nexport class GaugeMetric implements MetricInstance {\n  private _last: number;\n  private _min: number;\n  private _max: number;\n  private _sum: number;\n  private _count: number;\n\n  public constructor(value: number) {\n    this._last = value;\n    this._min = value;\n    this._max = value;\n    this._sum = value;\n    this._count = 1;\n  }\n\n  /** @inheritDoc */\n  public get weight(): number {\n    return 5;\n  }\n\n  /** @inheritdoc */\n  public add(value: number): void {\n    this._last = value;\n    if (value < this._min) {\n      this._min = value;\n    }\n    if (value > this._max) {\n      this._max = value;\n    }\n    this._sum += value;\n    this._count++;\n  }\n\n  /** @inheritdoc */\n  public toString(): string {\n    return `${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`;\n  }\n}\n\n/**\n * A metric instance representing a distribution.\n */\nexport class DistributionMetric implements MetricInstance {\n  private _value: number[];\n\n  public constructor(first: number) {\n    this._value = [first];\n  }\n\n  /** @inheritDoc */\n  public get weight(): number {\n    return this._value.length;\n  }\n\n  /** @inheritdoc */\n  public add(value: number): void {\n    this._value.push(value);\n  }\n\n  /** @inheritdoc */\n  public toString(): string {\n    return this._value.join(':');\n  }\n}\n\n/**\n * A metric instance representing a set.\n */\nexport class SetMetric implements MetricInstance {\n  private _value: Set<number | string>;\n\n  public constructor(public first: number | string) {\n    this._value = new Set([first]);\n  }\n\n  /** @inheritDoc */\n  public get weight(): number {\n    return this._value.size;\n  }\n\n  /** @inheritdoc */\n  public add(value: number | string): void {\n    this._value.add(value);\n  }\n\n  /** @inheritdoc */\n  public toString(): string {\n    return Array.from(this._value)\n      .map(val => (typeof val === 'string' ? simpleHash(val) : val))\n      .join(':');\n  }\n}\n\nexport const METRIC_MAP = {\n  [COUNTER_METRIC_TYPE]: CounterMetric,\n  [GAUGE_METRIC_TYPE]: GaugeMetric,\n  [DISTRIBUTION_METRIC_TYPE]: DistributionMetric,\n  [SET_METRIC_TYPE]: SetMetric,\n};\n","import type {\n  Client,\n  ClientOptions,\n  MeasurementUnit,\n  MetricBucketItem,\n  MetricsAggregator,\n  Primitive,\n} from '@sentry/types';\nimport { timestampInSeconds } from '@sentry/utils';\nimport { DEFAULT_BROWSER_FLUSH_INTERVAL, NAME_AND_TAG_KEY_NORMALIZATION_REGEX } from './constants';\nimport { METRIC_MAP } from './instance';\nimport type { MetricBucket, MetricType } from './types';\nimport { getBucketKey, sanitizeTags } from './utils';\n\n/**\n * A simple metrics aggregator that aggregates metrics in memory and flushes them periodically.\n * Default flush interval is 5 seconds.\n *\n * @experimental This API is experimental and might change in the future.\n */\nexport class BrowserMetricsAggregator implements MetricsAggregator {\n  // TODO(@anonrig): Use FinalizationRegistry to have a proper way of flushing the buckets\n  // when the aggregator is garbage collected.\n  // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n  private _buckets: MetricBucket;\n  private readonly _interval: ReturnType<typeof setInterval>;\n\n  public constructor(private readonly _client: Client<ClientOptions>) {\n    this._buckets = new Map();\n    this._interval = setInterval(() => this.flush(), DEFAULT_BROWSER_FLUSH_INTERVAL);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public add(\n    metricType: MetricType,\n    unsanitizedName: string,\n    value: number | string,\n    unit: MeasurementUnit | undefined = 'none',\n    unsanitizedTags: Record<string, Primitive> | undefined = {},\n    maybeFloatTimestamp: number | undefined = timestampInSeconds(),\n  ): void {\n    const timestamp = Math.floor(maybeFloatTimestamp);\n    const name = unsanitizedName.replace(NAME_AND_TAG_KEY_NORMALIZATION_REGEX, '_');\n    const tags = sanitizeTags(unsanitizedTags);\n\n    const bucketKey = getBucketKey(metricType, name, unit, tags);\n    const bucketItem: MetricBucketItem | undefined = this._buckets.get(bucketKey);\n    if (bucketItem) {\n      bucketItem.metric.add(value);\n      // TODO(abhi): Do we need this check?\n      if (bucketItem.timestamp < timestamp) {\n        bucketItem.timestamp = timestamp;\n      }\n    } else {\n      this._buckets.set(bucketKey, {\n        // @ts-expect-error we don't need to narrow down the type of value here, saves bundle size.\n        metric: new METRIC_MAP[metricType](value),\n        timestamp,\n        metricType,\n        name,\n        unit,\n        tags,\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public flush(): void {\n    // short circuit if buckets are empty.\n    if (this._buckets.size === 0) {\n      return;\n    }\n    if (this._client.captureAggregateMetrics) {\n      // TODO(@anonrig): Use Object.values() when we support ES6+\n      const metricBuckets = Array.from(this._buckets).map(([, bucketItem]) => bucketItem);\n      this._client.captureAggregateMetrics(metricBuckets);\n    }\n    this._buckets.clear();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(): void {\n    clearInterval(this._interval);\n    this.flush();\n  }\n}\n","import type { Client, ClientOptions, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport type { BaseClient } from '../baseclient';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\nimport { BrowserMetricsAggregator } from './browser-aggregator';\n\nconst INTEGRATION_NAME = 'MetricsAggregator';\n\nconst _metricsAggregatorIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client: BaseClient<ClientOptions>) {\n      client.metricsAggregator = new BrowserMetricsAggregator(client);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const metricsAggregatorIntegration = defineIntegration(_metricsAggregatorIntegration);\n\n/**\n * Enables Sentry metrics monitoring.\n *\n * @experimental This API is experimental and might having breaking changes in the future.\n * @deprecated Use `metricsAggegratorIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const MetricsAggregator = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  metricsAggregatorIntegration,\n) as IntegrationClass<Integration & { setup: (client: Client) => void }>;\n","import type { ClientOptions, MeasurementUnit, Primitive } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport type { BaseClient } from '../baseclient';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getClient, getCurrentScope } from '../exports';\nimport { spanToJSON } from '../utils/spanUtils';\nimport { COUNTER_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, GAUGE_METRIC_TYPE, SET_METRIC_TYPE } from './constants';\nimport { MetricsAggregator, metricsAggregatorIntegration } from './integration';\nimport type { MetricType } from './types';\n\ninterface MetricData {\n  unit?: MeasurementUnit;\n  tags?: Record<string, Primitive>;\n  timestamp?: number;\n}\n\nfunction addToMetricsAggregator(\n  metricType: MetricType,\n  name: string,\n  value: number | string,\n  data: MetricData | undefined = {},\n): void {\n  const client = getClient<BaseClient<ClientOptions>>();\n  const scope = getCurrentScope();\n  if (client) {\n    if (!client.metricsAggregator) {\n      DEBUG_BUILD &&\n        logger.warn('No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs');\n      return;\n    }\n    const { unit, tags, timestamp } = data;\n    const { release, environment } = client.getOptions();\n    // eslint-disable-next-line deprecation/deprecation\n    const transaction = scope.getTransaction();\n    const metricTags: Record<string, string> = {};\n    if (release) {\n      metricTags.release = release;\n    }\n    if (environment) {\n      metricTags.environment = environment;\n    }\n    if (transaction) {\n      metricTags.transaction = spanToJSON(transaction).description || '';\n    }\n\n    DEBUG_BUILD && logger.log(`Adding value of ${value} to ${metricType} metric ${name}`);\n    client.metricsAggregator.add(metricType, name, value, unit, { ...metricTags, ...tags }, timestamp);\n  }\n}\n\n/**\n * Adds a value to a counter metric\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nexport function increment(name: string, value: number = 1, data?: MetricData): void {\n  addToMetricsAggregator(COUNTER_METRIC_TYPE, name, value, data);\n}\n\n/**\n * Adds a value to a distribution metric\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nexport function distribution(name: string, value: number, data?: MetricData): void {\n  addToMetricsAggregator(DISTRIBUTION_METRIC_TYPE, name, value, data);\n}\n\n/**\n * Adds a value to a set metric. Value must be a string or integer.\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nexport function set(name: string, value: number | string, data?: MetricData): void {\n  addToMetricsAggregator(SET_METRIC_TYPE, name, value, data);\n}\n\n/**\n * Adds a value to a gauge metric\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nexport function gauge(name: string, value: number, data?: MetricData): void {\n  addToMetricsAggregator(GAUGE_METRIC_TYPE, name, value, data);\n}\n\nexport const metrics = {\n  increment,\n  distribution,\n  set,\n  gauge,\n  /** @deprecated Use `metrics.metricsAggregratorIntegration()` instead. */\n  // eslint-disable-next-line deprecation/deprecation\n  MetricsAggregator,\n  metricsAggregatorIntegration,\n};\n","import type { ParameterizedString } from '@sentry/types';\n\n/**\n * Tagged template function which returns paramaterized representation of the message\n * For example: parameterize`This is a log statement with ${x} and ${y} params`, would return:\n * \"__sentry_template_string__\": 'This is a log statement with %s and %s params',\n * \"__sentry_template_values__\": ['first', 'second']\n * @param strings An array of string values splitted between expressions\n * @param values Expressions extracted from template string\n * @returns String with template information in __sentry_template_string__ and __sentry_template_values__ properties\n */\nexport function parameterize(strings: TemplateStringsArray, ...values: string[]): ParameterizedString {\n  const formatted = new String(String.raw(strings, ...values)) as ParameterizedString;\n  formatted.__sentry_template_string__ = strings.join('\\x00').replace(/%/g, '%%').replace(/\\0/g, '%s');\n  formatted.__sentry_template_values__ = values;\n  return formatted;\n}\n","import type { Client, ClientOptions } from '@sentry/types';\nimport { consoleSandbox, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { getCurrentScope } from './exports';\nimport { getCurrentHub } from './hub';\n\n/** A class object that can instantiate Client objects. */\nexport type ClientClass<F extends Client, O extends ClientOptions> = new (options: O) => F;\n\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<F extends Client, O extends ClientOptions>(\n  clientClass: ClientClass<F, O>,\n  options: O,\n): void {\n  if (options.debug === true) {\n    if (DEBUG_BUILD) {\n      logger.enable();\n    } else {\n      // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n      consoleSandbox(() => {\n        // eslint-disable-next-line no-console\n        console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n      });\n    }\n  }\n  const scope = getCurrentScope();\n  scope.update(options.initialScope);\n\n  const client = new clientClass(options);\n  setCurrentClient(client);\n  initializeClient(client);\n}\n\n/**\n * Make the given client the current client.\n */\nexport function setCurrentClient(client: Client): void {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  // eslint-disable-next-line deprecation/deprecation\n  const top = hub.getStackTop();\n  top.client = client;\n  top.scope.setClient(client);\n}\n\n/**\n * Initialize the client for the current scope.\n * Make sure to call this after `setCurrentClient()`.\n */\nfunction initializeClient(client: Client): void {\n  if (client.init) {\n    client.init();\n    // TODO v8: Remove this fallback\n    // eslint-disable-next-line deprecation/deprecation\n  } else if (client.setupIntegrations) {\n    // eslint-disable-next-line deprecation/deprecation\n    client.setupIntegrations();\n  }\n}\n","import type { MeasurementUnit } from '@sentry/types';\n\nimport { getActiveTransaction } from './utils';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nexport function setMeasurement(name: string, value: number, unit: MeasurementUnit): void {\n  // eslint-disable-next-line deprecation/deprecation\n  const transaction = getActiveTransaction();\n  if (transaction) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setMeasurement(name, value, unit);\n  }\n}\n","import { captureException, withScope } from '@sentry/core';\nimport type { DsnLike, Mechanism, WrappedFunction } from '@sentry/types';\nimport {\n  GLOBAL_OBJ,\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  addNonEnumerableProperty,\n  getOriginalFunction,\n  markFunctionWrapped,\n} from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n  // onerror should trigger before setTimeout\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\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. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(\n  fn: WrappedFunction,\n  options: {\n    mechanism?: Mechanism;\n  } = {},\n  before?: WrappedFunction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n  // for future readers what this does is wrap a function and then create\n  // a bi-directional wrapping between them.\n  //\n  // example: wrapped = wrap(original);\n  //  original.__sentry_wrapped__ -> wrapped\n  //  wrapped.__sentry_original__ -> original\n\n  if (typeof fn !== 'function') {\n    return fn;\n  }\n\n  try {\n    // if we're dealing with a function that was previously wrapped, return\n    // the original wrapper.\n    const wrapper = fn.__sentry_wrapped__;\n    if (wrapper) {\n      return wrapper;\n    }\n\n    // We don't wanna wrap it twice\n    if (getOriginalFunction(fn)) {\n      return fn;\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\n  /* eslint-disable prefer-rest-params */\n  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n  const sentryWrapped: WrappedFunction = function (this: unknown): void {\n    const args = Array.prototype.slice.call(arguments);\n\n    try {\n      if (before && typeof before === 'function') {\n        before.apply(this, arguments);\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      const wrappedArguments = args.map((arg: any) => wrap(arg, options));\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    } catch (ex) {\n      ignoreNextOnError();\n\n      withScope(scope => {\n        scope.addEventProcessor(event => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, undefined, undefined);\n            addExceptionMechanism(event, options.mechanism);\n          }\n\n          event.extra = {\n            ...event.extra,\n            arguments: args,\n          };\n\n          return event;\n        });\n\n        captureException(ex);\n      });\n\n      throw ex;\n    }\n  };\n  /* eslint-enable prefer-rest-params */\n\n  // Accessing some objects may throw\n  // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch (_oO) {} // eslint-disable-line no-empty\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  markFunctionWrapped(sentryWrapped, fn);\n\n  addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') as PropertyDescriptor;\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get(): string {\n          return fn.name;\n        },\n      });\n    }\n    // eslint-disable-next-line no-empty\n  } catch (_oO) {}\n\n  return sentryWrapped;\n}\n\n/**\n * All properties the report dialog supports\n *\n * @deprecated This type will be removed in the next major version of the Sentry SDK. `showReportDialog` will still be around, however the `eventId` option will now be required.\n */\nexport interface ReportDialogOptions {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key: string]: any;\n  eventId?: string;\n  dsn?: DsnLike;\n  user?: {\n    email?: string;\n    name?: string;\n  };\n  lang?: string;\n  title?: string;\n  subtitle?: string;\n  subtitle2?: string;\n  labelName?: string;\n  labelEmail?: string;\n  labelComments?: string;\n  labelClose?: string;\n  labelSubmit?: string;\n  errorGeneric?: string;\n  errorFormEntry?: string;\n  successMessage?: string;\n  /** Callback after reportDialog showed up */\n  onLoad?(this: void): void;\n  /** Callback after reportDialog closed */\n  onClose?(this: void): void;\n}\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import { getClient } from '@sentry/core';\nimport type {\n  Event,\n  EventHint,\n  Exception,\n  ParameterizedString,\n  Severity,\n  SeverityLevel,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\nimport {\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  extractExceptionKeysForMessage,\n  isDOMError,\n  isDOMException,\n  isError,\n  isErrorEvent,\n  isEvent,\n  isParameterizedString,\n  isPlainObject,\n  normalizeToSize,\n  resolvedSyncPromise,\n} from '@sentry/utils';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n  // Get the frames first since Opera can lose the stack if we touch anything else first\n  const frames = parseStackFrames(stackParser, ex);\n\n  const exception: Exception = {\n    type: ex && ex.name,\n    value: extractMessage(ex),\n  };\n\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  if (exception.type === undefined && exception.value === '') {\n    exception.value = 'Unrecoverable error caught';\n  }\n\n  return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n  stackParser: StackParser,\n  exception: Record<string, unknown>,\n  syntheticException?: Error,\n  isUnhandledRejection?: boolean,\n): Event {\n  const client = getClient();\n  const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n  const event: Event = {\n    exception: {\n      values: [\n        {\n          type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n          value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n        },\n      ],\n    },\n    extra: {\n      __serialized__: normalizeToSize(exception, normalizeDepth),\n    },\n  };\n\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      // event.exception.values[0] has been set above\n      (event.exception as { values: Exception[] }).values[0].stacktrace = { frames };\n    }\n  }\n\n  return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromError(stackParser: StackParser, ex: Error): Event {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n}\n\n/** Parses stack frames from an error */\nexport function parseStackFrames(\n  stackParser: StackParser,\n  ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\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  const stacktrace = ex.stacktrace || ex.stack || '';\n\n  const popSize = getPopSize(ex);\n\n  try {\n    return stackParser(stacktrace, popSize);\n  } catch (e) {\n    // no-empty\n  }\n\n  return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n  if (ex) {\n    if (typeof ex.framesToPop === 'number') {\n      return ex.framesToPop;\n    }\n\n    if (reactMinifiedRegexp.test(ex.message)) {\n      return 1;\n    }\n  }\n\n  return 0;\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 */\nfunction extractMessage(ex: Error & { message: { error?: Error } }): string {\n  const 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\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): PromiseLike<Event> {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n  event.level = 'error';\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: ParameterizedString,\n  // eslint-disable-next-line deprecation/deprecation\n  level: Severity | SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): PromiseLike<Event> {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n  stackParser: StackParser,\n  exception: unknown,\n  syntheticException?: Error,\n  attachStacktrace?: boolean,\n  isUnhandledRejection?: boolean,\n): Event {\n  let event: Event;\n\n  if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n    // If it is an ErrorEvent with `error` property, extract it to get actual Error\n    const errorEvent = exception as ErrorEvent;\n    return eventFromError(stackParser, errorEvent.error as Error);\n  }\n\n  // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n  // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n  // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n  //\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n  // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n  if (isDOMError(exception) || isDOMException(exception as DOMException)) {\n    const domException = exception as DOMException;\n\n    if ('stack' in (exception as Error)) {\n      event = eventFromError(stackParser, exception as Error);\n    } else {\n      const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      addExceptionTypeValue(event, message);\n    }\n    if ('code' in domException) {\n      // eslint-disable-next-line deprecation/deprecation\n      event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n    }\n\n    return event;\n  }\n  if (isError(exception)) {\n    // we have a real Error object, do nothing\n    return eventFromError(stackParser, exception);\n  }\n  if (isPlainObject(exception) || isEvent(exception)) {\n    // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n    // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n    // group on any key/value change.\n    const objectException = exception as Record<string, unknown>;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    addExceptionMechanism(event, {\n      synthetic: true,\n    });\n    return event;\n  }\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(stackParser, exception as string, syntheticException, attachStacktrace);\n  addExceptionTypeValue(event, `${exception}`, undefined);\n  addExceptionMechanism(event, {\n    synthetic: true,\n  });\n\n  return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromString(\n  stackParser: StackParser,\n  message: ParameterizedString,\n  syntheticException?: Error,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {};\n\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: message, stacktrace: { frames } }],\n      };\n    }\n  }\n\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n  exception: Record<string, unknown>,\n  { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n  const keys = extractExceptionKeysForMessage(exception);\n  const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n\n  if (isEvent(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n  try {\n    const prototype: Prototype | null = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch (e) {\n    // ignore errors here\n  }\n}\n","import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\n\n/**\n * Creates an envelope from a user feedback.\n */\nexport function createUserFeedbackEnvelope(\n  feedback: UserFeedback,\n  {\n    metadata,\n    tunnel,\n    dsn,\n  }: {\n    metadata: SdkMetadata | undefined;\n    tunnel: string | undefined;\n    dsn: DsnComponents | undefined;\n  },\n): EventEnvelope {\n  const headers: EventEnvelope[0] = {\n    event_id: feedback.event_id,\n    sent_at: new Date().toISOString(),\n    ...(metadata &&\n      metadata.sdk && {\n        sdk: {\n          name: metadata.sdk.name,\n          version: metadata.sdk.version,\n        },\n      }),\n    ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n  };\n  const item = createUserFeedbackEnvelopeItem(feedback);\n\n  return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback: UserFeedback): UserFeedbackItem {\n  const feedbackHeaders: UserFeedbackItem[0] = {\n    type: 'user_report',\n  };\n  return [feedbackHeaders, feedback];\n}\n","import type { Scope } from '@sentry/core';\nimport { applySdkMetadata } from '@sentry/core';\nimport { BaseClient } from '@sentry/core';\nimport type {\n  BrowserClientProfilingOptions,\n  BrowserClientReplayOptions,\n  ClientOptions,\n  Event,\n  EventHint,\n  Options,\n  ParameterizedString,\n  Severity,\n  SeverityLevel,\n  UserFeedback,\n} from '@sentry/types';\nimport { createClientReportEnvelope, dsnToString, getSDKSource, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { eventFromException, eventFromMessage } from './eventbuilder';\nimport { WINDOW } from './helpers';\nimport type { BrowserTransportOptions } from './transports/types';\nimport { createUserFeedbackEnvelope } from './userfeedback';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\nexport type BrowserOptions = Options<BrowserTransportOptions> &\n  BrowserClientReplayOptions &\n  BrowserClientProfilingOptions;\n\n/**\n * Configuration options for the Sentry Browser SDK Client class\n * @see BrowserClient for more information.\n */\nexport type BrowserClientOptions = ClientOptions<BrowserTransportOptions> &\n  BrowserClientReplayOptions &\n  BrowserClientProfilingOptions;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class BrowserClient extends BaseClient<BrowserClientOptions> {\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: BrowserClientOptions) {\n    const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n    applySdkMetadata(options, 'browser', ['browser'], sdkSource);\n\n    super(options);\n\n    if (options.sendClientReports && WINDOW.document) {\n      WINDOW.document.addEventListener('visibilitychange', () => {\n        if (WINDOW.document.visibilityState === 'hidden') {\n          this._flushOutcomes();\n        }\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n    return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(\n    message: ParameterizedString,\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel = 'info',\n    hint?: EventHint,\n  ): PromiseLike<Event> {\n    return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * Sends user feedback to Sentry.\n   */\n  public captureUserFeedback(feedback: UserFeedback): void {\n    if (!this._isEnabled()) {\n      DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n      return;\n    }\n\n    const envelope = createUserFeedbackEnvelope(feedback, {\n      metadata: this.getSdkMetadata(),\n      dsn: this.getDsn(),\n      tunnel: this.getOptions().tunnel,\n    });\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event | null> {\n    event.platform = event.platform || 'javascript';\n    return super._prepareEvent(event, hint, scope);\n  }\n\n  /**\n   * Sends client reports as an envelope.\n   */\n  private _flushOutcomes(): void {\n    const outcomes = this._clearOutcomes();\n\n    if (outcomes.length === 0) {\n      DEBUG_BUILD && logger.log('No outcomes to send');\n      return;\n    }\n\n    // This is really the only place where we want to check for a DSN and only send outcomes then\n    if (!this._dsn) {\n      DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n  }\n}\n","import type { Options } from '@sentry/types';\nimport { SDK_VERSION } from '../version';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nexport function applySdkMetadata(options: Options, name: string, names = [name], source = 'npm'): void {\n  const metadata = options._metadata || {};\n\n  if (!metadata.sdk) {\n    metadata.sdk = {\n      name: `sentry.javascript.${name}`,\n      packages: names.map(name => ({\n        name: `${source}:@sentry/${name}`,\n        version: SDK_VERSION,\n      })),\n      version: SDK_VERSION,\n    };\n  }\n\n  options._metadata = metadata;\n}\n","import type { ClientReport, ClientReportEnvelope, ClientReportItem } from '@sentry/types';\n\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nexport function createClientReportEnvelope(\n  discarded_events: ClientReport['discarded_events'],\n  dsn?: string,\n  timestamp?: number,\n): ClientReportEnvelope {\n  const clientReportItem: ClientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events,\n    },\n  ];\n  return createEnvelope<ClientReportEnvelope>(dsn ? { dsn } : {}, [clientReportItem]);\n}\n","import { DEBUG_BUILD } from './debug-build';\nimport { logger } from './logger';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\ndeclare const EdgeRuntime: string | undefined;\n\nexport { supportsHistory } from './vendor/supportsHistory';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n  try {\n    new ErrorEvent('');\n    return true;\n  } catch (e) {\n    return false;\n  }\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(): boolean {\n  try {\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-expect-error It really needs 1 argument, not 0.\n    new DOMError('');\n    return true;\n  } catch (e) {\n    return false;\n  }\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(): boolean {\n  try {\n    new DOMException('');\n    return true;\n  } catch (e) {\n    return false;\n  }\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(): boolean {\n  if (!('fetch' in WINDOW)) {\n    return false;\n  }\n\n  try {\n    new Headers();\n    new Request('http://www.example.com');\n    new Response();\n    return true;\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: Function): boolean {\n  return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\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(): boolean {\n  if (typeof EdgeRuntime === 'string') {\n    return true;\n  }\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  // Fast path to avoid DOM I/O\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  if (isNativeFetch(WINDOW.fetch)) {\n    return true;\n  }\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  let result = false;\n  const doc = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (doc && typeof (doc.createElement as unknown) === 'function') {\n    try {\n      const 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    } catch (err) {\n      DEBUG_BUILD &&\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/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n  return 'ReportingObserver' in WINDOW;\n}\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(): boolean {\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\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  try {\n    new Request('_', {\n      referrerPolicy: 'origin' as ReferrerPolicy,\n    });\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n","import { isNativeFetch, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\nlet cachedFetchImpl: FetchImpl | undefined = undefined;\n\nexport type FetchImpl = typeof fetch;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n *   const p = f.apply(this, arguments);\n *\n *   p.then(function() {\n *     console.log('hi.');\n *   });\n *\n *   return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome:  Failed to fetch\n * Edge:    Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari:  resource blocked by content blocker\n */\nexport function getNativeFetchImplementation(): FetchImpl {\n  if (cachedFetchImpl) {\n    return cachedFetchImpl;\n  }\n\n  /* eslint-disable @typescript-eslint/unbound-method */\n\n  // Fast path to avoid DOM I/O\n  if (isNativeFetch(WINDOW.fetch)) {\n    return (cachedFetchImpl = WINDOW.fetch.bind(WINDOW));\n  }\n\n  const document = WINDOW.document;\n  let fetchImpl = WINDOW.fetch;\n  // eslint-disable-next-line deprecation/deprecation\n  if (document && typeof document.createElement === 'function') {\n    try {\n      const sandbox = document.createElement('iframe');\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow.fetch) {\n        fetchImpl = contentWindow.fetch;\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      DEBUG_BUILD && logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n    }\n  }\n\n  return (cachedFetchImpl = fetchImpl.bind(WINDOW));\n  /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/** Clears cached fetch impl */\nexport function clearCachedFetchImplementation(): void {\n  cachedFetchImpl = undefined;\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { rejectedSyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\nimport type { FetchImpl } from './utils';\nimport { clearCachedFetchImplementation, getNativeFetchImplementation } from './utils';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nexport function makeFetchTransport(\n  options: BrowserTransportOptions,\n  nativeFetch: FetchImpl = getNativeFetchImplementation(),\n): Transport {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n\n  function makeRequest(request: TransportRequest): PromiseLike<TransportMakeRequestResponse> {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n\n    const requestOptions: RequestInit = {\n      body: request.body,\n      method: 'POST',\n      referrerPolicy: 'origin',\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 60_000 && pendingCount < 15,\n      ...options.fetchOptions,\n    };\n\n    try {\n      return nativeFetch(options.url, requestOptions).then(response => {\n        pendingBodySize -= requestSize;\n        pendingCount--;\n        return {\n          statusCode: response.status,\n          headers: {\n            'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n            'retry-after': response.headers.get('Retry-After'),\n          },\n        };\n      });\n    } catch (e) {\n      clearCachedFetchImplementation();\n      pendingBodySize -= requestSize;\n      pendingCount--;\n      return rejectedSyncPromise(e);\n    }\n  }\n\n  return createTransport(options, makeRequest);\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { SyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\n\n/**\n * The DONE ready state for XmlHttpRequest\n *\n * Defining it here as a constant b/c XMLHttpRequest.DONE is not always defined\n * (e.g. during testing, it is `undefined`)\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState}\n */\nconst XHR_READYSTATE_DONE = 4;\n\n/**\n * Creates a Transport that uses the XMLHttpRequest API to send events to Sentry.\n */\nexport function makeXHRTransport(options: BrowserTransportOptions): Transport {\n  function makeRequest(request: TransportRequest): PromiseLike<TransportMakeRequestResponse> {\n    return new SyncPromise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n\n      xhr.onerror = reject;\n\n      xhr.onreadystatechange = (): void => {\n        if (xhr.readyState === XHR_READYSTATE_DONE) {\n          resolve({\n            statusCode: xhr.status,\n            headers: {\n              'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),\n              'retry-after': xhr.getResponseHeader('Retry-After'),\n            },\n          });\n        }\n      };\n\n      xhr.open('POST', options.url);\n\n      for (const header in options.headers) {\n        if (Object.prototype.hasOwnProperty.call(options.headers, header)) {\n          xhr.setRequestHeader(header, options.headers[header]);\n        }\n      }\n\n      xhr.send(request.body);\n    });\n  }\n\n  return createTransport(options, makeRequest);\n}\n","// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/types';\nimport { createStackParser } from '@sentry/utils';\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n  const frame: StackFrame = {\n    filename,\n    function: func,\n    in_app: true, // All browser frames are considered in_app\n  };\n\n  if (lineno !== undefined) {\n    frame.lineno = lineno;\n  }\n\n  if (colno !== undefined) {\n    frame.colno = colno;\n  }\n\n  return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n  /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nconst chrome: StackLineParserFn = line => {\n  const parts = chromeRegex.exec(line);\n\n  if (parts) {\n    const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]);\n\n      if (subMatch) {\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    }\n\n    // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n    // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n    return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n  }\n\n  return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chrome];\n\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.\nconst geckoREgex =\n  /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n  const parts = geckoREgex.exec(line);\n\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]);\n\n      if (subMatch) {\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    }\n\n    let filename = parts[3];\n    let func = parts[1] || UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n\n    return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n  }\n\n  return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n  const parts = winjsRegex.exec(line);\n\n  return parts\n    ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n    : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n  const parts = opera10Regex.exec(line);\n  return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n  / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n  const parts = opera11Regex.exec(line);\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n *   at function@url:row:col\n *   at function@url:row:col\n *   at function@url:row:col\n *\n * it produces something like:\n *\n *   function@url:row:col\n *   function@url:row:col\n *   function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n  const isSafariExtension = func.indexOf('safari-extension') !== -1;\n  const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n  return isSafariExtension || isSafariWebExtension\n    ? [\n        func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n        isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n      ]\n    : [func, filename];\n};\n","// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n// Copyright (c) 2010-2016 Google, Inc. http://angularjs.org\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport { getGlobalObject } from '../worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\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(): boolean {\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  /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const chrome = (WINDOW as any).chrome;\n  const isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n  /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n  const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n  return !isChromePackagedApp && hasHistoryApi;\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataHistory } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsHistory } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nlet lastHref: string | undefined;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addHistoryInstrumentationHandler(handler: (data: HandlerDataHistory) => void): void {\n  const type = 'history';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory(): void {\n  if (!supportsHistory()) {\n    return;\n  }\n\n  const oldOnPopState = WINDOW.onpopstate;\n  WINDOW.onpopstate = function (this: WindowEventHandlers, ...args: any[]): any {\n    const to = WINDOW.location.href;\n    // keep track of the current URL state, as we always receive only the updated state\n    const from = lastHref;\n    lastHref = to;\n    const handlerData: HandlerDataHistory = { from, to };\n    triggerHandlers('history', handlerData);\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      } catch (_oO) {\n        // no-empty\n      }\n    }\n  };\n\n  function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n    return function (this: History, ...args: any[]): void {\n      const url = args.length > 2 ? args[2] : undefined;\n      if (url) {\n        // coerce to string (this is what pushState does)\n        const from = lastHref;\n        const to = String(url);\n        // keep track of the current URL state, as we always receive only the updated state\n        lastHref = to;\n        const handlerData: HandlerDataHistory = { from, to };\n        triggerHandlers('history', handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  fill(WINDOW.history, 'pushState', historyReplacementFunction);\n  fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { ConsoleLevel, HandlerDataConsole } from '@sentry/types';\n\nimport { CONSOLE_LEVELS, originalConsoleMethods } from '../logger';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addConsoleInstrumentationHandler(handler: (data: HandlerDataConsole) => void): void {\n  const type = 'console';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole(): void {\n  if (!('console' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n    if (!(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args: any[]): void {\n        const handlerData: HandlerDataConsole = { args, level };\n        triggerHandlers('console', handlerData);\n\n        const log = originalConsoleMethods[level];\n        log && log.apply(GLOBAL_OBJ.console, args);\n      };\n    });\n  });\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataDom } from '@sentry/types';\n\nimport { uuid4 } from '../misc';\nimport { addNonEnumerableProperty, fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype SentryWrappedTarget = HTMLElement & { _sentryId?: string };\n\ntype AddEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n  __sentry_instrumentation_handlers__?: {\n    [key in 'click' | 'keypress']?: {\n      handler?: Function;\n      /** The number of custom listeners attached to this element */\n      refCount: number;\n    };\n  };\n};\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID: number | undefined;\nlet lastCapturedEventType: string | undefined;\nlet lastCapturedEventTargetId: string | undefined;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addClickKeypressInstrumentationHandler(handler: (data: HandlerDataDom) => void): void {\n  const type = 'dom';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nexport function instrumentDOM(): void {\n  if (!WINDOW.document) {\n    return;\n  }\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  const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n  WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\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((target: string) => {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const proto = (WINDOW as any)[target] && (WINDOW as any)[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\n    fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n      return function (\n        this: Element,\n        type: string,\n        listener: EventListenerOrEventListenerObject,\n        options?: boolean | AddEventListenerOptions,\n      ): AddEventListener {\n        if (type === 'click' || type == 'keypress') {\n          try {\n            const el = this as InstrumentedElement;\n            const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n            const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n\n            handlerForType.refCount++;\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\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n\n    fill(\n      proto,\n      'removeEventListener',\n      function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n        return function (\n          this: Element,\n          type: string,\n          listener: EventListenerOrEventListenerObject,\n          options?: boolean | EventListenerOptions,\n        ): () => void {\n          if (type === 'click' || type == 'keypress') {\n            try {\n              const el = this as InstrumentedElement;\n              const handlers = el.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n\n              if (handlerForType) {\n                handlerForType.refCount--;\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[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                }\n\n                // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                if (Object.keys(handlers).length === 0) {\n                  delete el.__sentry_instrumentation_handlers__;\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\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      },\n    );\n  });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event: Event): boolean {\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\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 (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) {\n      return false;\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\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 true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType: string, target: SentryWrappedTarget | null): boolean {\n  // We are only interested in filtering `keypress` events for now.\n  if (eventType !== 'keypress') {\n    return false;\n  }\n\n  if (!target || !target.tagName) {\n    return true;\n  }\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  return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n  handler: (data: HandlerDataDom) => void,\n  globalListener: boolean = false,\n): (event: Event) => void {\n  return (event: Event & { _sentryCaptured?: true }): void => {\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 || event['_sentryCaptured']) {\n      return;\n    }\n\n    const target = getEventTarget(event);\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n\n    // Mark event as \"seen\"\n    addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n    if (target && !target._sentryId) {\n      // Add UUID to event target so we can identify if\n      addNonEnumerableProperty(target, '_sentryId', uuid4());\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n    // If there is a last captured event, 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    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData: HandlerDataDom = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : undefined;\n    }\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 = WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = undefined;\n      lastCapturedEventType = undefined;\n    }, DEBOUNCE_DURATION);\n  };\n}\n\nfunction getEventTarget(event: Event): SentryWrappedTarget | null {\n  try {\n    return event.target as SentryWrappedTarget | null;\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    return null;\n  }\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, WrappedFunction } from '@sentry/types';\n\nimport { isString } from '../is';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addXhrInstrumentationHandler(handler: (data: HandlerDataXhr) => void): void {\n  const type = 'xhr';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nexport function instrumentXHR(): void {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (!(WINDOW as any).XMLHttpRequest) {\n    return;\n  }\n\n  const xhrproto = XMLHttpRequest.prototype;\n\n  fill(xhrproto, 'open', function (originalOpen: () => void): () => void {\n    return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n      const startTimestamp = Date.now();\n\n      // open() should always be called with two or more arguments\n      // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n      const method = isString(args[0]) ? args[0].toUpperCase() : undefined;\n      const url = parseUrl(args[1]);\n\n      if (!method || !url) {\n        return originalOpen.apply(this, args);\n      }\n\n      this[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {},\n      };\n\n      // if Sentry key appears in URL, don't capture it as a request\n      if (method === 'POST' && url.match(/sentry_key/)) {\n        this.__sentry_own_request__ = true;\n      }\n\n      const onreadystatechangeHandler: () => void = () => {\n        // For whatever reason, this is not the same instance here as from the outer method\n        const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n        if (!xhrInfo) {\n          return;\n        }\n\n        if (this.readyState === 4) {\n          try {\n            // touching statusCode in some platforms throws\n            // an exception\n            xhrInfo.status_code = this.status;\n          } catch (e) {\n            /* do nothing */\n          }\n\n          const handlerData: HandlerDataXhr = {\n            args: [method, url],\n            endTimestamp: Date.now(),\n            startTimestamp,\n            xhr: this,\n          };\n          triggerHandlers('xhr', handlerData);\n        }\n      };\n\n      if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n        fill(this, 'onreadystatechange', function (original: WrappedFunction): Function {\n          return function (this: SentryWrappedXMLHttpRequest, ...readyStateArgs: any[]): void {\n            onreadystatechangeHandler();\n            return original.apply(this, readyStateArgs);\n          };\n        });\n      } else {\n        this.addEventListener('readystatechange', onreadystatechangeHandler);\n      }\n\n      // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n      // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n      // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n      fill(this, 'setRequestHeader', function (original: WrappedFunction): Function {\n        return function (this: SentryWrappedXMLHttpRequest, ...setRequestHeaderArgs: unknown[]): void {\n          const [header, value] = setRequestHeaderArgs;\n\n          const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo && isString(header) && isString(value)) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n\n          return original.apply(this, setRequestHeaderArgs);\n        };\n      });\n\n      return originalOpen.apply(this, args);\n    };\n  });\n\n  fill(xhrproto, 'send', function (originalSend: () => void): () => void {\n    return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n      const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n\n      if (!sentryXhrData) {\n        return originalSend.apply(this, args);\n      }\n\n      if (args[0] !== undefined) {\n        sentryXhrData.body = args[0];\n      }\n\n      const handlerData: HandlerDataXhr = {\n        args: [sentryXhrData.method, sentryXhrData.url],\n        startTimestamp: Date.now(),\n        xhr: this,\n      };\n      triggerHandlers('xhr', handlerData);\n\n      return originalSend.apply(this, args);\n    };\n  });\n}\n\nfunction parseUrl(url: string | unknown): string | undefined {\n  if (isString(url)) {\n    return url;\n  }\n\n  try {\n    // url can be a string or URL\n    // but since URL is not available in IE11, we do not check for it,\n    // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n    // If that fails, we just return undefined\n    return (url as URL).toString();\n  } catch {} // eslint-disable-line no-empty\n\n  return undefined;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataFetch } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsNativeFetch } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addFetchInstrumentationHandler(handler: (data: HandlerDataFetch) => void): void {\n  const type = 'fetch';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentFetch);\n}\n\nfunction instrumentFetch(): void {\n  if (!supportsNativeFetch()) {\n    return;\n  }\n\n  fill(GLOBAL_OBJ, 'fetch', function (originalFetch: () => void): () => void {\n    return function (...args: any[]): void {\n      const { method, url } = parseFetchArgs(args);\n\n      const handlerData: HandlerDataFetch = {\n        args,\n        fetchData: {\n          method,\n          url,\n        },\n        startTimestamp: Date.now(),\n      };\n\n      triggerHandlers('fetch', {\n        ...handlerData,\n      });\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalFetch.apply(GLOBAL_OBJ, args).then(\n        (response: Response) => {\n          const finishedHandlerData: HandlerDataFetch = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            response,\n          };\n\n          triggerHandlers('fetch', finishedHandlerData);\n          return response;\n        },\n        (error: Error) => {\n          const erroredHandlerData: HandlerDataFetch = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            error,\n          };\n\n          triggerHandlers('fetch', erroredHandlerData);\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}\n\nfunction hasProp<T extends string>(obj: unknown, prop: T): obj is Record<string, string> {\n  return !!obj && typeof obj === 'object' && !!(obj as Record<string, string>)[prop];\n}\n\nfunction getUrlFromResource(resource: FetchResource): string {\n  if (typeof resource === 'string') {\n    return resource;\n  }\n\n  if (!resource) {\n    return '';\n  }\n\n  if (hasProp(resource, 'url')) {\n    return resource.url;\n  }\n\n  if (resource.toString) {\n    return resource.toString();\n  }\n\n  return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nexport function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: string } {\n  if (fetchArgs.length === 0) {\n    return { method: 'GET', url: '' };\n  }\n\n  if (fetchArgs.length === 2) {\n    const [url, options] = fetchArgs as [FetchResource, object];\n\n    return {\n      url: getUrlFromResource(url),\n      method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n    };\n  }\n\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg as FetchResource),\n    method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n  };\n}\n","/* eslint-disable deprecation/deprecation */\nimport type { Severity, SeverityLevel } from '@sentry/types';\n\n// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nexport const validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a member of the deprecated {@link Severity} enum.\n *\n * @deprecated `severityFromString` is deprecated. Please use `severityLevelFromString` instead.\n *\n * @param level String representation of Severity\n * @returns Severity\n */\nexport function severityFromString(level: Severity | SeverityLevel | string): Severity {\n  return severityLevelFromString(level) as Severity;\n}\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nexport function severityLevelFromString(level: SeverityLevel | string): SeverityLevel {\n  return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') as SeverityLevel;\n}\n","/* eslint-disable max-lines */\nimport { addBreadcrumb, convertIntegrationFnToClass, defineIntegration, getClient } from '@sentry/core';\nimport type {\n  Client,\n  Event as SentryEvent,\n  HandlerDataConsole,\n  HandlerDataDom,\n  HandlerDataFetch,\n  HandlerDataHistory,\n  HandlerDataXhr,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n} from '@sentry/types';\nimport type {\n  Breadcrumb,\n  FetchBreadcrumbData,\n  FetchBreadcrumbHint,\n  XhrBreadcrumbData,\n  XhrBreadcrumbHint,\n} from '@sentry/types/build/types/breadcrumb';\nimport {\n  SENTRY_XHR_DATA_KEY,\n  addClickKeypressInstrumentationHandler,\n  addConsoleInstrumentationHandler,\n  addFetchInstrumentationHandler,\n  addHistoryInstrumentationHandler,\n  addXhrInstrumentationHandler,\n  getComponentName,\n  getEventDescription,\n  htmlTreeAsString,\n  logger,\n  parseUrl,\n  safeJoin,\n  severityLevelFromString,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\ninterface BreadcrumbsOptions {\n  console: boolean;\n  dom:\n    | boolean\n    | {\n        serializeAttribute?: string | string[];\n        maxStringLength?: number;\n      };\n  fetch: boolean;\n  history: boolean;\n  sentry: boolean;\n  xhr: boolean;\n}\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options: Partial<BreadcrumbsOptions> = {}) => {\n  const _options = {\n    console: true,\n    dom: true,\n    fetch: true,\n    history: true,\n    sentry: true,\n    xhr: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      if (_options.console) {\n        addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n      }\n      if (_options.dom) {\n        addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n      }\n      if (_options.xhr) {\n        addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n      }\n      if (_options.fetch) {\n        addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n      }\n      if (_options.history) {\n        addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n      }\n      if (_options.sentry && client.on) {\n        client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Default Breadcrumbs instrumentations\n *\n * @deprecated Use `breadcrumbsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Breadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, breadcrumbsIntegration) as IntegrationClass<\n  Integration & { setup: (client: Client) => void }\n> & {\n  new (\n    options?: Partial<{\n      console: boolean;\n      dom:\n        | boolean\n        | {\n            serializeAttribute?: string | string[];\n            maxStringLength?: number;\n          };\n      fetch: boolean;\n      history: boolean;\n      sentry: boolean;\n      xhr: boolean;\n    }>,\n  ): Integration;\n};\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client: Client): (event: SentryEvent) => void {\n  return function addSentryBreadcrumb(event: SentryEvent): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    addBreadcrumb(\n      {\n        category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n        event_id: event.event_id,\n        level: event.level,\n        message: getEventDescription(event),\n      },\n      {\n        event,\n      },\n    );\n  };\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n  client: Client,\n  dom: BreadcrumbsOptions['dom'],\n): (handlerData: HandlerDataDom) => void {\n  return function _innerDomBreadcrumb(handlerData: HandlerDataDom): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let target;\n    let componentName;\n    let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n    let maxStringLength =\n      typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n        );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n\n    if (typeof keyAttrs === 'string') {\n      keyAttrs = [keyAttrs];\n    }\n\n    // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n    try {\n      const event = handlerData.event as Event | Node;\n      const element = _isEvent(event) ? event.target : event;\n\n      target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n      componentName = getComponentName(element);\n    } catch (e) {\n      target = '<unknown>';\n    }\n\n    if (target.length === 0) {\n      return;\n    }\n\n    const breadcrumb: Breadcrumb = {\n      category: `ui.${handlerData.name}`,\n      message: target,\n    };\n\n    if (componentName) {\n      breadcrumb.data = { 'ui.component_name': componentName };\n    }\n\n    addBreadcrumb(breadcrumb, {\n      event: handlerData.event,\n      name: handlerData.name,\n      global: handlerData.global,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client: Client): (handlerData: HandlerDataConsole) => void {\n  return function _consoleBreadcrumb(handlerData: HandlerDataConsole): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: 'console',\n      data: {\n        arguments: handlerData.args,\n        logger: 'console',\n      },\n      level: severityLevelFromString(handlerData.level),\n      message: safeJoin(handlerData.args, ' '),\n    };\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      } else {\n        // Don't capture a breadcrumb for passed assertions\n        return;\n      }\n    }\n\n    addBreadcrumb(breadcrumb, {\n      input: handlerData.args,\n      level: handlerData.level,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client: Client): (handlerData: HandlerDataXhr) => void {\n  return function _xhrBreadcrumb(handlerData: HandlerDataXhr): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n    // We only capture complete, non-sentry requests\n    if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n      return;\n    }\n\n    const { method, url, status_code, body } = sentryXhrData;\n\n    const data: XhrBreadcrumbData = {\n      method,\n      url,\n      status_code,\n    };\n\n    const hint: XhrBreadcrumbHint = {\n      xhr: handlerData.xhr,\n      input: body,\n      startTimestamp,\n      endTimestamp,\n    };\n\n    addBreadcrumb(\n      {\n        category: 'xhr',\n        data,\n        type: 'http',\n      },\n      hint,\n    );\n  };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client: Client): (handlerData: HandlerDataFetch) => void {\n  return function _fetchBreadcrumb(handlerData: HandlerDataFetch): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    // We only capture complete fetch requests\n    if (!endTimestamp) {\n      return;\n    }\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\n    if (handlerData.error) {\n      const data: FetchBreadcrumbData = handlerData.fetchData;\n      const hint: FetchBreadcrumbHint = {\n        data: handlerData.error,\n        input: handlerData.args,\n        startTimestamp,\n        endTimestamp,\n      };\n\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          level: 'error',\n          type: 'http',\n        },\n        hint,\n      );\n    } else {\n      const response = handlerData.response as Response | undefined;\n      const data: FetchBreadcrumbData = {\n        ...handlerData.fetchData,\n        status_code: response && response.status,\n      };\n      const hint: FetchBreadcrumbHint = {\n        input: handlerData.args,\n        response,\n        startTimestamp,\n        endTimestamp,\n      };\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          type: 'http',\n        },\n        hint,\n      );\n    }\n  };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client: Client): (handlerData: HandlerDataHistory) => void {\n  return function _historyBreadcrumb(handlerData: HandlerDataHistory): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let from: string | undefined = handlerData.from;\n    let to: string | undefined = handlerData.to;\n    const parsedLoc = parseUrl(WINDOW.location.href);\n    let parsedFrom = from ? parseUrl(from) : undefined;\n    const parsedTo = parseUrl(to);\n\n    // Initial pushState doesn't provide `from` information\n    if (!parsedFrom || !parsedFrom.path) {\n      parsedFrom = parsedLoc;\n    }\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\n    addBreadcrumb({\n      category: 'navigation',\n      data: {\n        from,\n        to,\n      },\n    });\n  };\n}\n\nfunction _isEvent(event: unknown): event is Event {\n  return !!event && !!(event as Record<string, unknown>).target;\n}\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Exception, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n  let previousEvent: Event | undefined;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(currentEvent) {\n      // We want to ignore any non-error type events, e.g. transactions or replays\n      // These should never be deduped, and also not be compared against as _previousEvent.\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n\n      // Juuust in case something goes wrong\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n          return null;\n        }\n      } catch (_oO) {} // eslint-disable-line no-empty\n\n      return (previousEvent = currentEvent);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/**\n * Deduplication filter.\n * @deprecated Use `dedupeIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Dedupe = convertIntegrationFnToClass(INTEGRATION_NAME, dedupeIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event) => Event }\n>;\n\nfunction _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFrames = _getFramesFromEvent(currentEvent);\n  let previousFrames = _getFramesFromEvent(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames as StackFrame[];\n  previousFrames = previousFrames as StackFrame[];\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    const frameA = previousFrames[i];\n    const frameB = currentFrames[i];\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint as string[];\n  previousFingerprint = previousFingerprint as string[];\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch (_oO) {\n    return false;\n  }\n}\n\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n  return event.exception && event.exception.values && event.exception.values[0];\n}\n\nfunction _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n  const exception = event.exception;\n\n  if (exception) {\n    try {\n      // @ts-expect-error Object could be undefined\n      return exception.values[0].stacktrace.frames;\n    } catch (_oO) {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { captureEvent, convertIntegrationFnToClass, defineIntegration, getClient } from '@sentry/core';\nimport type {\n  Client,\n  Event,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  Primitive,\n  StackParser,\n} from '@sentry/types';\nimport {\n  addGlobalErrorInstrumentationHandler,\n  addGlobalUnhandledRejectionInstrumentationHandler,\n  getLocationHref,\n  isErrorEvent,\n  isPrimitive,\n  isString,\n  logger,\n} from '@sentry/utils';\n\nimport type { BrowserClient } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n\ntype GlobalHandlersIntegrationsOptionKeys = 'onerror' | 'onunhandledrejection';\n\ntype GlobalHandlersIntegrations = Record<GlobalHandlersIntegrationsOptionKeys, boolean>;\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options: Partial<GlobalHandlersIntegrations> = {}) => {\n  const _options = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      Error.stackTraceLimit = 50;\n    },\n    setup(client) {\n      if (_options.onerror) {\n        _installGlobalOnErrorHandler(client);\n        globalHandlerLog('onerror');\n      }\n      if (_options.onunhandledrejection) {\n        _installGlobalOnUnhandledRejectionHandler(client);\n        globalHandlerLog('onunhandledrejection');\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\n/**\n * Global handlers.\n * @deprecated Use `globalHandlersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const GlobalHandlers = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  globalHandlersIntegration,\n) as IntegrationClass<Integration & { setup: (client: Client) => void }> & {\n  new (options?: Partial<GlobalHandlersIntegrations>): Integration;\n};\n\nfunction _installGlobalOnErrorHandler(client: Client): void {\n  addGlobalErrorInstrumentationHandler(data => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const { msg, url, line, column, error } = data;\n\n    const event =\n      error === undefined && isString(msg)\n        ? _eventFromIncompleteOnError(msg, url, line, column)\n        : _enhanceEventWithInitialFrame(\n            eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n            url,\n            line,\n            column,\n          );\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onerror',\n      },\n    });\n  });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client: Client): void {\n  addGlobalUnhandledRejectionInstrumentationHandler(e => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const error = _getUnhandledRejectionError(e as unknown);\n\n    const event = isPrimitive(error)\n      ? _eventFromRejectionWithPrimitive(error)\n      : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onunhandledrejection',\n      },\n    });\n  });\n}\n\nfunction _getUnhandledRejectionError(error: unknown): unknown {\n  if (isPrimitive(error)) {\n    return error;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const e = error as any;\n\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      return e.reason;\n    }\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      return e.detail.reason;\n    }\n  } catch {} // eslint-disable-line no-empty\n\n  return error;\n}\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 */\nfunction _eventFromRejectionWithPrimitive(reason: Primitive): Event {\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\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\nfunction _eventFromIncompleteOnError(msg: any, url: any, line: any, column: any): Event {\n  const ERROR_TYPES_RE =\n    /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n\n  // If 'message' is ErrorEvent, get real message from inside\n  let message = isErrorEvent(msg) ? msg.message : msg;\n  let name = 'Error';\n\n  const groups = message.match(ERROR_TYPES_RE);\n  if (groups) {\n    name = groups[1];\n    message = groups[2];\n  }\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: name,\n          value: message,\n        },\n      ],\n    },\n  };\n\n  return _enhanceEventWithInitialFrame(event, url, line, column);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event: Event, url: any, line: any, column: any): Event {\n  // event.exception\n  const e = (event.exception = event.exception || {});\n  // event.exception.values\n  const ev = (e.values = e.values || []);\n  // event.exception.values[0]\n  const ev0 = (ev[0] = ev[0] || {});\n  // event.exception.values[0].stacktrace\n  const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n  // event.exception.values[0].stacktrace.frames\n  const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n  const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n  const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n  const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n  // event.exception.values[0].stacktrace.frames\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      filename,\n      function: '?',\n      in_app: true,\n      lineno,\n    });\n  }\n\n  return event;\n}\n\nfunction globalHandlerLog(type: string): void {\n  DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions(): { stackParser: StackParser; attachStacktrace?: boolean } {\n  const client = getClient<BrowserClient>();\n  const options = (client && client.getOptions()) || {\n    stackParser: () => [],\n    attachStacktrace: false,\n  };\n  return options;\n}\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\n\nimport { WINDOW } from '../helpers';\n\nconst INTEGRATION_NAME = 'HttpContext';\n\nconst _httpContextIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    preprocessEvent(event) {\n      // if none of the information we want exists, don't bother\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n\n      // grab as much info as exists and add it to the event\n      const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n      const { referrer } = WINDOW.document || {};\n      const { userAgent } = WINDOW.navigator || {};\n\n      const headers = {\n        ...(event.request && event.request.headers),\n        ...(referrer && { Referer: referrer }),\n        ...(userAgent && { 'User-Agent': userAgent }),\n      };\n      const request = { ...event.request, ...(url && { url }), headers };\n\n      event.request = request;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const httpContextIntegration = defineIntegration(_httpContextIntegration);\n\n/**\n * HttpContext integration collects information about HTTP request headers.\n * @deprecated Use `httpContextIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const HttpContext = convertIntegrationFnToClass(INTEGRATION_NAME, httpContextIntegration) as IntegrationClass<\n  Integration & { preprocessEvent: (event: Event) => void }\n>;\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Integration, IntegrationClass, IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\n\nimport { WINDOW, wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n  'EventTarget',\n  'Window',\n  'Node',\n  'ApplicationCache',\n  'AudioTrackList',\n  'BroadcastChannel',\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  'SharedWorker',\n  'TextTrack',\n  'TextTrackCue',\n  'TextTrackList',\n  'WebSocket',\n  'WebSocketWorker',\n  'Worker',\n  'XMLHttpRequest',\n  'XMLHttpRequestEventTarget',\n  'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'TryCatch';\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\ninterface TryCatchOptions {\n  setTimeout: boolean;\n  setInterval: boolean;\n  requestAnimationFrame: boolean;\n  XMLHttpRequest: boolean;\n  eventTarget: boolean | string[];\n}\n\nconst _browserApiErrorsIntegration = ((options: Partial<TryCatchOptions> = {}) => {\n  const _options = {\n    XMLHttpRequest: true,\n    eventTarget: true,\n    requestAnimationFrame: true,\n    setInterval: true,\n    setTimeout: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO: This currently only works for the first client this is setup\n    // We may want to adjust this to check for client etc.\n    setupOnce() {\n      if (_options.setTimeout) {\n        fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n      }\n\n      if (_options.setInterval) {\n        fill(WINDOW, 'setInterval', _wrapTimeFunction);\n      }\n\n      if (_options.requestAnimationFrame) {\n        fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n      }\n\n      if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n        fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n      }\n\n      const eventTargetOption = _options.eventTarget;\n      if (eventTargetOption) {\n        const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n        eventTarget.forEach(_wrapEventTarget);\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n * @deprecated Use `browserApiErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const TryCatch = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  browserApiErrorsIntegration,\n) as IntegrationClass<Integration> & {\n  new (options?: {\n    setTimeout: boolean;\n    setInterval: boolean;\n    requestAnimationFrame: boolean;\n    XMLHttpRequest: boolean;\n    eventTarget: boolean | string[];\n  }): Integration;\n};\n\nfunction _wrapTimeFunction(original: () => void): () => number {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: any, ...args: any[]): number {\n    const originalCallback = args[0];\n    args[0] = wrap(originalCallback, {\n      mechanism: {\n        data: { function: getFunctionName(original) },\n        handled: false,\n        type: 'instrument',\n      },\n    });\n    return original.apply(this, args);\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: any, callback: () => void): () => void {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return original.apply(this, [\n      wrap(callback, {\n        mechanism: {\n          data: {\n            function: 'requestAnimationFrame',\n            handler: getFunctionName(original),\n          },\n          handled: false,\n          type: 'instrument',\n        },\n      }),\n    ]);\n  };\n}\n\nfunction _wrapXHR(originalSend: () => void): () => void {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: XMLHttpRequest, ...args: any[]): void {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const xhr = this;\n    const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n    xmlHttpRequestProps.forEach(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: WrappedFunction): () => any {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                function: prop,\n                handler: getFunctionName(original),\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          };\n\n          // If Instrument integration has been called before TryCatch, get the name of original function\n          const originalFunction = getOriginalFunction(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n          }\n\n          // Otherwise wrap directly\n          return wrap(original, wrapOptions);\n        });\n      }\n    });\n\n    return originalSend.apply(this, args);\n  };\n}\n\nfunction _wrapEventTarget(target: string): void {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const globalObject = WINDOW as { [key: string]: any };\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const proto = globalObject[target] && globalObject[target].prototype;\n\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\n  fill(proto, 'addEventListener', function (original: VoidFunction,): (\n    eventName: string,\n    fn: EventListenerObject,\n    options?: boolean | AddEventListenerOptions,\n  ) => void {\n    return function (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      this: any,\n      eventName: string,\n      fn: EventListenerObject,\n      options?: boolean | AddEventListenerOptions,\n    ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n      try {\n        if (typeof fn.handleEvent === 'function') {\n          // ESlint disable explanation:\n          //  First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n          //  introduce a bug here, because bind returns a new function that doesn't have our\n          //  flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n          //  Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n          // eslint-disable-next-line @typescript-eslint/unbound-method\n          fn.handleEvent = wrap(fn.handleEvent, {\n            mechanism: {\n              data: {\n                function: 'handleEvent',\n                handler: getFunctionName(fn),\n                target,\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          });\n        }\n      } catch (err) {\n        // can sometimes get 'Permission denied to access property \"handle Event'\n      }\n\n      return original.apply(this, [\n        eventName,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        wrap(fn as any as WrappedFunction, {\n          mechanism: {\n            data: {\n              function: 'addEventListener',\n              handler: getFunctionName(fn),\n              target,\n            },\n            handled: false,\n            type: 'instrument',\n          },\n        }),\n        options,\n      ]);\n    };\n  });\n\n  fill(\n    proto,\n    'removeEventListener',\n    function (\n      originalRemoveEventListener: () => void,\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n      return function (\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this: any,\n        eventName: string,\n        fn: EventListenerObject,\n        options?: boolean | EventListenerOptions,\n      ): () => void {\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        const wrappedEventHandler = fn as unknown as WrappedFunction;\n        try {\n          const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n          if (originalEventHandler) {\n            originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\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}\n","import type { Hub } from '@sentry/core';\nimport { functionToStringIntegration, inboundFiltersIntegration } from '@sentry/core';\nimport {\n  captureSession,\n  getClient,\n  getCurrentHub,\n  getIntegrationsToSetup,\n  getReportDialogEndpoint,\n  initAndBind,\n  startSession,\n} from '@sentry/core';\nimport type { Integration, Options, UserFeedback } from '@sentry/types';\nimport {\n  addHistoryInstrumentationHandler,\n  logger,\n  stackParserFromStackParserOptions,\n  supportsFetch,\n} from '@sentry/utils';\n\nimport type { BrowserClientOptions, BrowserOptions } from './client';\nimport { BrowserClient } from './client';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { ReportDialogOptions } from './helpers';\nimport { WINDOW, wrap as internalWrap } from './helpers';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs';\nimport { dedupeIntegration } from './integrations/dedupe';\nimport { globalHandlersIntegration } from './integrations/globalhandlers';\nimport { httpContextIntegration } from './integrations/httpcontext';\nimport { linkedErrorsIntegration } from './integrations/linkederrors';\nimport { browserApiErrorsIntegration } from './integrations/trycatch';\nimport { defaultStackParser } from './stack-parsers';\nimport { makeFetchTransport, makeXHRTransport } from './transports';\n\n/** @deprecated Use `getDefaultIntegrations(options)` instead. */\nexport const defaultIntegrations = [\n  inboundFiltersIntegration(),\n  functionToStringIntegration(),\n  browserApiErrorsIntegration(),\n  breadcrumbsIntegration(),\n  globalHandlersIntegration(),\n  linkedErrorsIntegration(),\n  dedupeIntegration(),\n  httpContextIntegration(),\n];\n\n/** Get the default integrations for the browser SDK. */\nexport function getDefaultIntegrations(_options: Options): Integration[] {\n  // We return a copy of the defaultIntegrations here to avoid mutating this\n  return [\n    // eslint-disable-next-line deprecation/deprecation\n    ...defaultIntegrations,\n  ];\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\ndeclare const __SENTRY_RELEASE__: string | undefined;\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: BrowserOptions = {}): void {\n  if (options.defaultIntegrations === undefined) {\n    options.defaultIntegrations = getDefaultIntegrations(options);\n  }\n  if (options.release === undefined) {\n    // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n    if (typeof __SENTRY_RELEASE__ === 'string') {\n      options.release = __SENTRY_RELEASE__;\n    }\n\n    // This supports the variable that sentry-webpack-plugin injects\n    if (WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id) {\n      options.release = WINDOW.SENTRY_RELEASE.id;\n    }\n  }\n  if (options.autoSessionTracking === undefined) {\n    options.autoSessionTracking = true;\n  }\n  if (options.sendClientReports === undefined) {\n    options.sendClientReports = true;\n  }\n\n  const clientOptions: BrowserClientOptions = {\n    ...options,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    integrations: getIntegrationsToSetup(options),\n    transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),\n  };\n\n  initAndBind(BrowserClient, clientOptions);\n\n  if (options.autoSessionTracking) {\n    startSessionTracking();\n  }\n}\n\ntype NewReportDialogOptions = ReportDialogOptions & { eventId: string }; // eslint-disable-line\n\ninterface ShowReportDialogFunction {\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   */\n  (options: NewReportDialogOptions): void;\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   *\n   * @deprecated Please always pass an `options` argument with `eventId`. The `hub` argument will not be used in the next version of the SDK.\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  (options?: ReportDialogOptions, hub?: Hub): void;\n}\n\nexport const showReportDialog: ShowReportDialogFunction = (\n  // eslint-disable-next-line deprecation/deprecation\n  options: ReportDialogOptions = {},\n  // eslint-disable-next-line deprecation/deprecation\n  hub: Hub = getCurrentHub(),\n) => {\n  // doesn't work without a document (React Native)\n  if (!WINDOW.document) {\n    DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n    return;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  const { client, scope } = hub.getStackTop();\n  const dsn = options.dsn || (client && client.getDsn());\n  if (!dsn) {\n    DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n    return;\n  }\n\n  if (scope) {\n    options.user = {\n      ...scope.getUser(),\n      ...options.user,\n    };\n  }\n\n  // TODO(v8): Remove this entire if statement. `eventId` will be a required option.\n  // eslint-disable-next-line deprecation/deprecation\n  if (!options.eventId) {\n    // eslint-disable-next-line deprecation/deprecation\n    options.eventId = hub.lastEventId();\n  }\n\n  const script = WINDOW.document.createElement('script');\n  script.async = true;\n  script.crossOrigin = 'anonymous';\n  script.src = getReportDialogEndpoint(dsn, options);\n\n  if (options.onLoad) {\n    script.onload = options.onLoad;\n  }\n\n  const { onClose } = options;\n  if (onClose) {\n    const reportDialogClosedMessageHandler = (event: MessageEvent): void => {\n      if (event.data === '__sentry_reportdialog_closed__') {\n        try {\n          onClose();\n        } finally {\n          WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n        }\n      }\n    };\n    WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n  }\n\n  const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n  if (injectionPoint) {\n    injectionPoint.appendChild(script);\n  } else {\n    DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n  }\n};\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n  // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n  callback();\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @deprecated This function will be removed in v8.\n * It is not part of Sentry's official API and it's easily replaceable by using a try/catch block\n * and calling Sentry.captureException.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// TODO(v8): Remove this function\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n  return internalWrap(fn)();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n  if (typeof WINDOW.document === 'undefined') {\n    DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n    return;\n  }\n\n  // The session duration for browser sessions does not track a meaningful\n  // concept that can be used as a metric.\n  // Automatically captured sessions are akin to page views, and thus we\n  // discard their duration.\n  startSession({ ignoreDuration: true });\n  captureSession();\n\n  // We want to create a session for every navigation as well\n  addHistoryInstrumentationHandler(({ from, to }) => {\n    // Don't create an additional session for the initial route or if the location did not change\n    if (from !== undefined && from !== to) {\n      startSession({ ignoreDuration: true });\n      captureSession();\n    }\n  });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n  const client = getClient<BrowserClient>();\n  if (client) {\n    client.captureUserFeedback(feedback);\n  }\n}\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport type { GenericFunction } from './types';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n * See https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nexport function _optionalChain(ops: unknown[]): unknown {\n  let lastAccessLHS: unknown = undefined;\n  let value = ops[0];\n  let i = 1;\n  while (i < ops.length) {\n    const op = ops[i] as string;\n    const fn = ops[i + 1] as (intermediateValue: unknown) => unknown;\n    i += 2;\n    // by checking for loose equality to `null`, we catch both `null` and `undefined`\n    if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n      // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n      return;\n    }\n    if (op === 'access' || op === 'optionalAccess') {\n      lastAccessLHS = value;\n      value = fn(value);\n    } else if (op === 'call' || op === 'optionalCall') {\n      value = fn((...args: unknown[]) => (value as GenericFunction).call(lastAccessLHS, ...args));\n      lastAccessLHS = undefined;\n    }\n  }\n  return value;\n}\n\n// Sucrase version\n// function _optionalChain(ops) {\n//   let lastAccessLHS = undefined;\n//   let value = ops[0];\n//   let i = 1;\n//   while (i < ops.length) {\n//     const op = ops[i];\n//     const fn = ops[i + 1];\n//     i += 2;\n//     if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n//       return undefined;\n//     }\n//     if (op === 'access' || op === 'optionalAccess') {\n//       lastAccessLHS = value;\n//       value = fn(value);\n//     } else if (op === 'call' || op === 'optionalCall') {\n//       value = fn((...args) => value.call(lastAccessLHS, ...args));\n//       lastAccessLHS = undefined;\n//     }\n//   }\n//   return value;\n// }\n","import type { Client, DsnComponents, Hub } from '@sentry/types';\n\n/**\n * Checks whether given url points to Sentry server\n * @param url url to verify\n *\n * TODO(v8): Remove Hub fallback type\n */\nexport function isSentryRequestUrl(url: string, hubOrClient: Hub | Client | undefined): boolean {\n  const client =\n    hubOrClient && isHub(hubOrClient)\n      ? // eslint-disable-next-line deprecation/deprecation\n        hubOrClient.getClient()\n      : hubOrClient;\n  const dsn = client && client.getDsn();\n  const tunnel = client && client.getOptions().tunnel;\n\n  return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url: string, tunnel: string | undefined): boolean {\n  if (!tunnel) {\n    return false;\n  }\n\n  return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url: string, dsn: DsnComponents | undefined): boolean {\n  return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str: string): string {\n  return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\nfunction isHub(hubOrClient: Hub | Client | undefined): hubOrClient is Hub {\n  // eslint-disable-next-line deprecation/deprecation\n  return (hubOrClient as Hub).getClient !== undefined;\n}\n","import { isNodeEnv } from './node';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Returns true if we are in the browser.\n */\nexport function isBrowser(): boolean {\n  // eslint-disable-next-line no-restricted-globals\n  return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\ntype ElectronProcess = { type?: string };\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer(): boolean {\n  return (\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    (GLOBAL_OBJ as any).process !== undefined && ((GLOBAL_OBJ as any).process as ElectronProcess).type === 'renderer'\n  );\n}\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n","/*\n * Copyright 2022 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\nimport { WINDOW } from '../../types';\nimport type { NavigationTimingPolyfillEntry } from '../types';\n\nconst getNavigationEntryFromPerformanceTiming = (): NavigationTimingPolyfillEntry => {\n  // eslint-disable-next-line deprecation/deprecation\n  const timing = WINDOW.performance.timing;\n  // eslint-disable-next-line deprecation/deprecation\n  const type = WINDOW.performance.navigation.type;\n\n  const navigationEntry: { [key: string]: number | string } = {\n    entryType: 'navigation',\n    startTime: 0,\n    type: type == 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate',\n  };\n\n  for (const key in timing) {\n    if (key !== 'navigationStart' && key !== 'toJSON') {\n      // eslint-disable-next-line deprecation/deprecation\n      navigationEntry[key] = Math.max((timing[key as keyof PerformanceTiming] as number) - timing.navigationStart, 0);\n    }\n  }\n  return navigationEntry as unknown as NavigationTimingPolyfillEntry;\n};\n\nexport const getNavigationEntry = (): PerformanceNavigationTiming | NavigationTimingPolyfillEntry | undefined => {\n  if (WINDOW.__WEB_VITALS_POLYFILL__) {\n    return (\n      WINDOW.performance &&\n      ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) ||\n        getNavigationEntryFromPerformanceTiming())\n    );\n  } else {\n    return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n  }\n};\n","/*\n * Copyright 2022 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\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const getActivationStart = (): number => {\n  const navEntry = getNavigationEntry();\n  return (navEntry && navEntry.activationStart) || 0;\n};\n","/*\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\nimport { WINDOW } from '../../types';\n\nexport interface OnHiddenCallback {\n  (event: Event): void;\n}\n\nexport const onHidden = (cb: OnHiddenCallback, once?: boolean): void => {\n  const onHiddenOrPageHide = (event: Event): void => {\n    if (event.type === 'pagehide' || WINDOW.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","/*\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\nimport { WINDOW } from '../../types';\nimport { onHidden } from './onHidden';\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = (): number => {\n  // If the document is hidden and not prerendering, assume it was always\n  // hidden and the page was loaded in the background.\n  return WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n};\n\nconst trackChanges = (): void => {\n  // Update the time if/when the document becomes hidden.\n  onHidden(({ timeStamp }) => {\n    firstHiddenTime = timeStamp;\n  }, true);\n};\n\nexport const getVisibilityWatcher = (): {\n  readonly firstHiddenTime: number;\n} => {\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","/*\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\nimport type { FirstInputPolyfillEntry, NavigationTimingPolyfillEntry, PerformancePaintTiming } from '../types';\n\nexport interface PerformanceEntryHandler {\n  (entry: PerformanceEntry): void;\n}\n\ninterface PerformanceEntryMap {\n  event: PerformanceEventTiming[];\n  paint: PerformancePaintTiming[];\n  'layout-shift': LayoutShift[];\n  'largest-contentful-paint': LargestContentfulPaint[];\n  'first-input': PerformanceEventTiming[] | FirstInputPolyfillEntry[];\n  navigation: PerformanceNavigationTiming[] | NavigationTimingPolyfillEntry[];\n  resource: PerformanceResourceTiming[];\n  longtask: PerformanceEntry[];\n}\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 const observe = <K extends keyof PerformanceEntryMap>(\n  type: K,\n  callback: (entries: PerformanceEntryMap[K]) => void,\n  opts?: PerformanceObserverInit,\n): PerformanceObserver | undefined => {\n  try {\n    if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n      const po = new PerformanceObserver(list => {\n        callback(list.getEntries() as PerformanceEntryMap[K]);\n      });\n      po.observe(\n        Object.assign(\n          {\n            type,\n            buffered: true,\n          },\n          opts || {},\n        ) as PerformanceObserverInit,\n      );\n      return po;\n    }\n  } catch (e) {\n    // Do nothing.\n  }\n  return;\n};\n","/*\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\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { LCPMetric, ReportCallback, StopListening } from './types';\n\nconst reportedMetricIDs: Record<string, boolean> = {};\n\n/**\n * Calculates the [LCP](https://web.dev/lcp/) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n */\nexport const onLCP = (onReport: ReportCallback): StopListening | undefined => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('LCP');\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntries = (entries: LCPMetric['entries']): void => {\n    const lastEntry = entries[entries.length - 1] as LargestContentfulPaint;\n    if (lastEntry) {\n      // The startTime attribute returns the value of the renderTime if it is\n      // not 0, and the value of the loadTime otherwise. The activationStart\n      // reference is used because LCP should be relative to page activation\n      // rather than navigation start if the page was prerendered.\n      const value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n\n      // Only report if the page wasn't hidden prior to LCP.\n      if (value < visibilityWatcher.firstHiddenTime) {\n        metric.value = value;\n        metric.entries = [lastEntry];\n        report();\n      }\n    }\n  };\n\n  const po = observe('largest-contentful-paint', handleEntries);\n\n  if (po) {\n    report = bindReporter(onReport, metric);\n\n    const stopListening = (): void => {\n      if (!reportedMetricIDs[metric.id]) {\n        handleEntries(po.takeRecords() as LCPMetric['entries']);\n        po.disconnect();\n        reportedMetricIDs[metric.id] = true;\n        report(true);\n      }\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(type => {\n      addEventListener(type, stopListening, { once: true, capture: true });\n    });\n\n    onHidden(stopListening, true);\n\n    return stopListening;\n  }\n\n  return;\n};\n","/*\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\nimport { WINDOW } from '../../types';\nimport type { Metric } from '../types';\nimport { generateUniqueID } from './generateUniqueID';\nimport { getActivationStart } from './getActivationStart';\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const initMetric = (name: Metric['name'], value?: number): Metric => {\n  const navEntry = getNavigationEntry();\n  let navigationType: Metric['navigationType'] = 'navigate';\n\n  if (navEntry) {\n    if (WINDOW.document.prerendering || getActivationStart() > 0) {\n      navigationType = 'prerender';\n    } else {\n      navigationType = navEntry.type.replace(/_/g, '-') as Metric['navigationType'];\n    }\n  }\n\n  return {\n    name,\n    value: typeof value === 'undefined' ? -1 : value,\n    rating: 'good', // Will be updated if the value changes.\n    delta: 0,\n    entries: [],\n    id: generateUniqueID(),\n    navigationType,\n  };\n};\n","/*\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/**\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 const generateUniqueID = (): string => {\n  return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n","/*\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\nimport type { Metric, ReportCallback } from '../types';\n\nexport const bindReporter = (\n  callback: ReportCallback,\n  metric: Metric,\n  reportAllChanges?: boolean,\n): ((forceReport?: boolean) => void) => {\n  let prevValue: number;\n  let delta: number;\n  return (forceReport?: boolean) => {\n    if (metric.value >= 0) {\n      if (forceReport || reportAllChanges) {\n        delta = metric.value - (prevValue || 0);\n\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 (delta || prevValue === undefined) {\n          prevValue = metric.value;\n          metric.delta = delta;\n          callback(metric);\n        }\n      }\n    }\n  };\n};\n","import { getFunctionName, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { onCLS } from './web-vitals/getCLS';\nimport { onFID } from './web-vitals/getFID';\nimport { onLCP } from './web-vitals/getLCP';\nimport { observe } from './web-vitals/lib/observe';\n\ntype InstrumentHandlerTypePerformanceObserver = 'longtask' | 'event' | 'navigation' | 'paint' | 'resource';\n\ntype InstrumentHandlerTypeMetric = 'cls' | 'lcp' | 'fid';\n\n// We provide this here manually instead of relying on a global, as this is not available in non-browser environements\n// And we do not want to expose such types\ninterface PerformanceEntry {\n  readonly duration: number;\n  readonly entryType: string;\n  readonly name: string;\n  readonly startTime: number;\n  toJSON(): Record<string, unknown>;\n}\n\ninterface Metric {\n  /**\n   * The name of the metric (in acronym form).\n   */\n  name: 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';\n\n  /**\n   * The current value of the metric.\n   */\n  value: number;\n\n  /**\n   * The rating as to whether the metric value is within the \"good\",\n   * \"needs improvement\", or \"poor\" thresholds of the metric.\n   */\n  rating: 'good' | 'needs-improvement' | 'poor';\n\n  /**\n   * The delta between the current value and the last-reported value.\n   * On the first report, `delta` and `value` will always be the same.\n   */\n  delta: number;\n\n  /**\n   * A unique ID representing this particular metric instance. This ID can\n   * be used by an analytics tool to dedupe multiple values sent for the same\n   * metric instance, or to group multiple deltas together and calculate a\n   * total. It can also be used to differentiate multiple different metric\n   * instances sent from the same page, which can happen if the page is\n   * restored from the back/forward cache (in that case new metrics object\n   * get created).\n   */\n  id: string;\n\n  /**\n   * Any performance entries relevant to the metric value calculation.\n   * The array may also be empty if the metric value was not based on any\n   * entries (e.g. a CLS value of 0 given no layout shifts).\n   */\n  entries: PerformanceEntry[];\n\n  /**\n   * The type of navigation\n   *\n   * Navigation Timing API (or `undefined` if the browser doesn't\n   * support that API). For pages that are restored from the bfcache, this\n   * value will be 'back-forward-cache'.\n   */\n  navigationType: 'navigate' | 'reload' | 'back-forward' | 'back-forward-cache' | 'prerender';\n}\n\ntype InstrumentHandlerType = InstrumentHandlerTypeMetric | InstrumentHandlerTypePerformanceObserver;\n\ntype StopListening = undefined | void | (() => void);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstrumentHandlerCallback = (data: any) => void;\n\ntype CleanupHandlerCallback = () => void;\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\nlet _previousCls: Metric | undefined;\nlet _previousFid: Metric | undefined;\nlet _previousLcp: Metric | undefined;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nexport function addClsInstrumentationHandler(\n  callback: (data: { metric: Metric }) => void,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nexport function addLcpInstrumentationHandler(\n  callback: (data: { metric: Metric }) => void,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addFidInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\nexport function addPerformanceInstrumentationHandler(\n  type: 'event',\n  callback: (data: { entries: (PerformanceEntry & { target?: unknown | null })[] }) => void,\n): CleanupHandlerCallback;\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback;\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  if (!instrumented[type]) {\n    instrumentPerformanceObserver(type);\n    instrumented[type] = true;\n  }\n\n  return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = handlers[type];\n\n  if (!typeHandlers || !typeHandlers.length) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nfunction instrumentCls(): StopListening {\n  return onCLS(metric => {\n    triggerHandlers('cls', {\n      metric,\n    });\n    _previousCls = metric;\n  });\n}\n\nfunction instrumentFid(): void {\n  return onFID(metric => {\n    triggerHandlers('fid', {\n      metric,\n    });\n    _previousFid = metric;\n  });\n}\n\nfunction instrumentLcp(): StopListening {\n  return onLCP(metric => {\n    triggerHandlers('lcp', {\n      metric,\n    });\n    _previousLcp = metric;\n  });\n}\n\nfunction addMetricObserver(\n  type: InstrumentHandlerTypeMetric,\n  callback: InstrumentHandlerCallback,\n  instrumentFn: () => StopListening,\n  previousValue: Metric | undefined,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  let stopListening: StopListening | undefined;\n\n  if (!instrumented[type]) {\n    stopListening = instrumentFn();\n    instrumented[type] = true;\n  }\n\n  if (previousValue) {\n    callback({ metric: previousValue });\n  }\n\n  return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type: InstrumentHandlerTypePerformanceObserver): void {\n  const options: PerformanceObserverInit = {};\n\n  // Special per-type options we want to use\n  if (type === 'event') {\n    options.durationThreshold = 0;\n  }\n\n  observe(\n    type,\n    entries => {\n      triggerHandlers(type, { entries });\n    },\n    options,\n  );\n}\n\nfunction addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n  type: InstrumentHandlerType,\n  callback: InstrumentHandlerCallback,\n  stopListening: StopListening,\n): CleanupHandlerCallback {\n  return () => {\n    if (stopListening) {\n      stopListening();\n    }\n\n    const typeHandlers = handlers[type];\n\n    if (!typeHandlers) {\n      return;\n    }\n\n    const index = typeHandlers.indexOf(callback);\n    if (index !== -1) {\n      typeHandlers.splice(index, 1);\n    }\n  };\n}\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nexport const REPLAY_SESSION_KEY = 'sentryReplaySession';\nexport const REPLAY_EVENT_NAME = 'replay_event';\nexport const RECORDING_EVENT_NAME = 'replay_recording';\nexport const UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nexport const SESSION_IDLE_PAUSE_DURATION = 300_000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nexport const SESSION_IDLE_EXPIRE_DURATION = 900_000; // 15 minutes in ms\n\n/** Default flush delays */\nexport const DEFAULT_FLUSH_MIN_DELAY = 5_000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nexport const DEFAULT_FLUSH_MAX_DELAY = 5_500;\n\n/* How long to wait for error checkouts */\nexport const BUFFER_CHECKOUT_TIME = 60_000;\n\nexport const RETRY_BASE_INTERVAL = 5000;\nexport const RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nexport const NETWORK_BODY_MAX_SIZE = 150_000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nexport const CONSOLE_ARG_MAX_SIZE = 5_000;\n\n/* Min. time to wait before we consider something a slow click. */\nexport const SLOW_CLICK_THRESHOLD = 3_000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nexport const SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nexport const REPLAY_MAX_EVENT_BUFFER_SIZE = 20_000_000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nexport const MIN_REPLAY_DURATION = 4_999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nexport const MIN_REPLAY_DURATION_LIMIT = 15_000;\n\n/** The max. length of a replay. */\nexport const MAX_REPLAY_DURATION = 3_600_000; // 60 minutes in ms;\n\n/** Default attributes to be ignored when `maskAllText` is enabled */\nexport const DEFAULT_IGNORED_ATTRIBUTES = ['title', 'placeholder'];\n","var NodeType;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n    return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n    const host = n?.host;\r\n    return Boolean(host?.shadowRoot === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n    if (cssText.includes(' background-clip: text;') &&\r\n        !cssText.includes(' -webkit-background-clip: text;')) {\r\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n    }\r\n    return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n    const { cssText } = rule;\r\n    if (cssText.split('\"').length < 3)\r\n        return cssText;\r\n    const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n    if (rule.layerName === '') {\r\n        statement.push(`layer`);\r\n    }\r\n    else if (rule.layerName) {\r\n        statement.push(`layer(${rule.layerName})`);\r\n    }\r\n    if (rule.supportsText) {\r\n        statement.push(`supports(${rule.supportsText})`);\r\n    }\r\n    if (rule.media.length) {\r\n        statement.push(rule.media.mediaText);\r\n    }\r\n    return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n    try {\r\n        const rules = s.rules || s.cssRules;\r\n        return rules\r\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n            : null;\r\n    }\r\n    catch (error) {\r\n        return null;\r\n    }\r\n}\r\nfunction stringifyRule(rule) {\r\n    let importStringified;\r\n    if (isCSSImportRule(rule)) {\r\n        try {\r\n            importStringified =\r\n                stringifyStylesheet(rule.styleSheet) ||\r\n                    escapeImportStatement(rule);\r\n        }\r\n        catch (error) {\r\n        }\r\n    }\r\n    else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n        return fixSafariColons(rule.cssText);\r\n    }\r\n    return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n    const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n    return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n    return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n    return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n    constructor() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    getId(n) {\r\n        if (!n)\r\n            return -1;\r\n        const id = this.getMeta(n)?.id;\r\n        return id ?? -1;\r\n    }\r\n    getNode(id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    }\r\n    getIds() {\r\n        return Array.from(this.idNodeMap.keys());\r\n    }\r\n    getMeta(n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    }\r\n    removeNodeFromMap(n) {\r\n        const id = this.getId(n);\r\n        this.idNodeMap.delete(id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n        }\r\n    }\r\n    has(id) {\r\n        return this.idNodeMap.has(id);\r\n    }\r\n    hasNode(node) {\r\n        return this.nodeMetaMap.has(node);\r\n    }\r\n    add(n, meta) {\r\n        const id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    }\r\n    replace(id, n) {\r\n        const oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            const meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    }\r\n    reset() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n}\r\nfunction createMirror() {\r\n    return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n    if (tagName === 'OPTION') {\r\n        tagName = 'SELECT';\r\n    }\r\n    return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n        (type && maskInputOptions[type]) ||\r\n        type === 'password' ||\r\n        (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n    let text = value || '';\r\n    if (!isMasked) {\r\n        return text;\r\n    }\r\n    if (maskInputFn) {\r\n        text = maskInputFn(text, element);\r\n    }\r\n    return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n    return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n    return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n    const ctx = canvas.getContext('2d');\r\n    if (!ctx)\r\n        return true;\r\n    const chunkSize = 50;\r\n    for (let x = 0; x < canvas.width; x += chunkSize) {\r\n        for (let y = 0; y < canvas.height; y += chunkSize) {\r\n            const getImageData = ctx.getImageData;\r\n            const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n                : getImageData;\r\n            const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n            if (pixelBuffer.some((pixel) => pixel !== 0))\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n    if (!a || !b || a.type !== b.type)\r\n        return false;\r\n    if (a.type === NodeType.Document)\r\n        return a.compatMode === b.compatMode;\r\n    else if (a.type === NodeType.DocumentType)\r\n        return (a.name === b.name &&\r\n            a.publicId === b.publicId &&\r\n            a.systemId === b.systemId);\r\n    else if (a.type === NodeType.Comment ||\r\n        a.type === NodeType.Text ||\r\n        a.type === NodeType.CDATA)\r\n        return a.textContent === b.textContent;\r\n    else if (a.type === NodeType.Element)\r\n        return (a.tagName === b.tagName &&\r\n            JSON.stringify(a.attributes) ===\r\n                JSON.stringify(b.attributes) &&\r\n            a.isSVG === b.isSVG &&\r\n            a.needBlock === b.needBlock);\r\n    return false;\r\n}\r\nfunction getInputType(element) {\r\n    const type = element.type;\r\n    return element.hasAttribute('data-rr-is-password')\r\n        ? 'password'\r\n        : type\r\n            ?\r\n                toLowerCase(type)\r\n            : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n    if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n        return el.getAttribute('value') || '';\r\n    }\r\n    return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n    return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n    if (element instanceof HTMLFormElement) {\r\n        return 'form';\r\n    }\r\n    const processedTagName = toLowerCase(element.tagName);\r\n    if (tagNameRegex.test(processedTagName)) {\r\n        return 'div';\r\n    }\r\n    return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n    let origin = '';\r\n    if (url.indexOf('//') > -1) {\r\n        origin = url.split('/').slice(0, 3).join('/');\r\n    }\r\n    else {\r\n        origin = url.split('/')[0];\r\n    }\r\n    origin = origin.split('?')[0];\r\n    return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n    return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n        const filePath = path1 || path2 || path3;\r\n        const maybeQuote = quote1 || quote2 || '';\r\n        if (!filePath) {\r\n            return origin;\r\n        }\r\n        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (DATA_URI.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (filePath[0] === '/') {\r\n            return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n        }\r\n        const stack = href.split('/');\r\n        const parts = filePath.split('/');\r\n        stack.pop();\r\n        for (const part of parts) {\r\n            if (part === '.') {\r\n                continue;\r\n            }\r\n            else if (part === '..') {\r\n                stack.pop();\r\n            }\r\n            else {\r\n                stack.push(part);\r\n            }\r\n        }\r\n        return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n    });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n    if (attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    let pos = 0;\r\n    function collectCharacters(regEx) {\r\n        let chars;\r\n        const match = regEx.exec(attributeValue.substring(pos));\r\n        if (match) {\r\n            chars = match[0];\r\n            pos += chars.length;\r\n            return chars;\r\n        }\r\n        return '';\r\n    }\r\n    const output = [];\r\n    while (true) {\r\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n        if (pos >= attributeValue.length) {\r\n            break;\r\n        }\r\n        let url = collectCharacters(SRCSET_NOT_SPACES);\r\n        if (url.slice(-1) === ',') {\r\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n            output.push(url);\r\n        }\r\n        else {\r\n            let descriptorsStr = '';\r\n            url = absoluteToDoc(doc, url);\r\n            let inParens = false;\r\n            while (true) {\r\n                const c = attributeValue.charAt(pos);\r\n                if (c === '') {\r\n                    output.push((url + descriptorsStr).trim());\r\n                    break;\r\n                }\r\n                else if (!inParens) {\r\n                    if (c === ',') {\r\n                        pos += 1;\r\n                        output.push((url + descriptorsStr).trim());\r\n                        break;\r\n                    }\r\n                    else if (c === '(') {\r\n                        inParens = true;\r\n                    }\r\n                }\r\n                else {\r\n                    if (c === ')') {\r\n                        inParens = false;\r\n                    }\r\n                }\r\n                descriptorsStr += c;\r\n                pos += 1;\r\n            }\r\n        }\r\n    }\r\n    return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n    if (!attributeValue || attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    const a = doc.createElement('a');\r\n    a.href = attributeValue;\r\n    return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n    const a = document.createElement('a');\r\n    a.href = '';\r\n    return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n    if (!value) {\r\n        return value;\r\n    }\r\n    if (name === 'src' ||\r\n        (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'xlink:href' && value[0] !== '#') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'background' &&\r\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'srcset') {\r\n        return getAbsoluteSrcsetString(doc, value);\r\n    }\r\n    else if (name === 'style') {\r\n        return absoluteToStylesheet(value, getHref());\r\n    }\r\n    else if (tagName === 'object' && name === 'data') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    if (typeof maskAttributeFn === 'function') {\r\n        return maskAttributeFn(name, value, element);\r\n    }\r\n    return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n    return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n    try {\r\n        if (unblockSelector && element.matches(unblockSelector)) {\r\n            return false;\r\n        }\r\n        if (typeof blockClass === 'string') {\r\n            if (element.classList.contains(blockClass)) {\r\n                return true;\r\n            }\r\n        }\r\n        else {\r\n            for (let eIndex = element.classList.length; eIndex--;) {\r\n                const className = element.classList[eIndex];\r\n                if (blockClass.test(className)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        if (blockSelector) {\r\n            return element.matches(blockSelector);\r\n        }\r\n    }\r\n    catch (e) {\r\n    }\r\n    return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n    for (let eIndex = el.classList.length; eIndex--;) {\r\n        const className = el.classList[eIndex];\r\n        if (regex.test(className)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n    if (!node)\r\n        return -1;\r\n    if (node.nodeType !== node.ELEMENT_NODE)\r\n        return -1;\r\n    if (distance > limit)\r\n        return -1;\r\n    if (matchPredicate(node))\r\n        return distance;\r\n    return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n    return (node) => {\r\n        const el = node;\r\n        if (el === null)\r\n            return false;\r\n        try {\r\n            if (className) {\r\n                if (typeof className === 'string') {\r\n                    if (el.matches(`.${className}`))\r\n                        return true;\r\n                }\r\n                else if (elementClassMatchesRegex(el, className)) {\r\n                    return true;\r\n                }\r\n            }\r\n            if (selector && el.matches(selector))\r\n                return true;\r\n            return false;\r\n        }\r\n        catch {\r\n            return false;\r\n        }\r\n    };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n    try {\r\n        const el = node.nodeType === node.ELEMENT_NODE\r\n            ? node\r\n            : node.parentElement;\r\n        if (el === null)\r\n            return false;\r\n        let maskDistance = -1;\r\n        let unmaskDistance = -1;\r\n        if (maskAllText) {\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n            if (unmaskDistance < 0) {\r\n                return true;\r\n            }\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n        }\r\n        else {\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n            if (maskDistance < 0) {\r\n                return false;\r\n            }\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n        }\r\n        return maskDistance >= 0\r\n            ? unmaskDistance >= 0\r\n                ? maskDistance <= unmaskDistance\r\n                : true\r\n            : unmaskDistance >= 0\r\n                ? false\r\n                : !!maskAllText;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n    const win = iframeEl.contentWindow;\r\n    if (!win) {\r\n        return;\r\n    }\r\n    let fired = false;\r\n    let readyState;\r\n    try {\r\n        readyState = win.document.readyState;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (readyState !== 'complete') {\r\n        const timer = setTimeout(() => {\r\n            if (!fired) {\r\n                listener();\r\n                fired = true;\r\n            }\r\n        }, iframeLoadTimeout);\r\n        iframeEl.addEventListener('load', () => {\r\n            clearTimeout(timer);\r\n            fired = true;\r\n            listener();\r\n        });\r\n        return;\r\n    }\r\n    const blankUrl = 'about:blank';\r\n    if (win.location.href !== blankUrl ||\r\n        iframeEl.src === blankUrl ||\r\n        iframeEl.src === '') {\r\n        setTimeout(listener, 0);\r\n        return iframeEl.addEventListener('load', listener);\r\n    }\r\n    iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n    let fired = false;\r\n    let styleSheetLoaded;\r\n    try {\r\n        styleSheetLoaded = link.sheet;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (styleSheetLoaded)\r\n        return;\r\n    const timer = setTimeout(() => {\r\n        if (!fired) {\r\n            listener();\r\n            fired = true;\r\n        }\r\n    }, styleSheetLoadTimeout);\r\n    link.addEventListener('load', () => {\r\n        clearTimeout(timer);\r\n        fired = true;\r\n        listener();\r\n    });\r\n}\r\nfunction serializeNode(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n    const rootId = getRootId(doc, mirror);\r\n    switch (n.nodeType) {\r\n        case n.DOCUMENT_NODE:\r\n            if (n.compatMode !== 'CSS1Compat') {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                    compatMode: n.compatMode,\r\n                };\r\n            }\r\n            else {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                };\r\n            }\r\n        case n.DOCUMENT_TYPE_NODE:\r\n            return {\r\n                type: NodeType.DocumentType,\r\n                name: n.name,\r\n                publicId: n.publicId,\r\n                systemId: n.systemId,\r\n                rootId,\r\n            };\r\n        case n.ELEMENT_NODE:\r\n            return serializeElementNode(n, {\r\n                doc,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                inlineStylesheet,\r\n                maskAttributeFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                dataURLOptions,\r\n                inlineImages,\r\n                recordCanvas,\r\n                keepIframeSrcFn,\r\n                newlyAddedElement,\r\n                rootId,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n            });\r\n        case n.TEXT_NODE:\r\n            return serializeTextNode(n, {\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                maskTextFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                rootId,\r\n            });\r\n        case n.CDATA_SECTION_NODE:\r\n            return {\r\n                type: NodeType.CDATA,\r\n                textContent: '',\r\n                rootId,\r\n            };\r\n        case n.COMMENT_NODE:\r\n            return {\r\n                type: NodeType.Comment,\r\n                textContent: n.textContent || '',\r\n                rootId,\r\n            };\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n    if (!mirror.hasNode(doc))\r\n        return undefined;\r\n    const docId = mirror.getId(doc);\r\n    return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n    const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n    const parentTagName = n.parentNode && n.parentNode.tagName;\r\n    let textContent = n.textContent;\r\n    const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n    const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n    const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n    if (isStyle && textContent) {\r\n        try {\r\n            if (n.nextSibling || n.previousSibling) {\r\n            }\r\n            else if (n.parentNode.sheet?.cssRules) {\r\n                textContent = stringifyStylesheet(n.parentNode.sheet);\r\n            }\r\n        }\r\n        catch (err) {\r\n            console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n        }\r\n        textContent = absoluteToStylesheet(textContent, getHref());\r\n    }\r\n    if (isScript) {\r\n        textContent = 'SCRIPT_PLACEHOLDER';\r\n    }\r\n    const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n    if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n        textContent = maskTextFn\r\n            ? maskTextFn(textContent)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n        textContent = maskInputFn\r\n            ? maskInputFn(textContent, n.parentNode)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (parentTagName === 'OPTION' && textContent) {\r\n        const isInputMasked = shouldMaskInput({\r\n            type: null,\r\n            tagName: parentTagName,\r\n            maskInputOptions,\r\n        });\r\n        textContent = maskInputValue({\r\n            isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n            element: n,\r\n            value: textContent,\r\n            maskInputFn,\r\n        });\r\n    }\r\n    return {\r\n        type: NodeType.Text,\r\n        textContent: textContent || '',\r\n        isStyle,\r\n        rootId,\r\n    };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n    const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n    const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n    const tagName = getValidTagName(n);\r\n    let attributes = {};\r\n    const len = n.attributes.length;\r\n    for (let i = 0; i < len; i++) {\r\n        const attr = n.attributes[i];\r\n        if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n            attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n        }\r\n    }\r\n    if (tagName === 'link' && inlineStylesheet) {\r\n        const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n            return s.href === n.href;\r\n        });\r\n        let cssText = null;\r\n        if (stylesheet) {\r\n            cssText = stringifyStylesheet(stylesheet);\r\n        }\r\n        if (cssText) {\r\n            delete attributes.rel;\r\n            delete attributes.href;\r\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n        }\r\n    }\r\n    if (tagName === 'style' &&\r\n        n.sheet &&\r\n        !(n.innerText || n.textContent || '').trim().length) {\r\n        const cssText = stringifyStylesheet(n.sheet);\r\n        if (cssText) {\r\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n        }\r\n    }\r\n    if (tagName === 'input' ||\r\n        tagName === 'textarea' ||\r\n        tagName === 'select' ||\r\n        tagName === 'option') {\r\n        const el = n;\r\n        const type = getInputType(el);\r\n        const value = getInputValue(el, toUpperCase(tagName), type);\r\n        const checked = el.checked;\r\n        if (type !== 'submit' && type !== 'button' && value) {\r\n            const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n                type,\r\n                tagName: toUpperCase(tagName),\r\n                maskInputOptions,\r\n            }));\r\n            attributes.value = maskInputValue({\r\n                isMasked: forceMask,\r\n                element: el,\r\n                value,\r\n                maskInputFn,\r\n            });\r\n        }\r\n        if (checked) {\r\n            attributes.checked = checked;\r\n        }\r\n    }\r\n    if (tagName === 'option') {\r\n        if (n.selected && !maskInputOptions['select']) {\r\n            attributes.selected = true;\r\n        }\r\n        else {\r\n            delete attributes.selected;\r\n        }\r\n    }\r\n    if (tagName === 'canvas' && recordCanvas) {\r\n        if (n.__context === '2d') {\r\n            if (!is2DCanvasBlank(n)) {\r\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n        }\r\n        else if (!('__context' in n)) {\r\n            const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            const blankCanvas = document.createElement('canvas');\r\n            blankCanvas.width = n.width;\r\n            blankCanvas.height = n.height;\r\n            const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            if (canvasDataURL !== blankCanvasDataURL) {\r\n                attributes.rr_dataURL = canvasDataURL;\r\n            }\r\n        }\r\n    }\r\n    if (tagName === 'img' && inlineImages) {\r\n        if (!canvasService) {\r\n            canvasService = doc.createElement('canvas');\r\n            canvasCtx = canvasService.getContext('2d');\r\n        }\r\n        const image = n;\r\n        const oldValue = image.crossOrigin;\r\n        image.crossOrigin = 'anonymous';\r\n        const recordInlineImage = () => {\r\n            image.removeEventListener('load', recordInlineImage);\r\n            try {\r\n                canvasService.width = image.naturalWidth;\r\n                canvasService.height = image.naturalHeight;\r\n                canvasCtx.drawImage(image, 0, 0);\r\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n            catch (err) {\r\n                console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n            }\r\n            oldValue\r\n                ? (attributes.crossOrigin = oldValue)\r\n                : image.removeAttribute('crossorigin');\r\n        };\r\n        if (image.complete && image.naturalWidth !== 0)\r\n            recordInlineImage();\r\n        else\r\n            image.addEventListener('load', recordInlineImage);\r\n    }\r\n    if (tagName === 'audio' || tagName === 'video') {\r\n        attributes.rr_mediaState = n.paused\r\n            ? 'paused'\r\n            : 'played';\r\n        attributes.rr_mediaCurrentTime = n.currentTime;\r\n    }\r\n    if (!newlyAddedElement) {\r\n        if (n.scrollLeft) {\r\n            attributes.rr_scrollLeft = n.scrollLeft;\r\n        }\r\n        if (n.scrollTop) {\r\n            attributes.rr_scrollTop = n.scrollTop;\r\n        }\r\n    }\r\n    if (needBlock) {\r\n        const { width, height } = n.getBoundingClientRect();\r\n        attributes = {\r\n            class: attributes.class,\r\n            rr_width: `${width}px`,\r\n            rr_height: `${height}px`,\r\n        };\r\n    }\r\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n        if (!n.contentDocument) {\r\n            attributes.rr_src = attributes.src;\r\n        }\r\n        delete attributes.src;\r\n    }\r\n    let isCustomElement;\r\n    try {\r\n        if (customElements.get(tagName))\r\n            isCustomElement = true;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return {\r\n        type: NodeType.Element,\r\n        tagName,\r\n        attributes,\r\n        childNodes: [],\r\n        isSVG: isSVGElement(n) || undefined,\r\n        needBlock,\r\n        rootId,\r\n        isCustom: isCustomElement,\r\n    };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n    if (maybeAttr === undefined || maybeAttr === null) {\r\n        return '';\r\n    }\r\n    else {\r\n        return maybeAttr.toLowerCase();\r\n    }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n    if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n        return true;\r\n    }\r\n    else if (sn.type === NodeType.Element) {\r\n        if (slimDOMOptions.script &&\r\n            (sn.tagName === 'script' ||\r\n                (sn.tagName === 'link' &&\r\n                    (sn.attributes.rel === 'preload' ||\r\n                        sn.attributes.rel === 'modulepreload') &&\r\n                    sn.attributes.as === 'script') ||\r\n                (sn.tagName === 'link' &&\r\n                    sn.attributes.rel === 'prefetch' &&\r\n                    typeof sn.attributes.href === 'string' &&\r\n                    sn.attributes.href.endsWith('.js')))) {\r\n            return true;\r\n        }\r\n        else if (slimDOMOptions.headFavicon &&\r\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n                (sn.tagName === 'meta' &&\r\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n            return true;\r\n        }\r\n        else if (sn.tagName === 'meta') {\r\n            if (slimDOMOptions.headMetaDescKeywords &&\r\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaSocial &&\r\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaRobots &&\r\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaHttpEquiv &&\r\n                sn.attributes['http-equiv'] !== undefined) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaAuthorship &&\r\n                (lowerIfExists(sn.attributes.name) === 'author' ||\r\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\r\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\r\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\r\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaVerification &&\r\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\r\n    let { preserveWhiteSpace = true } = options;\r\n    const _serializedNode = serializeNode(n, {\r\n        doc,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        maskAllText,\r\n        unblockSelector,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement,\r\n    });\r\n    if (!_serializedNode) {\r\n        console.warn(n, 'not serialized');\r\n        return null;\r\n    }\r\n    let id;\r\n    if (mirror.hasNode(n)) {\r\n        id = mirror.getId(n);\r\n    }\r\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n        (!preserveWhiteSpace &&\r\n            _serializedNode.type === NodeType.Text &&\r\n            !_serializedNode.isStyle &&\r\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n        id = IGNORED_NODE;\r\n    }\r\n    else {\r\n        id = genId();\r\n    }\r\n    const serializedNode = Object.assign(_serializedNode, { id });\r\n    mirror.add(n, serializedNode);\r\n    if (id === IGNORED_NODE) {\r\n        return null;\r\n    }\r\n    if (onSerialize) {\r\n        onSerialize(n);\r\n    }\r\n    let recordChild = !skipChild;\r\n    if (serializedNode.type === NodeType.Element) {\r\n        recordChild = recordChild && !serializedNode.needBlock;\r\n        delete serializedNode.needBlock;\r\n        const shadowRoot = n.shadowRoot;\r\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n            serializedNode.isShadowHost = true;\r\n    }\r\n    if ((serializedNode.type === NodeType.Document ||\r\n        serializedNode.type === NodeType.Element) &&\r\n        recordChild) {\r\n        if (slimDOMOptions.headWhitespace &&\r\n            serializedNode.type === NodeType.Element &&\r\n            serializedNode.tagName === 'head') {\r\n            preserveWhiteSpace = false;\r\n        }\r\n        const bypassOptions = {\r\n            doc,\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            maskAllText,\r\n            unblockSelector,\r\n            maskTextClass,\r\n            unmaskTextClass,\r\n            maskTextSelector,\r\n            unmaskTextSelector,\r\n            skipChild,\r\n            inlineStylesheet,\r\n            maskInputOptions,\r\n            maskAttributeFn,\r\n            maskTextFn,\r\n            maskInputFn,\r\n            slimDOMOptions,\r\n            dataURLOptions,\r\n            inlineImages,\r\n            recordCanvas,\r\n            preserveWhiteSpace,\r\n            onSerialize,\r\n            onIframeLoad,\r\n            iframeLoadTimeout,\r\n            onStylesheetLoad,\r\n            stylesheetLoadTimeout,\r\n            keepIframeSrcFn,\r\n        };\r\n        for (const childN of Array.from(n.childNodes)) {\r\n            const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n            if (serializedChildNode) {\r\n                serializedNode.childNodes.push(serializedChildNode);\r\n            }\r\n        }\r\n        if (isElement(n) && n.shadowRoot) {\r\n            for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n                const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n                if (serializedChildNode) {\r\n                    isNativeShadowDom(n.shadowRoot) &&\r\n                        (serializedChildNode.isShadow = true);\r\n                    serializedNode.childNodes.push(serializedChildNode);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (n.parentNode &&\r\n        isShadowRoot(n.parentNode) &&\r\n        isNativeShadowDom(n.parentNode)) {\r\n        serializedNode.isShadow = true;\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'iframe') {\r\n        onceIframeLoaded(n, () => {\r\n            const iframeDoc = n.contentDocument;\r\n            if (iframeDoc && onIframeLoad) {\r\n                const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n                    doc: iframeDoc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedIframeNode) {\r\n                    onIframeLoad(n, serializedIframeNode);\r\n                }\r\n            }\r\n        }, iframeLoadTimeout);\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'link' &&\r\n        serializedNode.attributes.rel === 'stylesheet') {\r\n        onceStylesheetLoaded(n, () => {\r\n            if (onStylesheetLoad) {\r\n                const serializedLinkNode = serializeNodeWithId(n, {\r\n                    doc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedLinkNode) {\r\n                    onStylesheetLoad(n, serializedLinkNode);\r\n                }\r\n            }\r\n        }, stylesheetLoadTimeout);\r\n    }\r\n    return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n    const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n        }\r\n        : maskAllInputs === false\r\n            ? {}\r\n            : maskAllInputs;\r\n    const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n        ?\r\n            {\r\n                script: true,\r\n                comment: true,\r\n                headFavicon: true,\r\n                headWhitespace: true,\r\n                headMetaDescKeywords: slimDOM === 'all',\r\n                headMetaSocial: true,\r\n                headMetaRobots: true,\r\n                headMetaHttpEquiv: true,\r\n                headMetaAuthorship: true,\r\n                headMetaVerification: true,\r\n            }\r\n        : slimDOM === false\r\n            ? {}\r\n            : slimDOM;\r\n    return serializeNodeWithId(n, {\r\n        doc: n,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        unblockSelector,\r\n        maskAllText,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        skipChild: false,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        slimDOMOptions,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        preserveWhiteSpace,\r\n        onSerialize,\r\n        onIframeLoad,\r\n        iframeLoadTimeout,\r\n        onStylesheetLoad,\r\n        stylesheetLoadTimeout,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement: false,\r\n    });\r\n}\r\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n    let lineno = 1;\r\n    let column = 1;\r\n    function updatePosition(str) {\r\n        const lines = str.match(/\\n/g);\r\n        if (lines) {\r\n            lineno += lines.length;\r\n        }\r\n        const i = str.lastIndexOf('\\n');\r\n        column = i === -1 ? column + str.length : str.length - i;\r\n    }\r\n    function position() {\r\n        const start = { line: lineno, column };\r\n        return (node) => {\r\n            node.position = new Position(start);\r\n            whitespace();\r\n            return node;\r\n        };\r\n    }\r\n    class Position {\r\n        constructor(start) {\r\n            this.start = start;\r\n            this.end = { line: lineno, column };\r\n            this.source = options.source;\r\n        }\r\n    }\r\n    Position.prototype.content = css;\r\n    const errorsList = [];\r\n    function error(msg) {\r\n        const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n        err.reason = msg;\r\n        err.filename = options.source;\r\n        err.line = lineno;\r\n        err.column = column;\r\n        err.source = css;\r\n        if (options.silent) {\r\n            errorsList.push(err);\r\n        }\r\n        else {\r\n            throw err;\r\n        }\r\n    }\r\n    function stylesheet() {\r\n        const rulesList = rules();\r\n        return {\r\n            type: 'stylesheet',\r\n            stylesheet: {\r\n                source: options.source,\r\n                rules: rulesList,\r\n                parsingErrors: errorsList,\r\n            },\r\n        };\r\n    }\r\n    function open() {\r\n        return match(/^{\\s*/);\r\n    }\r\n    function close() {\r\n        return match(/^}/);\r\n    }\r\n    function rules() {\r\n        let node;\r\n        const rules = [];\r\n        whitespace();\r\n        comments(rules);\r\n        while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n            if (node) {\r\n                rules.push(node);\r\n                comments(rules);\r\n            }\r\n        }\r\n        return rules;\r\n    }\r\n    function match(re) {\r\n        const m = re.exec(css);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const str = m[0];\r\n        updatePosition(str);\r\n        css = css.slice(str.length);\r\n        return m;\r\n    }\r\n    function whitespace() {\r\n        match(/^\\s*/);\r\n    }\r\n    function comments(rules = []) {\r\n        let c;\r\n        while ((c = comment())) {\r\n            if (c) {\r\n                rules.push(c);\r\n            }\r\n            c = comment();\r\n        }\r\n        return rules;\r\n    }\r\n    function comment() {\r\n        const pos = position();\r\n        if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n            return;\r\n        }\r\n        let i = 2;\r\n        while ('' !== css.charAt(i) &&\r\n            ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n            ++i;\r\n        }\r\n        i += 2;\r\n        if ('' === css.charAt(i - 1)) {\r\n            return error('End of comment missing');\r\n        }\r\n        const str = css.slice(2, i - 2);\r\n        column += 2;\r\n        updatePosition(str);\r\n        css = css.slice(i);\r\n        column += 2;\r\n        return pos({\r\n            type: 'comment',\r\n            comment: str,\r\n        });\r\n    }\r\n    function selector() {\r\n        const m = match(/^([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return trim(m[0])\r\n            .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n            .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n            return m.replace(/,/g, '\\u200C');\r\n        })\r\n            .split(/\\s*(?![^(]*\\)),\\s*/)\r\n            .map((s) => {\r\n            return s.replace(/\\u200C/g, ',');\r\n        });\r\n    }\r\n    function declaration() {\r\n        const pos = position();\r\n        const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n        if (!propMatch) {\r\n            return;\r\n        }\r\n        const prop = trim(propMatch[0]);\r\n        if (!match(/^:\\s*/)) {\r\n            return error(`property missing ':'`);\r\n        }\r\n        const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n        const ret = pos({\r\n            type: 'declaration',\r\n            property: prop.replace(commentre, ''),\r\n            value: val ? trim(val[0]).replace(commentre, '') : '',\r\n        });\r\n        match(/^[;\\s]*/);\r\n        return ret;\r\n    }\r\n    function declarations() {\r\n        const decls = [];\r\n        if (!open()) {\r\n            return error(`missing '{'`);\r\n        }\r\n        comments(decls);\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            if (decl !== false) {\r\n                decls.push(decl);\r\n                comments(decls);\r\n            }\r\n            decl = declaration();\r\n        }\r\n        if (!close()) {\r\n            return error(`missing '}'`);\r\n        }\r\n        return decls;\r\n    }\r\n    function keyframe() {\r\n        let m;\r\n        const vals = [];\r\n        const pos = position();\r\n        while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n            vals.push(m[1]);\r\n            match(/^,\\s*/);\r\n        }\r\n        if (!vals.length) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'keyframe',\r\n            values: vals,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    function atkeyframes() {\r\n        const pos = position();\r\n        let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = m[1];\r\n        m = match(/^([-\\w]+)\\s*/);\r\n        if (!m) {\r\n            return error('@keyframes missing name');\r\n        }\r\n        const name = m[1];\r\n        if (!open()) {\r\n            return error(`@keyframes missing '{'`);\r\n        }\r\n        let frame;\r\n        let frames = comments();\r\n        while ((frame = keyframe())) {\r\n            frames.push(frame);\r\n            frames = frames.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@keyframes missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'keyframes',\r\n            name,\r\n            vendor,\r\n            keyframes: frames,\r\n        });\r\n    }\r\n    function atsupports() {\r\n        const pos = position();\r\n        const m = match(/^@supports *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const supports = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@supports missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@supports missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'supports',\r\n            supports,\r\n            rules: style,\r\n        });\r\n    }\r\n    function athost() {\r\n        const pos = position();\r\n        const m = match(/^@host\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@host missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@host missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'host',\r\n            rules: style,\r\n        });\r\n    }\r\n    function atmedia() {\r\n        const pos = position();\r\n        const m = match(/^@media *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const media = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@media missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@media missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'media',\r\n            media,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atcustommedia() {\r\n        const pos = position();\r\n        const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'custom-media',\r\n            name: trim(m[1]),\r\n            media: trim(m[2]),\r\n        });\r\n    }\r\n    function atpage() {\r\n        const pos = position();\r\n        const m = match(/^@page */);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const sel = selector() || [];\r\n        if (!open()) {\r\n            return error(`@page missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@page missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'page',\r\n            selectors: sel,\r\n            declarations: decls,\r\n        });\r\n    }\r\n    function atdocument() {\r\n        const pos = position();\r\n        const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = trim(m[1]);\r\n        const doc = trim(m[2]);\r\n        if (!open()) {\r\n            return error(`@document missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@document missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'document',\r\n            document: doc,\r\n            vendor,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atfontface() {\r\n        const pos = position();\r\n        const m = match(/^@font-face\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@font-face missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@font-face missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'font-face',\r\n            declarations: decls,\r\n        });\r\n    }\r\n    const atimport = _compileAtrule('import');\r\n    const atcharset = _compileAtrule('charset');\r\n    const atnamespace = _compileAtrule('namespace');\r\n    function _compileAtrule(name) {\r\n        const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n        return () => {\r\n            const pos = position();\r\n            const m = match(re);\r\n            if (!m) {\r\n                return;\r\n            }\r\n            const ret = { type: name };\r\n            ret[name] = m[1].trim();\r\n            return pos(ret);\r\n        };\r\n    }\r\n    function atrule() {\r\n        if (css[0] !== '@') {\r\n            return;\r\n        }\r\n        return (atkeyframes() ||\r\n            atmedia() ||\r\n            atcustommedia() ||\r\n            atsupports() ||\r\n            atimport() ||\r\n            atcharset() ||\r\n            atnamespace() ||\r\n            atdocument() ||\r\n            atpage() ||\r\n            athost() ||\r\n            atfontface());\r\n    }\r\n    function rule() {\r\n        const pos = position();\r\n        const sel = selector();\r\n        if (!sel) {\r\n            return error('selector missing');\r\n        }\r\n        comments();\r\n        return pos({\r\n            type: 'rule',\r\n            selectors: sel,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n    return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n    const isNode = obj && typeof obj.type === 'string';\r\n    const childParent = isNode ? obj : parent;\r\n    for (const k of Object.keys(obj)) {\r\n        const value = obj[k];\r\n        if (Array.isArray(value)) {\r\n            value.forEach((v) => {\r\n                addParent(v, childParent);\r\n            });\r\n        }\r\n        else if (value && typeof value === 'object') {\r\n            addParent(value, childParent);\r\n        }\r\n    }\r\n    if (isNode) {\r\n        Object.defineProperty(obj, 'parent', {\r\n            configurable: true,\r\n            writable: true,\r\n            enumerable: false,\r\n            value: parent || null,\r\n        });\r\n    }\r\n    return obj;\r\n}\n\nconst tagMap = {\r\n    script: 'noscript',\r\n    altglyph: 'altGlyph',\r\n    altglyphdef: 'altGlyphDef',\r\n    altglyphitem: 'altGlyphItem',\r\n    animatecolor: 'animateColor',\r\n    animatemotion: 'animateMotion',\r\n    animatetransform: 'animateTransform',\r\n    clippath: 'clipPath',\r\n    feblend: 'feBlend',\r\n    fecolormatrix: 'feColorMatrix',\r\n    fecomponenttransfer: 'feComponentTransfer',\r\n    fecomposite: 'feComposite',\r\n    feconvolvematrix: 'feConvolveMatrix',\r\n    fediffuselighting: 'feDiffuseLighting',\r\n    fedisplacementmap: 'feDisplacementMap',\r\n    fedistantlight: 'feDistantLight',\r\n    fedropshadow: 'feDropShadow',\r\n    feflood: 'feFlood',\r\n    fefunca: 'feFuncA',\r\n    fefuncb: 'feFuncB',\r\n    fefuncg: 'feFuncG',\r\n    fefuncr: 'feFuncR',\r\n    fegaussianblur: 'feGaussianBlur',\r\n    feimage: 'feImage',\r\n    femerge: 'feMerge',\r\n    femergenode: 'feMergeNode',\r\n    femorphology: 'feMorphology',\r\n    feoffset: 'feOffset',\r\n    fepointlight: 'fePointLight',\r\n    fespecularlighting: 'feSpecularLighting',\r\n    fespotlight: 'feSpotLight',\r\n    fetile: 'feTile',\r\n    feturbulence: 'feTurbulence',\r\n    foreignobject: 'foreignObject',\r\n    glyphref: 'glyphRef',\r\n    lineargradient: 'linearGradient',\r\n    radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n    let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n    if (tagName === 'link' && n.attributes._cssText) {\r\n        tagName = 'style';\r\n    }\r\n    return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n    const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\r\n    if (cachedStyle)\r\n        return cachedStyle;\r\n    if (cssText.length >= 1000000) {\r\n        return cssText;\r\n    }\r\n    const ast = parse(cssText, {\r\n        silent: true,\r\n    });\r\n    if (!ast.stylesheet) {\r\n        return cssText;\r\n    }\r\n    const selectors = [];\r\n    ast.stylesheet.rules.forEach((rule) => {\r\n        if ('selectors' in rule) {\r\n            (rule.selectors || []).forEach((selector) => {\r\n                if (HOVER_SELECTOR.test(selector)) {\r\n                    selectors.push(selector);\r\n                }\r\n            });\r\n        }\r\n    });\r\n    if (selectors.length === 0) {\r\n        return cssText;\r\n    }\r\n    const selectorMatcher = new RegExp(selectors\r\n        .filter((selector, index) => selectors.indexOf(selector) === index)\r\n        .sort((a, b) => b.length - a.length)\r\n        .map((selector) => {\r\n        return escapeRegExp(selector);\r\n    })\r\n        .join('|'), 'g');\r\n    const result = cssText.replace(selectorMatcher, (selector) => {\r\n        const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n        return `${selector}, ${newSelector}`;\r\n    });\r\n    cache?.stylesWithHoverClass.set(cssText, result);\r\n    return result;\r\n}\r\nfunction createCache() {\r\n    const stylesWithHoverClass = new Map();\r\n    return {\r\n        stylesWithHoverClass,\r\n    };\r\n}\r\nfunction buildNode(n, options) {\r\n    const { doc, hackCss, cache } = options;\r\n    switch (n.type) {\r\n        case NodeType.Document:\r\n            return doc.implementation.createDocument(null, '', null);\r\n        case NodeType.DocumentType:\r\n            return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n        case NodeType.Element: {\r\n            const tagName = getTagName(n);\r\n            let node;\r\n            if (n.isSVG) {\r\n                node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n            }\r\n            else {\r\n                if (n.isCustom &&\r\n                    doc.defaultView?.customElements &&\r\n                    !doc.defaultView.customElements.get(n.tagName))\r\n                    doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n                    });\r\n                node = doc.createElement(tagName);\r\n            }\r\n            const specialAttributes = {};\r\n            for (const name in n.attributes) {\r\n                if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n                    continue;\r\n                }\r\n                let value = n.attributes[name];\r\n                if (tagName === 'option' &&\r\n                    name === 'selected' &&\r\n                    value === false) {\r\n                    continue;\r\n                }\r\n                if (value === null) {\r\n                    continue;\r\n                }\r\n                if (value === true)\r\n                    value = '';\r\n                if (name.startsWith('rr_')) {\r\n                    specialAttributes[name] = value;\r\n                    continue;\r\n                }\r\n                const isTextarea = tagName === 'textarea' && name === 'value';\r\n                const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n                if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n                    value = addHoverClass(value, cache);\r\n                }\r\n                if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n                    const child = doc.createTextNode(value);\r\n                    for (const c of Array.from(node.childNodes)) {\r\n                        if (c.nodeType === node.TEXT_NODE) {\r\n                            node.removeChild(c);\r\n                        }\r\n                    }\r\n                    node.appendChild(child);\r\n                    continue;\r\n                }\r\n                try {\r\n                    if (n.isSVG && name === 'xlink:href') {\r\n                        node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n                    }\r\n                    else if (name === 'onload' ||\r\n                        name === 'onclick' ||\r\n                        name.substring(0, 7) === 'onmouse') {\r\n                        node.setAttribute('_' + name, value.toString());\r\n                    }\r\n                    else if (tagName === 'meta' &&\r\n                        n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n                        name === 'content') {\r\n                        node.setAttribute('csp-content', value.toString());\r\n                        continue;\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        (n.attributes.rel === 'preload' ||\r\n                            n.attributes.rel === 'modulepreload') &&\r\n                        n.attributes.as === 'script') {\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        n.attributes.rel === 'prefetch' &&\r\n                        typeof n.attributes.href === 'string' &&\r\n                        n.attributes.href.endsWith('.js')) {\r\n                    }\r\n                    else if (tagName === 'img' &&\r\n                        n.attributes.srcset &&\r\n                        n.attributes.rr_dataURL) {\r\n                        node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n                    }\r\n                    else {\r\n                        node.setAttribute(name, value.toString());\r\n                    }\r\n                }\r\n                catch (error) {\r\n                }\r\n            }\r\n            for (const name in specialAttributes) {\r\n                const value = specialAttributes[name];\r\n                if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n                    const image = document.createElement('img');\r\n                    image.onload = () => {\r\n                        const ctx = node.getContext('2d');\r\n                        if (ctx) {\r\n                            ctx.drawImage(image, 0, 0, image.width, image.height);\r\n                        }\r\n                    };\r\n                    image.src = value.toString();\r\n                    if (node.RRNodeType)\r\n                        node.rr_dataURL = value.toString();\r\n                }\r\n                else if (tagName === 'img' && name === 'rr_dataURL') {\r\n                    const image = node;\r\n                    if (!image.currentSrc.startsWith('data:')) {\r\n                        image.setAttribute('rrweb-original-src', n.attributes.src);\r\n                        image.src = value.toString();\r\n                    }\r\n                }\r\n                if (name === 'rr_width') {\r\n                    node.style.setProperty('width', value.toString());\r\n                }\r\n                else if (name === 'rr_height') {\r\n                    node.style.setProperty('height', value.toString());\r\n                }\r\n                else if (name === 'rr_mediaCurrentTime' &&\r\n                    typeof value === 'number') {\r\n                    node.currentTime = value;\r\n                }\r\n                else if (name === 'rr_mediaState') {\r\n                    switch (value) {\r\n                        case 'played':\r\n                            node\r\n                                .play()\r\n                                .catch((e) => console.warn('media playback error', e));\r\n                            break;\r\n                        case 'paused':\r\n                            node.pause();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            if (n.isShadowHost) {\r\n                if (!node.shadowRoot) {\r\n                    node.attachShadow({ mode: 'open' });\r\n                }\r\n                else {\r\n                    while (node.shadowRoot.firstChild) {\r\n                        node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n                    }\r\n                }\r\n            }\r\n            return node;\r\n        }\r\n        case NodeType.Text:\r\n            return doc.createTextNode(n.isStyle && hackCss\r\n                ? addHoverClass(n.textContent, cache)\r\n                : n.textContent);\r\n        case NodeType.CDATA:\r\n            return doc.createCDATASection(n.textContent);\r\n        case NodeType.Comment:\r\n            return doc.createComment(n.textContent);\r\n        default:\r\n            return null;\r\n    }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n    const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n    if (mirror.has(n.id)) {\r\n        const nodeInMirror = mirror.getNode(n.id);\r\n        const meta = mirror.getMeta(nodeInMirror);\r\n        if (isNodeMetaEqual(meta, n))\r\n            return mirror.getNode(n.id);\r\n    }\r\n    let node = buildNode(n, { doc, hackCss, cache });\r\n    if (!node) {\r\n        return null;\r\n    }\r\n    if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n        mirror.replace(n.rootId, doc);\r\n    }\r\n    if (n.type === NodeType.Document) {\r\n        doc.close();\r\n        doc.open();\r\n        if (n.compatMode === 'BackCompat' &&\r\n            n.childNodes &&\r\n            n.childNodes[0].type !== NodeType.DocumentType) {\r\n            if (n.childNodes[0].type === NodeType.Element &&\r\n                'xmlns' in n.childNodes[0].attributes &&\r\n                n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n            }\r\n            else {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n            }\r\n        }\r\n        node = doc;\r\n    }\r\n    mirror.add(node, n);\r\n    if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n        !skipChild) {\r\n        for (const childN of n.childNodes) {\r\n            const childNode = buildNodeWithSN(childN, {\r\n                doc,\r\n                mirror,\r\n                skipChild: false,\r\n                hackCss,\r\n                afterAppend,\r\n                cache,\r\n            });\r\n            if (!childNode) {\r\n                console.warn('Failed to rebuild', childN);\r\n                continue;\r\n            }\r\n            if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n                node.shadowRoot.appendChild(childNode);\r\n            }\r\n            else if (n.type === NodeType.Document &&\r\n                childN.type == NodeType.Element) {\r\n                const htmlElement = childNode;\r\n                let body = null;\r\n                htmlElement.childNodes.forEach((child) => {\r\n                    if (child.nodeName === 'BODY')\r\n                        body = child;\r\n                });\r\n                if (body) {\r\n                    htmlElement.removeChild(body);\r\n                    node.appendChild(childNode);\r\n                    htmlElement.appendChild(body);\r\n                }\r\n                else {\r\n                    node.appendChild(childNode);\r\n                }\r\n            }\r\n            else {\r\n                node.appendChild(childNode);\r\n            }\r\n            if (afterAppend) {\r\n                afterAppend(childNode, childN.id);\r\n            }\r\n        }\r\n    }\r\n    return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n    function walk(node) {\r\n        onVisit(node);\r\n    }\r\n    for (const id of mirror.getIds()) {\r\n        if (mirror.has(id)) {\r\n            walk(mirror.getNode(id));\r\n        }\r\n    }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n    const n = mirror.getMeta(node);\r\n    if (n?.type !== NodeType.Element) {\r\n        return;\r\n    }\r\n    const el = node;\r\n    for (const name in n.attributes) {\r\n        if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n            name.startsWith('rr_'))) {\r\n            continue;\r\n        }\r\n        const value = n.attributes[name];\r\n        if (name === 'rr_scrollLeft') {\r\n            el.scrollLeft = value;\r\n        }\r\n        if (name === 'rr_scrollTop') {\r\n            el.scrollTop = value;\r\n        }\r\n    }\r\n}\r\nfunction rebuild(n, options) {\r\n    const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n    const node = buildNodeWithSN(n, {\r\n        doc,\r\n        mirror,\r\n        skipChild: false,\r\n        hackCss,\r\n        afterAppend,\r\n        cache,\r\n    });\r\n    visit(mirror, (visitedNode) => {\r\n        if (onVisit) {\r\n            onVisit(visitedNode);\r\n        }\r\n        handleScroll(visitedNode, mirror);\r\n    });\r\n    return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute };\n","import { distanceToMatch, IGNORED_NODE, isShadowRoot, createMatchPredicate } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n    const options = { capture: true, passive: true };\r\n    target.addEventListener(type, fn, options);\r\n    return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n    '\\r\\n' +\r\n    'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n    '\\r\\n' +\r\n    'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n    map: {},\r\n    getId() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return -1;\r\n    },\r\n    getNode() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return null;\r\n    },\r\n    removeNodeFromMap() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n    has() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return false;\r\n    },\r\n    reset() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n    _mirror = new Proxy(_mirror, {\r\n        get(target, prop, receiver) {\r\n            if (prop === 'map') {\r\n                console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n            }\r\n            return Reflect.get(target, prop, receiver);\r\n        },\r\n    });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n    let timeout = null;\r\n    let previous = 0;\r\n    return function (...args) {\r\n        const now = Date.now();\r\n        if (!previous && options.leading === false) {\r\n            previous = now;\r\n        }\r\n        const remaining = wait - (now - previous);\r\n        const context = this;\r\n        if (remaining <= 0 || remaining > wait) {\r\n            if (timeout) {\r\n                clearTimeout(timeout);\r\n                timeout = null;\r\n            }\r\n            previous = now;\r\n            func.apply(context, args);\r\n        }\r\n        else if (!timeout && options.trailing !== false) {\r\n            timeout = setTimeout(() => {\r\n                previous = options.leading === false ? 0 : Date.now();\r\n                timeout = null;\r\n                func.apply(context, args);\r\n            }, remaining);\r\n        }\r\n    };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n    const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n    win.Object.defineProperty(target, key, isRevoked\r\n        ? d\r\n        : {\r\n            set(value) {\r\n                setTimeout(() => {\r\n                    d.set.call(this, value);\r\n                }, 0);\r\n                if (original && original.set) {\r\n                    original.set.call(this, value);\r\n                }\r\n            },\r\n        });\r\n    return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n    try {\r\n        if (!(name in source)) {\r\n            return () => {\r\n            };\r\n        }\r\n        const original = source[name];\r\n        const wrapped = replacement(original);\r\n        if (typeof wrapped === 'function') {\r\n            wrapped.prototype = wrapped.prototype || {};\r\n            Object.defineProperties(wrapped, {\r\n                __rrweb_original__: {\r\n                    enumerable: false,\r\n                    value: original,\r\n                },\r\n            });\r\n        }\r\n        source[name] = wrapped;\r\n        return () => {\r\n            source[name] = original;\r\n        };\r\n    }\r\n    catch {\r\n        return () => {\r\n        };\r\n    }\r\n}\r\nlet nowTimestamp = Date.now;\r\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\r\n    nowTimestamp = () => new Date().getTime();\r\n}\r\nfunction getWindowScroll(win) {\r\n    const doc = win.document;\r\n    return {\r\n        left: doc.scrollingElement\r\n            ? doc.scrollingElement.scrollLeft\r\n            : win.pageXOffset !== undefined\r\n                ? win.pageXOffset\r\n                : doc?.documentElement.scrollLeft ||\r\n                    doc?.body?.parentElement?.scrollLeft ||\r\n                    doc?.body?.scrollLeft ||\r\n                    0,\r\n        top: doc.scrollingElement\r\n            ? doc.scrollingElement.scrollTop\r\n            : win.pageYOffset !== undefined\r\n                ? win.pageYOffset\r\n                : doc?.documentElement.scrollTop ||\r\n                    doc?.body?.parentElement?.scrollTop ||\r\n                    doc?.body?.scrollTop ||\r\n                    0,\r\n    };\r\n}\r\nfunction getWindowHeight() {\r\n    return (window.innerHeight ||\r\n        (document.documentElement && document.documentElement.clientHeight) ||\r\n        (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n    return (window.innerWidth ||\r\n        (document.documentElement && document.documentElement.clientWidth) ||\r\n        (document.body && document.body.clientWidth));\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\r\n    if (!node) {\r\n        return false;\r\n    }\r\n    const el = node.nodeType === node.ELEMENT_NODE\r\n        ? node\r\n        : node.parentElement;\r\n    if (!el)\r\n        return false;\r\n    const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\r\n    if (!checkAncestors) {\r\n        const isUnblocked = unblockSelector && el.matches(unblockSelector);\r\n        return blockedPredicate(el) && !isUnblocked;\r\n    }\r\n    const blockDistance = distanceToMatch(el, blockedPredicate);\r\n    let unblockDistance = -1;\r\n    if (blockDistance < 0) {\r\n        return false;\r\n    }\r\n    if (unblockSelector) {\r\n        unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\r\n    }\r\n    if (blockDistance > -1 && unblockDistance < 0) {\r\n        return true;\r\n    }\r\n    return blockDistance < unblockDistance;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n    return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n    return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n    if (isShadowRoot(target)) {\r\n        return false;\r\n    }\r\n    const id = mirror.getId(target);\r\n    if (!mirror.has(id)) {\r\n        return true;\r\n    }\r\n    if (target.parentNode &&\r\n        target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n        return false;\r\n    }\r\n    if (!target.parentNode) {\r\n        return true;\r\n    }\r\n    return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction legacy_isTouchEvent(event) {\r\n    return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n    if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n        win.NodeList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n        win.DOMTokenList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if (!Node.prototype.contains) {\r\n        Node.prototype.contains = (...args) => {\r\n            let node = args[0];\r\n            if (!(0 in args)) {\r\n                throw new TypeError('1 argument is required');\r\n            }\r\n            do {\r\n                if (this === node) {\r\n                    return true;\r\n                }\r\n            } while ((node = node && node.parentNode));\r\n            return false;\r\n        };\r\n    }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n    const queueNodeMap = {};\r\n    const putIntoMap = (m, parent) => {\r\n        const nodeInTree = {\r\n            value: m,\r\n            parent,\r\n            children: [],\r\n        };\r\n        queueNodeMap[m.node.id] = nodeInTree;\r\n        return nodeInTree;\r\n    };\r\n    const queueNodeTrees = [];\r\n    for (const mutation of queue) {\r\n        const { nextId, parentId } = mutation;\r\n        if (nextId && nextId in queueNodeMap) {\r\n            const nextInTree = queueNodeMap[nextId];\r\n            if (nextInTree.parent) {\r\n                const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n                nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n            }\r\n            else {\r\n                const idx = queueNodeTrees.indexOf(nextInTree);\r\n                queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n            }\r\n            continue;\r\n        }\r\n        if (parentId in queueNodeMap) {\r\n            const parentInTree = queueNodeMap[parentId];\r\n            parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n            continue;\r\n        }\r\n        queueNodeTrees.push(putIntoMap(mutation, null));\r\n    }\r\n    return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n    cb(tree.value);\r\n    for (let i = tree.children.length - 1; i >= 0; i--) {\r\n        iterateResolveTree(tree.children[i], cb);\r\n    }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n    return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n    return Boolean(n.nodeName === 'LINK' &&\r\n        n.nodeType === n.ELEMENT_NODE &&\r\n        n.getAttribute &&\r\n        n.getAttribute('rel') === 'stylesheet' &&\r\n        mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n    const frameElement = node.ownerDocument?.defaultView?.frameElement;\r\n    if (!frameElement || frameElement === rootIframe) {\r\n        return {\r\n            x: 0,\r\n            y: 0,\r\n            relativeScale: 1,\r\n            absoluteScale: 1,\r\n        };\r\n    }\r\n    const frameDimension = frameElement.getBoundingClientRect();\r\n    const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n    const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n    return {\r\n        x: frameDimension.x * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.x,\r\n        y: frameDimension.y * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.y,\r\n        relativeScale,\r\n        absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n    };\r\n}\r\nfunction hasShadowRoot(n) {\r\n    return Boolean(n?.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n    const rule = rules[position[0]];\r\n    if (position.length === 1) {\r\n        return rule;\r\n    }\r\n    else {\r\n        return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n    }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n    const positions = [...nestedIndex];\r\n    const index = positions.pop();\r\n    return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n    const idSet = new Set();\r\n    const uniqueMutations = [];\r\n    for (let i = mutations.length; i--;) {\r\n        const mutation = mutations[i];\r\n        if (!idSet.has(mutation.id)) {\r\n            uniqueMutations.push(mutation);\r\n            idSet.add(mutation.id);\r\n        }\r\n    }\r\n    return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n    constructor() {\r\n        this.id = 1;\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n    }\r\n    getId(stylesheet) {\r\n        return this.styleIDMap.get(stylesheet) ?? -1;\r\n    }\r\n    has(stylesheet) {\r\n        return this.styleIDMap.has(stylesheet);\r\n    }\r\n    add(stylesheet, id) {\r\n        if (this.has(stylesheet))\r\n            return this.getId(stylesheet);\r\n        let newId;\r\n        if (id === undefined) {\r\n            newId = this.id++;\r\n        }\r\n        else\r\n            newId = id;\r\n        this.styleIDMap.set(stylesheet, newId);\r\n        this.idStyleMap.set(newId, stylesheet);\r\n        return newId;\r\n    }\r\n    getStyle(id) {\r\n        return this.idStyleMap.get(id) || null;\r\n    }\r\n    reset() {\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n        this.id = 1;\r\n    }\r\n    generateId() {\r\n        return this.id++;\r\n    }\r\n}\r\nfunction getShadowHost(n) {\r\n    let shadowHost = null;\r\n    if (n.getRootNode?.()?.nodeType === Node.DOCUMENT_FRAGMENT_NODE &&\r\n        n.getRootNode().host)\r\n        shadowHost = n.getRootNode().host;\r\n    return shadowHost;\r\n}\r\nfunction getRootShadowHost(n) {\r\n    let rootShadowHost = n;\r\n    let shadowHost;\r\n    while ((shadowHost = getShadowHost(rootShadowHost)))\r\n        rootShadowHost = shadowHost;\r\n    return rootShadowHost;\r\n}\r\nfunction shadowHostInDom(n) {\r\n    const doc = n.ownerDocument;\r\n    if (!doc)\r\n        return false;\r\n    const shadowHost = getRootShadowHost(n);\r\n    return doc.contains(shadowHost);\r\n}\r\nfunction inDom(n) {\r\n    const doc = n.ownerDocument;\r\n    if (!doc)\r\n        return false;\r\n    return doc.contains(n) || shadowHostInDom(n);\r\n}\r\nlet cachedRequestAnimationFrameImplementation;\r\nfunction getRequestAnimationFrameImplementation() {\r\n    if (cachedRequestAnimationFrameImplementation) {\r\n        return cachedRequestAnimationFrameImplementation;\r\n    }\r\n    const document = window.document;\r\n    let requestAnimationFrameImplementation = window.requestAnimationFrame;\r\n    if (document && typeof document.createElement === 'function') {\r\n        try {\r\n            const sandbox = document.createElement('iframe');\r\n            sandbox.hidden = true;\r\n            document.head.appendChild(sandbox);\r\n            const contentWindow = sandbox.contentWindow;\r\n            if (contentWindow && contentWindow.requestAnimationFrame) {\r\n                requestAnimationFrameImplementation =\r\n                    contentWindow.requestAnimationFrame;\r\n            }\r\n            document.head.removeChild(sandbox);\r\n        }\r\n        catch (e) {\r\n        }\r\n    }\r\n    return (cachedRequestAnimationFrameImplementation =\r\n        requestAnimationFrameImplementation.bind(window));\r\n}\r\nfunction onRequestAnimationFrame(...rest) {\r\n    return getRequestAnimationFrameImplementation()(...rest);\r\n}\n\nexport { StyleSheetMirror, _mirror, getBaseDimension, getNestedRule, getPositionsAndIndex, getRootShadowHost, getShadowHost, getWindowHeight, getWindowScroll, getWindowWidth, hasShadowRoot, hookSetter, inDom, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, iterateResolveTree, legacy_isTouchEvent, nowTimestamp, on, onRequestAnimationFrame, patch, polyfill, queueToResolveTrees, shadowHostInDom, throttle, uniqueTextMutations };\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Polyfill for the nullish coalescing operator (`??`).\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nexport function _nullishCoalesce(lhs: unknown, rhsFn: () => unknown): unknown {\n  // by checking for loose equality to `null`, we catch both `null` and `undefined`\n  return lhs != null ? lhs : rhsFn();\n}\n\n// Sucrase version:\n// function _nullishCoalesce(lhs, rhsFn) {\n//   if (lhs != null) {\n//     return lhs;\n//   } else {\n//     return rhsFn();\n//   }\n// }\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n  ReplayerEvents2[\"Start\"] = \"start\";\n  ReplayerEvents2[\"Pause\"] = \"pause\";\n  ReplayerEvents2[\"Resume\"] = \"resume\";\n  ReplayerEvents2[\"Resize\"] = \"resize\";\n  ReplayerEvents2[\"Finish\"] = \"finish\";\n  ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n  ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n  ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n  ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n  ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n  ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n  ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n  ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n  ReplayerEvents2[\"Flush\"] = \"flush\";\n  ReplayerEvents2[\"StateChange\"] = \"state-change\";\n  ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n  ReplayerEvents2[\"Destroy\"] = \"destroy\";\n  return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, PointerTypes, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue, ignoreAttribute, transformAttribute, toLowerCase, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, hasShadowRoot, inDom, getShadowHost, isSerializedIframe, isSerializedStylesheet } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n    return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n    constructor() {\r\n        this.length = 0;\r\n        this.head = null;\r\n        this.tail = null;\r\n    }\r\n    get(position) {\r\n        if (position >= this.length) {\r\n            throw new Error('Position outside of list range');\r\n        }\r\n        let current = this.head;\r\n        for (let index = 0; index < position; index++) {\r\n            current = current?.next || null;\r\n        }\r\n        return current;\r\n    }\r\n    addNode(n) {\r\n        const node = {\r\n            value: n,\r\n            previous: null,\r\n            next: null,\r\n        };\r\n        n.__ln = node;\r\n        if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n            const current = n.previousSibling.__ln.next;\r\n            node.next = current;\r\n            node.previous = n.previousSibling.__ln;\r\n            n.previousSibling.__ln.next = node;\r\n            if (current) {\r\n                current.previous = node;\r\n            }\r\n        }\r\n        else if (n.nextSibling &&\r\n            isNodeInLinkedList(n.nextSibling) &&\r\n            n.nextSibling.__ln.previous) {\r\n            const current = n.nextSibling.__ln.previous;\r\n            node.previous = current;\r\n            node.next = n.nextSibling.__ln;\r\n            n.nextSibling.__ln.previous = node;\r\n            if (current) {\r\n                current.next = node;\r\n            }\r\n        }\r\n        else {\r\n            if (this.head) {\r\n                this.head.previous = node;\r\n            }\r\n            node.next = this.head;\r\n            this.head = node;\r\n        }\r\n        if (node.next === null) {\r\n            this.tail = node;\r\n        }\r\n        this.length++;\r\n    }\r\n    removeNode(n) {\r\n        const current = n.__ln;\r\n        if (!this.head) {\r\n            return;\r\n        }\r\n        if (!current.previous) {\r\n            this.head = current.next;\r\n            if (this.head) {\r\n                this.head.previous = null;\r\n            }\r\n            else {\r\n                this.tail = null;\r\n            }\r\n        }\r\n        else {\r\n            current.previous.next = current.next;\r\n            if (current.next) {\r\n                current.next.previous = current.previous;\r\n            }\r\n            else {\r\n                this.tail = current.previous;\r\n            }\r\n        }\r\n        if (n.__ln) {\r\n            delete n.__ln;\r\n        }\r\n        this.length--;\r\n    }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n    constructor() {\r\n        this.frozen = false;\r\n        this.locked = false;\r\n        this.texts = [];\r\n        this.attributes = [];\r\n        this.removes = [];\r\n        this.mapRemoves = [];\r\n        this.movedMap = {};\r\n        this.addedSet = new Set();\r\n        this.movedSet = new Set();\r\n        this.droppedSet = new Set();\r\n        this.processMutations = (mutations) => {\r\n            mutations.forEach(this.processMutation);\r\n            this.emit();\r\n        };\r\n        this.emit = () => {\r\n            if (this.frozen || this.locked) {\r\n                return;\r\n            }\r\n            const adds = [];\r\n            const addedIds = new Set();\r\n            const addList = new DoubleLinkedList();\r\n            const getNextId = (n) => {\r\n                let ns = n;\r\n                let nextId = IGNORED_NODE;\r\n                while (nextId === IGNORED_NODE) {\r\n                    ns = ns && ns.nextSibling;\r\n                    nextId = ns && this.mirror.getId(ns);\r\n                }\r\n                return nextId;\r\n            };\r\n            const pushAdd = (n) => {\r\n                if (!n.parentNode || !inDom(n)) {\r\n                    return;\r\n                }\r\n                const parentId = isShadowRoot(n.parentNode)\r\n                    ? this.mirror.getId(getShadowHost(n))\r\n                    : this.mirror.getId(n.parentNode);\r\n                const nextId = getNextId(n);\r\n                if (parentId === -1 || nextId === -1) {\r\n                    return addList.addNode(n);\r\n                }\r\n                const sn = serializeNodeWithId(n, {\r\n                    doc: this.doc,\r\n                    mirror: this.mirror,\r\n                    blockClass: this.blockClass,\r\n                    blockSelector: this.blockSelector,\r\n                    maskAllText: this.maskAllText,\r\n                    unblockSelector: this.unblockSelector,\r\n                    maskTextClass: this.maskTextClass,\r\n                    unmaskTextClass: this.unmaskTextClass,\r\n                    maskTextSelector: this.maskTextSelector,\r\n                    unmaskTextSelector: this.unmaskTextSelector,\r\n                    skipChild: true,\r\n                    newlyAddedElement: true,\r\n                    inlineStylesheet: this.inlineStylesheet,\r\n                    maskInputOptions: this.maskInputOptions,\r\n                    maskAttributeFn: this.maskAttributeFn,\r\n                    maskTextFn: this.maskTextFn,\r\n                    maskInputFn: this.maskInputFn,\r\n                    slimDOMOptions: this.slimDOMOptions,\r\n                    dataURLOptions: this.dataURLOptions,\r\n                    recordCanvas: this.recordCanvas,\r\n                    inlineImages: this.inlineImages,\r\n                    onSerialize: (currentN) => {\r\n                        if (isSerializedIframe(currentN, this.mirror)) {\r\n                            this.iframeManager.addIframe(currentN);\r\n                        }\r\n                        if (isSerializedStylesheet(currentN, this.mirror)) {\r\n                            this.stylesheetManager.trackLinkElement(currentN);\r\n                        }\r\n                        if (hasShadowRoot(n)) {\r\n                            this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n                        }\r\n                    },\r\n                    onIframeLoad: (iframe, childSn) => {\r\n                        this.iframeManager.attachIframe(iframe, childSn);\r\n                        this.shadowDomManager.observeAttachShadow(iframe);\r\n                    },\r\n                    onStylesheetLoad: (link, childSn) => {\r\n                        this.stylesheetManager.attachLinkElement(link, childSn);\r\n                    },\r\n                });\r\n                if (sn) {\r\n                    adds.push({\r\n                        parentId,\r\n                        nextId,\r\n                        node: sn,\r\n                    });\r\n                    addedIds.add(sn.id);\r\n                }\r\n            };\r\n            while (this.mapRemoves.length) {\r\n                this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n            }\r\n            for (const n of this.movedSet) {\r\n                if (isParentRemoved(this.removes, n, this.mirror) &&\r\n                    !this.movedSet.has(n.parentNode)) {\r\n                    continue;\r\n                }\r\n                pushAdd(n);\r\n            }\r\n            for (const n of this.addedSet) {\r\n                if (!isAncestorInSet(this.droppedSet, n) &&\r\n                    !isParentRemoved(this.removes, n, this.mirror)) {\r\n                    pushAdd(n);\r\n                }\r\n                else if (isAncestorInSet(this.movedSet, n)) {\r\n                    pushAdd(n);\r\n                }\r\n                else {\r\n                    this.droppedSet.add(n);\r\n                }\r\n            }\r\n            let candidate = null;\r\n            while (addList.length) {\r\n                let node = null;\r\n                if (candidate) {\r\n                    const parentId = this.mirror.getId(candidate.value.parentNode);\r\n                    const nextId = getNextId(candidate.value);\r\n                    if (parentId !== -1 && nextId !== -1) {\r\n                        node = candidate;\r\n                    }\r\n                }\r\n                if (!node) {\r\n                    let tailNode = addList.tail;\r\n                    while (tailNode) {\r\n                        const _node = tailNode;\r\n                        tailNode = tailNode.previous;\r\n                        if (_node) {\r\n                            const parentId = this.mirror.getId(_node.value.parentNode);\r\n                            const nextId = getNextId(_node.value);\r\n                            if (nextId === -1)\r\n                                continue;\r\n                            else if (parentId !== -1) {\r\n                                node = _node;\r\n                                break;\r\n                            }\r\n                            else {\r\n                                const unhandledNode = _node.value;\r\n                                if (unhandledNode.parentNode &&\r\n                                    unhandledNode.parentNode.nodeType ===\r\n                                        Node.DOCUMENT_FRAGMENT_NODE) {\r\n                                    const shadowHost = unhandledNode.parentNode\r\n                                        .host;\r\n                                    const parentId = this.mirror.getId(shadowHost);\r\n                                    if (parentId !== -1) {\r\n                                        node = _node;\r\n                                        break;\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                if (!node) {\r\n                    while (addList.head) {\r\n                        addList.removeNode(addList.head.value);\r\n                    }\r\n                    break;\r\n                }\r\n                candidate = node.previous;\r\n                addList.removeNode(node.value);\r\n                pushAdd(node.value);\r\n            }\r\n            const payload = {\r\n                texts: this.texts\r\n                    .map((text) => ({\r\n                    id: this.mirror.getId(text.node),\r\n                    value: text.value,\r\n                }))\r\n                    .filter((text) => !addedIds.has(text.id))\r\n                    .filter((text) => this.mirror.has(text.id)),\r\n                attributes: this.attributes\r\n                    .map((attribute) => {\r\n                    const { attributes } = attribute;\r\n                    if (typeof attributes.style === 'string') {\r\n                        const diffAsStr = JSON.stringify(attribute.styleDiff);\r\n                        const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\r\n                        if (diffAsStr.length < attributes.style.length) {\r\n                            if ((diffAsStr + unchangedAsStr).split('var(').length ===\r\n                                attributes.style.split('var(').length) {\r\n                                attributes.style = attribute.styleDiff;\r\n                            }\r\n                        }\r\n                    }\r\n                    return {\r\n                        id: this.mirror.getId(attribute.node),\r\n                        attributes: attributes,\r\n                    };\r\n                })\r\n                    .filter((attribute) => !addedIds.has(attribute.id))\r\n                    .filter((attribute) => this.mirror.has(attribute.id)),\r\n                removes: this.removes,\r\n                adds,\r\n            };\r\n            if (!payload.texts.length &&\r\n                !payload.attributes.length &&\r\n                !payload.removes.length &&\r\n                !payload.adds.length) {\r\n                return;\r\n            }\r\n            this.texts = [];\r\n            this.attributes = [];\r\n            this.removes = [];\r\n            this.addedSet = new Set();\r\n            this.movedSet = new Set();\r\n            this.droppedSet = new Set();\r\n            this.movedMap = {};\r\n            this.mutationCb(payload);\r\n        };\r\n        this.processMutation = (m) => {\r\n            if (isIgnored(m.target, this.mirror)) {\r\n                return;\r\n            }\r\n            let unattachedDoc;\r\n            try {\r\n                unattachedDoc = document.implementation.createHTMLDocument();\r\n            }\r\n            catch (e) {\r\n                unattachedDoc = this.doc;\r\n            }\r\n            switch (m.type) {\r\n                case 'characterData': {\r\n                    const value = m.target.textContent;\r\n                    if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\r\n                        value !== m.oldValue) {\r\n                        this.texts.push({\r\n                            value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\r\n                                ? this.maskTextFn\r\n                                    ? this.maskTextFn(value)\r\n                                    : value.replace(/[\\S]/g, '*')\r\n                                : value,\r\n                            node: m.target,\r\n                        });\r\n                    }\r\n                    break;\r\n                }\r\n                case 'attributes': {\r\n                    const target = m.target;\r\n                    let attributeName = m.attributeName;\r\n                    let value = m.target.getAttribute(attributeName);\r\n                    if (attributeName === 'value') {\r\n                        const type = getInputType(target);\r\n                        const tagName = target.tagName;\r\n                        value = getInputValue(target, tagName, type);\r\n                        const isInputMasked = shouldMaskInput({\r\n                            maskInputOptions: this.maskInputOptions,\r\n                            tagName,\r\n                            type,\r\n                        });\r\n                        const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\r\n                        value = maskInputValue({\r\n                            isMasked: forceMask,\r\n                            element: target,\r\n                            value,\r\n                            maskInputFn: this.maskInputFn,\r\n                        });\r\n                    }\r\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n                        value === m.oldValue) {\r\n                        return;\r\n                    }\r\n                    let item = this.attributes.find((a) => a.node === m.target);\r\n                    if (target.tagName === 'IFRAME' &&\r\n                        attributeName === 'src' &&\r\n                        !this.keepIframeSrcFn(value)) {\r\n                        if (!target.contentDocument) {\r\n                            attributeName = 'rr_src';\r\n                        }\r\n                        else {\r\n                            return;\r\n                        }\r\n                    }\r\n                    if (!item) {\r\n                        item = {\r\n                            node: m.target,\r\n                            attributes: {},\r\n                            styleDiff: {},\r\n                            _unchangedStyles: {},\r\n                        };\r\n                        this.attributes.push(item);\r\n                    }\r\n                    if (attributeName === 'type' &&\r\n                        target.tagName === 'INPUT' &&\r\n                        (m.oldValue || '').toLowerCase() === 'password') {\r\n                        target.setAttribute('data-rr-is-password', 'true');\r\n                    }\r\n                    if (!ignoreAttribute(target.tagName, attributeName)) {\r\n                        item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\r\n                        if (attributeName === 'style') {\r\n                            const old = unattachedDoc.createElement('span');\r\n                            if (m.oldValue) {\r\n                                old.setAttribute('style', m.oldValue);\r\n                            }\r\n                            for (const pname of Array.from(target.style)) {\r\n                                const newValue = target.style.getPropertyValue(pname);\r\n                                const newPriority = target.style.getPropertyPriority(pname);\r\n                                if (newValue !== old.style.getPropertyValue(pname) ||\r\n                                    newPriority !== old.style.getPropertyPriority(pname)) {\r\n                                    if (newPriority === '') {\r\n                                        item.styleDiff[pname] = newValue;\r\n                                    }\r\n                                    else {\r\n                                        item.styleDiff[pname] = [newValue, newPriority];\r\n                                    }\r\n                                }\r\n                                else {\r\n                                    item._unchangedStyles[pname] = [newValue, newPriority];\r\n                                }\r\n                            }\r\n                            for (const pname of Array.from(old.style)) {\r\n                                if (target.style.getPropertyValue(pname) === '') {\r\n                                    item.styleDiff[pname] = false;\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    break;\r\n                }\r\n                case 'childList': {\r\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\r\n                        return;\r\n                    }\r\n                    m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n                    m.removedNodes.forEach((n) => {\r\n                        const nodeId = this.mirror.getId(n);\r\n                        const parentId = isShadowRoot(m.target)\r\n                            ? this.mirror.getId(m.target.host)\r\n                            : this.mirror.getId(m.target);\r\n                        if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n                            isIgnored(n, this.mirror) ||\r\n                            !isSerialized(n, this.mirror)) {\r\n                            return;\r\n                        }\r\n                        if (this.addedSet.has(n)) {\r\n                            deepDelete(this.addedSet, n);\r\n                            this.droppedSet.add(n);\r\n                        }\r\n                        else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n                        else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n                        else if (this.movedSet.has(n) &&\r\n                            this.movedMap[moveKey(nodeId, parentId)]) {\r\n                            deepDelete(this.movedSet, n);\r\n                        }\r\n                        else {\r\n                            this.removes.push({\r\n                                parentId,\r\n                                id: nodeId,\r\n                                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n                                    ? true\r\n                                    : undefined,\r\n                            });\r\n                        }\r\n                        this.mapRemoves.push(n);\r\n                    });\r\n                    break;\r\n                }\r\n            }\r\n        };\r\n        this.genAdds = (n, target) => {\r\n            if (this.processedNodeManager.inOtherBuffer(n, this))\r\n                return;\r\n            if (this.addedSet.has(n) || this.movedSet.has(n))\r\n                return;\r\n            if (this.mirror.hasNode(n)) {\r\n                if (isIgnored(n, this.mirror)) {\r\n                    return;\r\n                }\r\n                this.movedSet.add(n);\r\n                let targetId = null;\r\n                if (target && this.mirror.hasNode(target)) {\r\n                    targetId = this.mirror.getId(target);\r\n                }\r\n                if (targetId && targetId !== -1) {\r\n                    this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n                }\r\n            }\r\n            else {\r\n                this.addedSet.add(n);\r\n                this.droppedSet.delete(n);\r\n            }\r\n            if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\r\n                n.childNodes.forEach((childN) => this.genAdds(childN));\r\n                if (hasShadowRoot(n)) {\r\n                    n.shadowRoot.childNodes.forEach((childN) => {\r\n                        this.processedNodeManager.add(childN, this);\r\n                        this.genAdds(childN, n);\r\n                    });\r\n                }\r\n            }\r\n        };\r\n    }\r\n    init(options) {\r\n        [\r\n            'mutationCb',\r\n            'blockClass',\r\n            'blockSelector',\r\n            'unblockSelector',\r\n            'maskAllText',\r\n            'maskTextClass',\r\n            'unmaskTextClass',\r\n            'maskTextSelector',\r\n            'unmaskTextSelector',\r\n            'inlineStylesheet',\r\n            'maskInputOptions',\r\n            'maskAttributeFn',\r\n            'maskTextFn',\r\n            'maskInputFn',\r\n            'keepIframeSrcFn',\r\n            'recordCanvas',\r\n            'inlineImages',\r\n            'slimDOMOptions',\r\n            'dataURLOptions',\r\n            'doc',\r\n            'mirror',\r\n            'iframeManager',\r\n            'stylesheetManager',\r\n            'shadowDomManager',\r\n            'canvasManager',\r\n            'processedNodeManager',\r\n        ].forEach((key) => {\r\n            this[key] = options[key];\r\n        });\r\n    }\r\n    freeze() {\r\n        this.frozen = true;\r\n        this.canvasManager.freeze();\r\n    }\r\n    unfreeze() {\r\n        this.frozen = false;\r\n        this.canvasManager.unfreeze();\r\n        this.emit();\r\n    }\r\n    isFrozen() {\r\n        return this.frozen;\r\n    }\r\n    lock() {\r\n        this.locked = true;\r\n        this.canvasManager.lock();\r\n    }\r\n    unlock() {\r\n        this.locked = false;\r\n        this.canvasManager.unlock();\r\n        this.emit();\r\n    }\r\n    reset() {\r\n        this.shadowDomManager.reset();\r\n        this.canvasManager.reset();\r\n    }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n    addsSet.delete(n);\r\n    n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n    if (removes.length === 0)\r\n        return false;\r\n    return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n    const { parentNode } = n;\r\n    if (!parentNode) {\r\n        return false;\r\n    }\r\n    const parentId = mirror.getId(parentNode);\r\n    if (removes.some((r) => r.id === parentId)) {\r\n        return true;\r\n    }\r\n    return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n    if (set.size === 0)\r\n        return false;\r\n    return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n    const { parentNode } = n;\r\n    if (!parentNode) {\r\n        return false;\r\n    }\r\n    if (set.has(parentNode)) {\r\n        return true;\r\n    }\r\n    return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","let errorHandler;\r\nfunction registerErrorHandler(handler) {\r\n    errorHandler = handler;\r\n}\r\nfunction unregisterErrorHandler() {\r\n    errorHandler = undefined;\r\n}\r\nconst callbackWrapper = (cb) => {\r\n    if (!errorHandler) {\r\n        return cb;\r\n    }\r\n    const rrwebWrapped = ((...rest) => {\r\n        try {\r\n            return cb(...rest);\r\n        }\r\n        catch (error) {\r\n            if (errorHandler && errorHandler(error) === true) {\r\n                return () => {\r\n                };\r\n            }\r\n            throw error;\r\n        }\r\n    });\r\n    return rrwebWrapped;\r\n};\n\nexport { callbackWrapper, registerErrorHandler, unregisterErrorHandler };\n","import { toLowerCase, toUpperCase, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowScroll, hookSetter, patch, legacy_isTouchEvent, nowTimestamp, getWindowHeight, getWindowWidth } from '../utils.js';\nimport { MouseInteractions, IncrementalSource, PointerTypes } from '../../../types/dist/rrweb-types.js';\nimport MutationBuffer from './mutation.js';\nimport { callbackWrapper } from './error-handler.js';\n\nconst mutationBuffers = [];\r\nfunction getEventTarget(event) {\r\n    try {\r\n        if ('composedPath' in event) {\r\n            const path = event.composedPath();\r\n            if (path.length) {\r\n                return path[0];\r\n            }\r\n        }\r\n        else if ('path' in event && event.path.length) {\r\n            return event.path[0];\r\n        }\r\n    }\r\n    catch {\r\n    }\r\n    return event && event.target;\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n    const mutationBuffer = new MutationBuffer();\r\n    mutationBuffers.push(mutationBuffer);\r\n    mutationBuffer.init(options);\r\n    let mutationObserverCtor = window.MutationObserver ||\r\n        window.__rrMutationObserver;\r\n    const angularZoneSymbol = window?.Zone?.__symbol__?.('MutationObserver');\r\n    if (angularZoneSymbol &&\r\n        window[angularZoneSymbol]) {\r\n        mutationObserverCtor = window[angularZoneSymbol];\r\n    }\r\n    const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\r\n        if (options.onMutation && options.onMutation(mutations) === false) {\r\n            return;\r\n        }\r\n        mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\r\n    }));\r\n    observer.observe(rootEl, {\r\n        attributes: true,\r\n        attributeOldValue: true,\r\n        characterData: true,\r\n        characterDataOldValue: true,\r\n        childList: true,\r\n        subtree: true,\r\n    });\r\n    return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n    if (sampling.mousemove === false) {\r\n        return () => {\r\n        };\r\n    }\r\n    const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n    const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n        ? sampling.mousemoveCallback\r\n        : 500;\r\n    let positions = [];\r\n    let timeBaseline;\r\n    const wrappedCb = throttle(callbackWrapper((source) => {\r\n        const totalOffset = Date.now() - timeBaseline;\r\n        mousemoveCb(positions.map((p) => {\r\n            p.timeOffset -= totalOffset;\r\n            return p;\r\n        }), source);\r\n        positions = [];\r\n        timeBaseline = null;\r\n    }), callbackThreshold);\r\n    const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n        const target = getEventTarget(evt);\r\n        const { clientX, clientY } = legacy_isTouchEvent(evt)\r\n            ? evt.changedTouches[0]\r\n            : evt;\r\n        if (!timeBaseline) {\r\n            timeBaseline = nowTimestamp();\r\n        }\r\n        positions.push({\r\n            x: clientX,\r\n            y: clientY,\r\n            id: mirror.getId(target),\r\n            timeOffset: nowTimestamp() - timeBaseline,\r\n        });\r\n        wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n            ? IncrementalSource.Drag\r\n            : evt instanceof MouseEvent\r\n                ? IncrementalSource.MouseMove\r\n                : IncrementalSource.TouchMove);\r\n    }), threshold, {\r\n        trailing: false,\r\n    }));\r\n    const handlers = [\r\n        on('mousemove', updatePosition, doc),\r\n        on('touchmove', updatePosition, doc),\r\n        on('drag', updatePosition, doc),\r\n    ];\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n    if (sampling.mouseInteraction === false) {\r\n        return () => {\r\n        };\r\n    }\r\n    const disableMap = sampling.mouseInteraction === true ||\r\n        sampling.mouseInteraction === undefined\r\n        ? {}\r\n        : sampling.mouseInteraction;\r\n    const handlers = [];\r\n    let currentPointerType = null;\r\n    const getHandler = (eventKey) => {\r\n        return (event) => {\r\n            const target = getEventTarget(event);\r\n            if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n                return;\r\n            }\r\n            let pointerType = null;\r\n            let thisEventKey = eventKey;\r\n            if ('pointerType' in event) {\r\n                switch (event.pointerType) {\r\n                    case 'mouse':\r\n                        pointerType = PointerTypes.Mouse;\r\n                        break;\r\n                    case 'touch':\r\n                        pointerType = PointerTypes.Touch;\r\n                        break;\r\n                    case 'pen':\r\n                        pointerType = PointerTypes.Pen;\r\n                        break;\r\n                }\r\n                if (pointerType === PointerTypes.Touch) {\r\n                    if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\r\n                        thisEventKey = 'TouchStart';\r\n                    }\r\n                    else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\r\n                        thisEventKey = 'TouchEnd';\r\n                    }\r\n                }\r\n                else if (pointerType === PointerTypes.Pen) ;\r\n            }\r\n            else if (legacy_isTouchEvent(event)) {\r\n                pointerType = PointerTypes.Touch;\r\n            }\r\n            if (pointerType !== null) {\r\n                currentPointerType = pointerType;\r\n                if ((thisEventKey.startsWith('Touch') &&\r\n                    pointerType === PointerTypes.Touch) ||\r\n                    (thisEventKey.startsWith('Mouse') &&\r\n                        pointerType === PointerTypes.Mouse)) {\r\n                    pointerType = null;\r\n                }\r\n            }\r\n            else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\r\n                pointerType = currentPointerType;\r\n                currentPointerType = null;\r\n            }\r\n            const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\r\n            if (!e) {\r\n                return;\r\n            }\r\n            const id = mirror.getId(target);\r\n            const { clientX, clientY } = e;\r\n            callbackWrapper(mouseInteractionCb)({\r\n                type: MouseInteractions[thisEventKey],\r\n                id,\r\n                x: clientX,\r\n                y: clientY,\r\n                ...(pointerType !== null && { pointerType }),\r\n            });\r\n        };\r\n    };\r\n    Object.keys(MouseInteractions)\r\n        .filter((key) => Number.isNaN(Number(key)) &&\r\n        !key.endsWith('_Departed') &&\r\n        disableMap[key] !== false)\r\n        .forEach((eventKey) => {\r\n        let eventName = toLowerCase(eventKey);\r\n        const handler = getHandler(eventKey);\r\n        if (window.PointerEvent) {\r\n            switch (MouseInteractions[eventKey]) {\r\n                case MouseInteractions.MouseDown:\r\n                case MouseInteractions.MouseUp:\r\n                    eventName = eventName.replace('mouse', 'pointer');\r\n                    break;\r\n                case MouseInteractions.TouchStart:\r\n                case MouseInteractions.TouchEnd:\r\n                    return;\r\n            }\r\n        }\r\n        handlers.push(on(eventName, handler, doc));\r\n    });\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n    const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n        const target = getEventTarget(evt);\r\n        if (!target ||\r\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n            return;\r\n        }\r\n        const id = mirror.getId(target);\r\n        if (target === doc && doc.defaultView) {\r\n            const scrollLeftTop = getWindowScroll(doc.defaultView);\r\n            scrollCb({\r\n                id,\r\n                x: scrollLeftTop.left,\r\n                y: scrollLeftTop.top,\r\n            });\r\n        }\r\n        else {\r\n            scrollCb({\r\n                id,\r\n                x: target.scrollLeft,\r\n                y: target.scrollTop,\r\n            });\r\n        }\r\n    }), sampling.scroll || 100));\r\n    return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\r\n    let lastH = -1;\r\n    let lastW = -1;\r\n    const updateDimension = callbackWrapper(throttle(callbackWrapper(() => {\r\n        const height = getWindowHeight();\r\n        const width = getWindowWidth();\r\n        if (lastH !== height || lastW !== width) {\r\n            viewportResizeCb({\r\n                width: Number(width),\r\n                height: Number(height),\r\n            });\r\n            lastH = height;\r\n            lastW = width;\r\n        }\r\n    }), 200));\r\n    return on('resize', updateDimension, win);\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\r\n    function eventHandler(event) {\r\n        let target = getEventTarget(event);\r\n        const userTriggered = event.isTrusted;\r\n        const tagName = target && toUpperCase(target.tagName);\r\n        if (tagName === 'OPTION')\r\n            target = target.parentElement;\r\n        if (!target ||\r\n            !tagName ||\r\n            INPUT_TAGS.indexOf(tagName) < 0 ||\r\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n            return;\r\n        }\r\n        const el = target;\r\n        if (el.classList.contains(ignoreClass) ||\r\n            (ignoreSelector && el.matches(ignoreSelector))) {\r\n            return;\r\n        }\r\n        const type = getInputType(target);\r\n        let text = getInputValue(el, tagName, type);\r\n        let isChecked = false;\r\n        const isInputMasked = shouldMaskInput({\r\n            maskInputOptions,\r\n            tagName,\r\n            type,\r\n        });\r\n        const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\r\n        if (type === 'radio' || type === 'checkbox') {\r\n            isChecked = target.checked;\r\n        }\r\n        text = maskInputValue({\r\n            isMasked: forceMask,\r\n            element: target,\r\n            value: text,\r\n            maskInputFn,\r\n        });\r\n        cbWithDedup(target, userTriggeredOnInput\r\n            ? { text, isChecked, userTriggered }\r\n            : { text, isChecked });\r\n        const name = target.name;\r\n        if (type === 'radio' && name && isChecked) {\r\n            doc\r\n                .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n                .forEach((el) => {\r\n                if (el !== target) {\r\n                    const text = maskInputValue({\r\n                        isMasked: forceMask,\r\n                        element: el,\r\n                        value: getInputValue(el, tagName, type),\r\n                        maskInputFn,\r\n                    });\r\n                    cbWithDedup(el, userTriggeredOnInput\r\n                        ? { text, isChecked: !isChecked, userTriggered: false }\r\n                        : { text, isChecked: !isChecked });\r\n                }\r\n            });\r\n        }\r\n    }\r\n    function cbWithDedup(target, v) {\r\n        const lastInputValue = lastInputValueMap.get(target);\r\n        if (!lastInputValue ||\r\n            lastInputValue.text !== v.text ||\r\n            lastInputValue.isChecked !== v.isChecked) {\r\n            lastInputValueMap.set(target, v);\r\n            const id = mirror.getId(target);\r\n            callbackWrapper(inputCb)({\r\n                ...v,\r\n                id,\r\n            });\r\n        }\r\n    }\r\n    const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n    const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\r\n    const currentWindow = doc.defaultView;\r\n    if (!currentWindow) {\r\n        return () => {\r\n            handlers.forEach((h) => h());\r\n        };\r\n    }\r\n    const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n    const hookProperties = [\r\n        [currentWindow.HTMLInputElement.prototype, 'value'],\r\n        [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n        [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n        [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n        [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n        [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n    ];\r\n    if (propertyDescriptor && propertyDescriptor.set) {\r\n        handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n            set() {\r\n                callbackWrapper(eventHandler)({\r\n                    target: this,\r\n                    isTrusted: false,\r\n                });\r\n            },\r\n        }, false, currentWindow)));\r\n    }\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n    const positions = [];\r\n    function recurse(childRule, pos) {\r\n        if ((hasNestedCSSRule('CSSGroupingRule') &&\r\n            childRule.parentRule instanceof CSSGroupingRule) ||\r\n            (hasNestedCSSRule('CSSMediaRule') &&\r\n                childRule.parentRule instanceof CSSMediaRule) ||\r\n            (hasNestedCSSRule('CSSSupportsRule') &&\r\n                childRule.parentRule instanceof CSSSupportsRule) ||\r\n            (hasNestedCSSRule('CSSConditionRule') &&\r\n                childRule.parentRule instanceof CSSConditionRule)) {\r\n            const rules = Array.from(childRule.parentRule.cssRules);\r\n            const index = rules.indexOf(childRule);\r\n            pos.unshift(index);\r\n        }\r\n        else if (childRule.parentStyleSheet) {\r\n            const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n            const index = rules.indexOf(childRule);\r\n            pos.unshift(index);\r\n        }\r\n        return pos;\r\n    }\r\n    return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n    let id, styleId;\r\n    if (!sheet)\r\n        return {};\r\n    if (sheet.ownerNode)\r\n        id = mirror.getId(sheet.ownerNode);\r\n    else\r\n        styleId = styleMirror.getId(sheet);\r\n    return {\r\n        styleId,\r\n        id,\r\n    };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n    if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\r\n        return () => {\r\n        };\r\n    }\r\n    const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n    win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [rule, index] = argumentsList;\r\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleSheetRuleCb({\r\n                    id,\r\n                    styleId,\r\n                    adds: [{ rule, index }],\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n    win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [index] = argumentsList;\r\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleSheetRuleCb({\r\n                    id,\r\n                    styleId,\r\n                    removes: [{ index }],\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    let replace;\r\n    if (win.CSSStyleSheet.prototype.replace) {\r\n        replace = win.CSSStyleSheet.prototype.replace;\r\n        win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [text] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        replace: text,\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    }\r\n    let replaceSync;\r\n    if (win.CSSStyleSheet.prototype.replaceSync) {\r\n        replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n        win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [text] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        replaceSync: text,\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    }\r\n    const supportedNestedCSSRuleTypes = {};\r\n    if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\r\n        supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n    }\r\n    else {\r\n        if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\r\n            supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n        }\r\n        if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\r\n            supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n        }\r\n        if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\r\n            supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n        }\r\n    }\r\n    const unmodifiedFunctions = {};\r\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n        unmodifiedFunctions[typeKey] = {\r\n            insertRule: type.prototype.insertRule,\r\n            deleteRule: type.prototype.deleteRule,\r\n        };\r\n        type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [rule, index] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        adds: [\r\n                            {\r\n                                rule,\r\n                                index: [\r\n                                    ...getNestedCSSRulePositions(thisArg),\r\n                                    index || 0,\r\n                                ],\r\n                            },\r\n                        ],\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n        type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [index] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        removes: [\r\n                            { index: [...getNestedCSSRulePositions(thisArg), index] },\r\n                        ],\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    });\r\n    return callbackWrapper(() => {\r\n        win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n        win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n        replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n        replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n        Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n            type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n            type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n        });\r\n    });\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n    let hostId = null;\r\n    if (host.nodeName === '#document')\r\n        hostId = mirror.getId(host);\r\n    else\r\n        hostId = mirror.getId(host.host);\r\n    const patchTarget = host.nodeName === '#document'\r\n        ? host.defaultView?.Document\r\n        : host.ownerDocument?.defaultView?.ShadowRoot;\r\n    const originalPropertyDescriptor = patchTarget?.prototype\r\n        ? Object.getOwnPropertyDescriptor(patchTarget?.prototype, 'adoptedStyleSheets')\r\n        : undefined;\r\n    if (hostId === null ||\r\n        hostId === -1 ||\r\n        !patchTarget ||\r\n        !originalPropertyDescriptor)\r\n        return () => {\r\n        };\r\n    Object.defineProperty(host, 'adoptedStyleSheets', {\r\n        configurable: originalPropertyDescriptor.configurable,\r\n        enumerable: originalPropertyDescriptor.enumerable,\r\n        get() {\r\n            return originalPropertyDescriptor.get?.call(this);\r\n        },\r\n        set(sheets) {\r\n            const result = originalPropertyDescriptor.set?.call(this, sheets);\r\n            if (hostId !== null && hostId !== -1) {\r\n                try {\r\n                    stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n                }\r\n                catch (e) {\r\n                }\r\n            }\r\n            return result;\r\n        },\r\n    });\r\n    return callbackWrapper(() => {\r\n        Object.defineProperty(host, 'adoptedStyleSheets', {\r\n            configurable: originalPropertyDescriptor.configurable,\r\n            enumerable: originalPropertyDescriptor.enumerable,\r\n            get: originalPropertyDescriptor.get,\r\n            set: originalPropertyDescriptor.set,\r\n        });\r\n    });\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n    const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n    win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [property, value, priority] = argumentsList;\r\n            if (ignoreCSSAttributes.has(property)) {\r\n                return setProperty.apply(thisArg, [property, value, priority]);\r\n            }\r\n            const { id, styleId } = getIdAndStyleId(thisArg.parentRule?.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleDeclarationCb({\r\n                    id,\r\n                    styleId,\r\n                    set: {\r\n                        property,\r\n                        value,\r\n                        priority,\r\n                    },\r\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n    win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [property] = argumentsList;\r\n            if (ignoreCSSAttributes.has(property)) {\r\n                return removeProperty.apply(thisArg, [property]);\r\n            }\r\n            const { id, styleId } = getIdAndStyleId(thisArg.parentRule?.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleDeclarationCb({\r\n                    id,\r\n                    styleId,\r\n                    remove: {\r\n                        property,\r\n                    },\r\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    return callbackWrapper(() => {\r\n        win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n        win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n    });\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\r\n    const handler = callbackWrapper((type) => throttle(callbackWrapper((event) => {\r\n        const target = getEventTarget(event);\r\n        if (!target ||\r\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n            return;\r\n        }\r\n        const { currentTime, volume, muted, playbackRate } = target;\r\n        mediaInteractionCb({\r\n            type,\r\n            id: mirror.getId(target),\r\n            currentTime,\r\n            volume,\r\n            muted,\r\n            playbackRate,\r\n        });\r\n    }), sampling.media || 500));\r\n    const handlers = [\r\n        on('play', handler(0), doc),\r\n        on('pause', handler(1), doc),\r\n        on('seeked', handler(2), doc),\r\n        on('volumechange', handler(3), doc),\r\n        on('ratechange', handler(4), doc),\r\n    ];\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n    const win = doc.defaultView;\r\n    if (!win) {\r\n        return () => {\r\n        };\r\n    }\r\n    const handlers = [];\r\n    const fontMap = new WeakMap();\r\n    const originalFontFace = win.FontFace;\r\n    win.FontFace = function FontFace(family, source, descriptors) {\r\n        const fontFace = new originalFontFace(family, source, descriptors);\r\n        fontMap.set(fontFace, {\r\n            family,\r\n            buffer: typeof source !== 'string',\r\n            descriptors,\r\n            fontSource: typeof source === 'string'\r\n                ? source\r\n                : JSON.stringify(Array.from(new Uint8Array(source))),\r\n        });\r\n        return fontFace;\r\n    };\r\n    const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n        return function (fontFace) {\r\n            setTimeout(callbackWrapper(() => {\r\n                const p = fontMap.get(fontFace);\r\n                if (p) {\r\n                    fontCb(p);\r\n                    fontMap.delete(fontFace);\r\n                }\r\n            }), 0);\r\n            return original.apply(this, [fontFace]);\r\n        };\r\n    });\r\n    handlers.push(() => {\r\n        win.FontFace = originalFontFace;\r\n    });\r\n    handlers.push(restoreHandler);\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initSelectionObserver(param) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\r\n    let collapsed = true;\r\n    const updateSelection = callbackWrapper(() => {\r\n        const selection = doc.getSelection();\r\n        if (!selection || (collapsed && selection?.isCollapsed))\r\n            return;\r\n        collapsed = selection.isCollapsed || false;\r\n        const ranges = [];\r\n        const count = selection.rangeCount || 0;\r\n        for (let i = 0; i < count; i++) {\r\n            const range = selection.getRangeAt(i);\r\n            const { startContainer, startOffset, endContainer, endOffset } = range;\r\n            const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\r\n                isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\r\n            if (blocked)\r\n                continue;\r\n            ranges.push({\r\n                start: mirror.getId(startContainer),\r\n                startOffset,\r\n                end: mirror.getId(endContainer),\r\n                endOffset,\r\n            });\r\n        }\r\n        selectionCb({ ranges });\r\n    });\r\n    updateSelection();\r\n    return on('selectionchange', updateSelection);\r\n}\r\nfunction initCustomElementObserver({ doc, customElementCb, }) {\r\n    const win = doc.defaultView;\r\n    if (!win || !win.customElements) {\r\n        return () => {\r\n        };\r\n    }\r\n    const restoreHandler = patch(win.customElements, 'define', function (original) {\r\n        return function (name, constructor, options) {\r\n            try {\r\n                customElementCb({\r\n                    define: {\r\n                        name,\r\n                    },\r\n                });\r\n            }\r\n            catch (e) {\r\n            }\r\n            return original.apply(this, [name, constructor, options]);\r\n        };\r\n    });\r\n    return restoreHandler;\r\n}\r\nfunction initObservers(o, _hooks = {}) {\r\n    const currentWindow = o.doc.defaultView;\r\n    if (!currentWindow) {\r\n        return () => {\r\n        };\r\n    }\r\n    const mutationObserver = initMutationObserver(o, o.doc);\r\n    const mousemoveHandler = initMoveObserver(o);\r\n    const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n    const scrollHandler = initScrollObserver(o);\r\n    const viewportResizeHandler = initViewportResizeObserver(o, {\r\n        win: currentWindow,\r\n    });\r\n    const inputHandler = initInputObserver(o);\r\n    const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n    const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n    const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n    const styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n        win: currentWindow,\r\n    });\r\n    const fontObserver = o.collectFonts\r\n        ? initFontObserver(o)\r\n        : () => {\r\n        };\r\n    const selectionObserver = initSelectionObserver(o);\r\n    const customElementObserver = initCustomElementObserver(o);\r\n    const pluginHandlers = [];\r\n    for (const plugin of o.plugins) {\r\n        pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n    }\r\n    return callbackWrapper(() => {\r\n        mutationBuffers.forEach((b) => b.reset());\r\n        mutationObserver.disconnect();\r\n        mousemoveHandler();\r\n        mouseInteractionHandler();\r\n        scrollHandler();\r\n        viewportResizeHandler();\r\n        inputHandler();\r\n        mediaInteractionHandler();\r\n        styleSheetObserver();\r\n        adoptedStyleSheetObserver();\r\n        styleDeclarationObserver();\r\n        fontObserver();\r\n        selectionObserver();\r\n        customElementObserver();\r\n        pluginHandlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction hasNestedCSSRule(prop) {\r\n    return typeof window[prop] !== 'undefined';\r\n}\r\nfunction canMonkeyPatchNestedCSSRule(prop) {\r\n    return Boolean(typeof window[prop] !== 'undefined' &&\r\n        window[prop].prototype &&\r\n        'insertRule' in window[prop].prototype &&\r\n        'deleteRule' in window[prop].prototype);\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n    constructor(generateIdFn) {\r\n        this.generateIdFn = generateIdFn;\r\n        this.iframeIdToRemoteIdMap = new WeakMap();\r\n        this.iframeRemoteIdToIdMap = new WeakMap();\r\n    }\r\n    getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n        const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n        const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n        let id = idToRemoteIdMap.get(remoteId);\r\n        if (!id) {\r\n            id = this.generateIdFn();\r\n            idToRemoteIdMap.set(remoteId, id);\r\n            remoteIdToIdMap.set(id, remoteId);\r\n        }\r\n        return id;\r\n    }\r\n    getIds(iframe, remoteId) {\r\n        const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n        return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n    }\r\n    getRemoteId(iframe, id, map) {\r\n        const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n        if (typeof id !== 'number')\r\n            return id;\r\n        const remoteId = remoteIdToIdMap.get(id);\r\n        if (!remoteId)\r\n            return -1;\r\n        return remoteId;\r\n    }\r\n    getRemoteIds(iframe, ids) {\r\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n        return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n    }\r\n    reset(iframe) {\r\n        if (!iframe) {\r\n            this.iframeIdToRemoteIdMap = new WeakMap();\r\n            this.iframeRemoteIdToIdMap = new WeakMap();\r\n            return;\r\n        }\r\n        this.iframeIdToRemoteIdMap.delete(iframe);\r\n        this.iframeRemoteIdToIdMap.delete(iframe);\r\n    }\r\n    getIdToRemoteIdMap(iframe) {\r\n        let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n        if (!idToRemoteIdMap) {\r\n            idToRemoteIdMap = new Map();\r\n            this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n        }\r\n        return idToRemoteIdMap;\r\n    }\r\n    getRemoteIdToIdMap(iframe) {\r\n        let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n        if (!remoteIdToIdMap) {\r\n            remoteIdToIdMap = new Map();\r\n            this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n        }\r\n        return remoteIdToIdMap;\r\n    }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\n\nclass IframeManagerNoop {\r\n    constructor() {\r\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n        this.crossOriginIframeRootIdMap = new WeakMap();\r\n    }\r\n    addIframe() {\r\n    }\r\n    addLoadListener() {\r\n    }\r\n    attachIframe() {\r\n    }\r\n}\r\nclass IframeManager {\r\n    constructor(options) {\r\n        this.iframes = new WeakMap();\r\n        this.crossOriginIframeMap = new WeakMap();\r\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n        this.crossOriginIframeRootIdMap = new WeakMap();\r\n        this.mutationCb = options.mutationCb;\r\n        this.wrappedEmit = options.wrappedEmit;\r\n        this.stylesheetManager = options.stylesheetManager;\r\n        this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n        this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n        this.mirror = options.mirror;\r\n        if (this.recordCrossOriginIframes) {\r\n            window.addEventListener('message', this.handleMessage.bind(this));\r\n        }\r\n    }\r\n    addIframe(iframeEl) {\r\n        this.iframes.set(iframeEl, true);\r\n        if (iframeEl.contentWindow)\r\n            this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n    }\r\n    addLoadListener(cb) {\r\n        this.loadListener = cb;\r\n    }\r\n    attachIframe(iframeEl, childSn) {\r\n        this.mutationCb({\r\n            adds: [\r\n                {\r\n                    parentId: this.mirror.getId(iframeEl),\r\n                    nextId: null,\r\n                    node: childSn,\r\n                },\r\n            ],\r\n            removes: [],\r\n            texts: [],\r\n            attributes: [],\r\n            isAttachIframe: true,\r\n        });\r\n        this.loadListener?.(iframeEl);\r\n        if (iframeEl.contentDocument &&\r\n            iframeEl.contentDocument.adoptedStyleSheets &&\r\n            iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n            this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n    }\r\n    handleMessage(message) {\r\n        const crossOriginMessageEvent = message;\r\n        if (crossOriginMessageEvent.data.type !== 'rrweb' ||\r\n            crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\r\n            return;\r\n        const iframeSourceWindow = message.source;\r\n        if (!iframeSourceWindow)\r\n            return;\r\n        const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n        if (!iframeEl)\r\n            return;\r\n        const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\r\n        if (transformedEvent)\r\n            this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\r\n    }\r\n    transformCrossOriginEvent(iframeEl, e) {\r\n        switch (e.type) {\r\n            case EventType.FullSnapshot: {\r\n                this.crossOriginIframeMirror.reset(iframeEl);\r\n                this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n                this.replaceIdOnNode(e.data.node, iframeEl);\r\n                const rootId = e.data.node.id;\r\n                this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\r\n                this.patchRootIdOnNode(e.data.node, rootId);\r\n                return {\r\n                    timestamp: e.timestamp,\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.Mutation,\r\n                        adds: [\r\n                            {\r\n                                parentId: this.mirror.getId(iframeEl),\r\n                                nextId: null,\r\n                                node: e.data.node,\r\n                            },\r\n                        ],\r\n                        removes: [],\r\n                        texts: [],\r\n                        attributes: [],\r\n                        isAttachIframe: true,\r\n                    },\r\n                };\r\n            }\r\n            case EventType.Meta:\r\n            case EventType.Load:\r\n            case EventType.DomContentLoaded: {\r\n                return false;\r\n            }\r\n            case EventType.Plugin: {\r\n                return e;\r\n            }\r\n            case EventType.Custom: {\r\n                this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n                return e;\r\n            }\r\n            case EventType.IncrementalSnapshot: {\r\n                switch (e.data.source) {\r\n                    case IncrementalSource.Mutation: {\r\n                        e.data.adds.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, [\r\n                                'parentId',\r\n                                'nextId',\r\n                                'previousId',\r\n                            ]);\r\n                            this.replaceIdOnNode(n.node, iframeEl);\r\n                            const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\r\n                            rootId && this.patchRootIdOnNode(n.node, rootId);\r\n                        });\r\n                        e.data.removes.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n                        });\r\n                        e.data.attributes.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['id']);\r\n                        });\r\n                        e.data.texts.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['id']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Drag:\r\n                    case IncrementalSource.TouchMove:\r\n                    case IncrementalSource.MouseMove: {\r\n                        e.data.positions.forEach((p) => {\r\n                            this.replaceIds(p, iframeEl, ['id']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.ViewportResize: {\r\n                        return false;\r\n                    }\r\n                    case IncrementalSource.MediaInteraction:\r\n                    case IncrementalSource.MouseInteraction:\r\n                    case IncrementalSource.Scroll:\r\n                    case IncrementalSource.CanvasMutation:\r\n                    case IncrementalSource.Input: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.StyleSheetRule:\r\n                    case IncrementalSource.StyleDeclaration: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Font: {\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Selection: {\r\n                        e.data.ranges.forEach((range) => {\r\n                            this.replaceIds(range, iframeEl, ['start', 'end']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.AdoptedStyleSheet: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n                        e.data.styles?.forEach((style) => {\r\n                            this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    replace(iframeMirror, obj, iframeEl, keys) {\r\n        for (const key of keys) {\r\n            if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n                continue;\r\n            if (Array.isArray(obj[key])) {\r\n                obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n            }\r\n            else {\r\n                obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n            }\r\n        }\r\n        return obj;\r\n    }\r\n    replaceIds(obj, iframeEl, keys) {\r\n        return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n    }\r\n    replaceStyleIds(obj, iframeEl, keys) {\r\n        return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n    }\r\n    replaceIdOnNode(node, iframeEl) {\r\n        this.replaceIds(node, iframeEl, ['id', 'rootId']);\r\n        if ('childNodes' in node) {\r\n            node.childNodes.forEach((child) => {\r\n                this.replaceIdOnNode(child, iframeEl);\r\n            });\r\n        }\r\n    }\r\n    patchRootIdOnNode(node, rootId) {\r\n        if (node.type !== NodeType.Document && !node.rootId)\r\n            node.rootId = rootId;\r\n        if ('childNodes' in node) {\r\n            node.childNodes.forEach((child) => {\r\n                this.patchRootIdOnNode(child, rootId);\r\n            });\r\n        }\r\n    }\r\n}\n\nexport { IframeManager, IframeManagerNoop };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { patch, inDom } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManagerNoop {\r\n    init() {\r\n    }\r\n    addShadowRoot() {\r\n    }\r\n    observeAttachShadow() {\r\n    }\r\n    reset() {\r\n    }\r\n}\r\nclass ShadowDomManager {\r\n    constructor(options) {\r\n        this.shadowDoms = new WeakSet();\r\n        this.restoreHandlers = [];\r\n        this.mutationCb = options.mutationCb;\r\n        this.scrollCb = options.scrollCb;\r\n        this.bypassOptions = options.bypassOptions;\r\n        this.mirror = options.mirror;\r\n        this.init();\r\n    }\r\n    init() {\r\n        this.reset();\r\n        this.patchAttachShadow(Element, document);\r\n    }\r\n    addShadowRoot(shadowRoot, doc) {\r\n        if (!isNativeShadowDom(shadowRoot))\r\n            return;\r\n        if (this.shadowDoms.has(shadowRoot))\r\n            return;\r\n        this.shadowDoms.add(shadowRoot);\r\n        const observer = initMutationObserver({\r\n            ...this.bypassOptions,\r\n            doc,\r\n            mutationCb: this.mutationCb,\r\n            mirror: this.mirror,\r\n            shadowDomManager: this,\r\n        }, shadowRoot);\r\n        this.restoreHandlers.push(() => observer.disconnect());\r\n        this.restoreHandlers.push(initScrollObserver({\r\n            ...this.bypassOptions,\r\n            scrollCb: this.scrollCb,\r\n            doc: shadowRoot,\r\n            mirror: this.mirror,\r\n        }));\r\n        setTimeout(() => {\r\n            if (shadowRoot.adoptedStyleSheets &&\r\n                shadowRoot.adoptedStyleSheets.length > 0)\r\n                this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n            this.restoreHandlers.push(initAdoptedStyleSheetObserver({\r\n                mirror: this.mirror,\r\n                stylesheetManager: this.bypassOptions.stylesheetManager,\r\n            }, shadowRoot));\r\n        }, 0);\r\n    }\r\n    observeAttachShadow(iframeElement) {\r\n        if (!iframeElement.contentWindow || !iframeElement.contentDocument)\r\n            return;\r\n        this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\r\n    }\r\n    patchAttachShadow(element, doc) {\r\n        const manager = this;\r\n        this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\r\n            return function (option) {\r\n                const shadowRoot = original.call(this, option);\r\n                if (this.shadowRoot && inDom(this))\r\n                    manager.addShadowRoot(this.shadowRoot, doc);\r\n                return shadowRoot;\r\n            };\r\n        }));\r\n    }\r\n    reset() {\r\n        this.restoreHandlers.forEach((handler) => {\r\n            try {\r\n                handler();\r\n            }\r\n            catch (e) {\r\n            }\r\n        });\r\n        this.restoreHandlers = [];\r\n        this.shadowDoms = new WeakSet();\r\n    }\r\n}\n\nexport { ShadowDomManager, ShadowDomManagerNoop };\n","import { onRequestAnimationFrame, isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport { getImageBitmapDataUrlWorkerURL as t } from '../../../../../rrweb-worker/es/rrweb-worker/index.js';\nimport { callbackWrapper } from '../../error-handler.js';\n\nclass CanvasManagerNoop {\r\n    reset() {\r\n    }\r\n    freeze() {\r\n    }\r\n    unfreeze() {\r\n    }\r\n    lock() {\r\n    }\r\n    unlock() {\r\n    }\r\n    snapshot() {\r\n    }\r\n}\r\nclass CanvasManager {\r\n    reset() {\r\n        this.pendingCanvasMutations.clear();\r\n        this.resetObservers && this.resetObservers();\r\n    }\r\n    freeze() {\r\n        this.frozen = true;\r\n    }\r\n    unfreeze() {\r\n        this.frozen = false;\r\n    }\r\n    lock() {\r\n        this.locked = true;\r\n    }\r\n    unlock() {\r\n        this.locked = false;\r\n    }\r\n    constructor(options) {\r\n        this.pendingCanvasMutations = new Map();\r\n        this.rafStamps = { latestId: 0, invokeId: null };\r\n        this.frozen = false;\r\n        this.locked = false;\r\n        this.processMutation = (target, mutation) => {\r\n            const newFrame = this.rafStamps.invokeId &&\r\n                this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n            if (newFrame || !this.rafStamps.invokeId)\r\n                this.rafStamps.invokeId = this.rafStamps.latestId;\r\n            if (!this.pendingCanvasMutations.has(target)) {\r\n                this.pendingCanvasMutations.set(target, []);\r\n            }\r\n            this.pendingCanvasMutations.get(target).push(mutation);\r\n        };\r\n        const { sampling = 'all', win, blockClass, blockSelector, unblockSelector, recordCanvas, dataURLOptions, } = options;\r\n        this.mutationCb = options.mutationCb;\r\n        this.mirror = options.mirror;\r\n        this.options = options;\r\n        if (options.enableManualSnapshot) {\r\n            return;\r\n        }\r\n        callbackWrapper(() => {\r\n            if (recordCanvas && sampling === 'all')\r\n                this.initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector);\r\n            if (recordCanvas && typeof sampling === 'number')\r\n                this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, unblockSelector, {\r\n                    dataURLOptions,\r\n                });\r\n        })();\r\n    }\r\n    initCanvasFPSObserver(fps, win, blockClass, blockSelector, unblockSelector, options) {\r\n        const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, true);\r\n        const rafId = this.takeSnapshot(false, fps, win, blockClass, blockSelector, unblockSelector, options.dataURLOptions);\r\n        this.resetObservers = () => {\r\n            canvasContextReset();\r\n            cancelAnimationFrame(rafId);\r\n        };\r\n    }\r\n    initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector) {\r\n        this.startRAFTimestamping();\r\n        this.startPendingCanvasMutationFlusher();\r\n        const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, false);\r\n        const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector);\r\n        const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector, this.mirror);\r\n        this.resetObservers = () => {\r\n            canvasContextReset();\r\n            canvas2DReset();\r\n            canvasWebGL1and2Reset();\r\n        };\r\n    }\r\n    snapshot(canvasElement) {\r\n        const { options } = this;\r\n        const rafId = this.takeSnapshot(true, options.sampling === 'all' ? 2 : options.sampling || 2, options.win, options.blockClass, options.blockSelector, options.unblockSelector, options.dataURLOptions, canvasElement);\r\n        this.resetObservers = () => {\r\n            cancelAnimationFrame(rafId);\r\n        };\r\n    }\r\n    takeSnapshot(isManualSnapshot, fps, win, blockClass, blockSelector, unblockSelector, dataURLOptions, canvasElement) {\r\n        const snapshotInProgressMap = new Map();\r\n        const worker = new Worker(t());\r\n        worker.onmessage = (e) => {\r\n            const data = e.data;\r\n            const { id } = data;\r\n            snapshotInProgressMap.set(id, false);\r\n            if (!('base64' in data))\r\n                return;\r\n            const { base64, type, width, height } = data;\r\n            this.mutationCb({\r\n                id,\r\n                type: CanvasContext['2D'],\r\n                commands: [\r\n                    {\r\n                        property: 'clearRect',\r\n                        args: [0, 0, width, height],\r\n                    },\r\n                    {\r\n                        property: 'drawImage',\r\n                        args: [\r\n                            {\r\n                                rr_type: 'ImageBitmap',\r\n                                args: [\r\n                                    {\r\n                                        rr_type: 'Blob',\r\n                                        data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n                                        type,\r\n                                    },\r\n                                ],\r\n                            },\r\n                            0,\r\n                            0,\r\n                        ],\r\n                    },\r\n                ],\r\n            });\r\n        };\r\n        const timeBetweenSnapshots = 1000 / fps;\r\n        let lastSnapshotTime = 0;\r\n        let rafId;\r\n        const getCanvas = (canvasElement) => {\r\n            if (canvasElement) {\r\n                return [canvasElement];\r\n            }\r\n            const matchedCanvas = [];\r\n            win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n                if (!isBlocked(canvas, blockClass, blockSelector, unblockSelector, true)) {\r\n                    matchedCanvas.push(canvas);\r\n                }\r\n            });\r\n            return matchedCanvas;\r\n        };\r\n        const takeCanvasSnapshots = (timestamp) => {\r\n            if (lastSnapshotTime &&\r\n                timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n                rafId = onRequestAnimationFrame(takeCanvasSnapshots);\r\n                return;\r\n            }\r\n            lastSnapshotTime = timestamp;\r\n            getCanvas(canvasElement).forEach((canvas) => {\r\n                const id = this.mirror.getId(canvas);\r\n                if (snapshotInProgressMap.get(id))\r\n                    return;\r\n                snapshotInProgressMap.set(id, true);\r\n                if (!isManualSnapshot &&\r\n                    ['webgl', 'webgl2'].includes(canvas.__context)) {\r\n                    const context = canvas.getContext(canvas.__context);\r\n                    if (context?.getContextAttributes()?.preserveDrawingBuffer === false) {\r\n                        context.clear(context.COLOR_BUFFER_BIT);\r\n                    }\r\n                }\r\n                createImageBitmap(canvas)\r\n                    .then((bitmap) => {\r\n                    worker.postMessage({\r\n                        id,\r\n                        bitmap,\r\n                        width: canvas.width,\r\n                        height: canvas.height,\r\n                        dataURLOptions,\r\n                    }, [bitmap]);\r\n                })\r\n                    .catch((error) => {\r\n                    callbackWrapper(() => {\r\n                        throw error;\r\n                    })();\r\n                });\r\n            });\r\n            rafId = onRequestAnimationFrame(takeCanvasSnapshots);\r\n        };\r\n        rafId = onRequestAnimationFrame(takeCanvasSnapshots);\r\n        return rafId;\r\n    }\r\n    startPendingCanvasMutationFlusher() {\r\n        onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n    }\r\n    startRAFTimestamping() {\r\n        const setLatestRAFTimestamp = (timestamp) => {\r\n            this.rafStamps.latestId = timestamp;\r\n            onRequestAnimationFrame(setLatestRAFTimestamp);\r\n        };\r\n        onRequestAnimationFrame(setLatestRAFTimestamp);\r\n    }\r\n    flushPendingCanvasMutations() {\r\n        this.pendingCanvasMutations.forEach((values, canvas) => {\r\n            const id = this.mirror.getId(canvas);\r\n            this.flushPendingCanvasMutationFor(canvas, id);\r\n        });\r\n        onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n    }\r\n    flushPendingCanvasMutationFor(canvas, id) {\r\n        if (this.frozen || this.locked) {\r\n            return;\r\n        }\r\n        const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n        if (!valuesWithType || id === -1)\r\n            return;\r\n        const values = valuesWithType.map((value) => {\r\n            const { type, ...rest } = value;\r\n            return rest;\r\n        });\r\n        const { type } = valuesWithType[0];\r\n        this.mutationCb({ id, type, commands: values });\r\n        this.pendingCanvasMutations.delete(canvas);\r\n    }\r\n}\n\nexport { CanvasManager, CanvasManagerNoop };\n","import { stringifyRule } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n    constructor(options) {\r\n        this.trackedLinkElements = new WeakSet();\r\n        this.styleMirror = new StyleSheetMirror();\r\n        this.mutationCb = options.mutationCb;\r\n        this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n    }\r\n    attachLinkElement(linkEl, childSn) {\r\n        if ('_cssText' in childSn.attributes)\r\n            this.mutationCb({\r\n                adds: [],\r\n                removes: [],\r\n                texts: [],\r\n                attributes: [\r\n                    {\r\n                        id: childSn.id,\r\n                        attributes: childSn\r\n                            .attributes,\r\n                    },\r\n                ],\r\n            });\r\n        this.trackLinkElement(linkEl);\r\n    }\r\n    trackLinkElement(linkEl) {\r\n        if (this.trackedLinkElements.has(linkEl))\r\n            return;\r\n        this.trackedLinkElements.add(linkEl);\r\n        this.trackStylesheetInLinkElement(linkEl);\r\n    }\r\n    adoptStyleSheets(sheets, hostId) {\r\n        if (sheets.length === 0)\r\n            return;\r\n        const adoptedStyleSheetData = {\r\n            id: hostId,\r\n            styleIds: [],\r\n        };\r\n        const styles = [];\r\n        for (const sheet of sheets) {\r\n            let styleId;\r\n            if (!this.styleMirror.has(sheet)) {\r\n                styleId = this.styleMirror.add(sheet);\r\n                styles.push({\r\n                    styleId,\r\n                    rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\r\n                        rule: stringifyRule(r),\r\n                        index,\r\n                    })),\r\n                });\r\n            }\r\n            else\r\n                styleId = this.styleMirror.getId(sheet);\r\n            adoptedStyleSheetData.styleIds.push(styleId);\r\n        }\r\n        if (styles.length > 0)\r\n            adoptedStyleSheetData.styles = styles;\r\n        this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n    }\r\n    reset() {\r\n        this.styleMirror.reset();\r\n        this.trackedLinkElements = new WeakSet();\r\n    }\r\n    trackStylesheetInLinkElement(linkEl) {\r\n    }\r\n}\n\nexport { StylesheetManager };\n","import { onRequestAnimationFrame } from '../utils.js';\n\nclass ProcessedNodeManager {\r\n    constructor() {\r\n        this.nodeMap = new WeakMap();\r\n        this.loop = true;\r\n        this.periodicallyClear();\r\n    }\r\n    periodicallyClear() {\r\n        onRequestAnimationFrame(() => {\r\n            this.clear();\r\n            if (this.loop)\r\n                this.periodicallyClear();\r\n        });\r\n    }\r\n    inOtherBuffer(node, thisBuffer) {\r\n        const buffers = this.nodeMap.get(node);\r\n        return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\r\n    }\r\n    add(node, buffer) {\r\n        this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\r\n    }\r\n    clear() {\r\n        this.nodeMap = new WeakMap();\r\n    }\r\n    destroy() {\r\n        this.loop = false;\r\n    }\r\n}\n\nexport { ProcessedNodeManager as default };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, on, nowTimestamp, getWindowWidth, getWindowHeight, getWindowScroll, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\nimport { IframeManagerNoop, IframeManager } from './iframe-manager.js';\nimport { ShadowDomManagerNoop, ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManagerNoop } from './observers/canvas/canvas-manager.js';\nexport { CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\nimport ProcessedNodeManager from './processed-node-manager.js';\nimport { callbackWrapper, unregisterErrorHandler, registerErrorHandler } from './error-handler.js';\n\nfunction wrapEvent(e) {\r\n    const eWithTime = e;\r\n    eWithTime.timestamp = nowTimestamp();\r\n    return eWithTime;\r\n}\r\nlet _wrappedEmit;\r\nlet _takeFullSnapshot;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n    const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\r\n        ? options.recordAfter\r\n        : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\r\n    registerErrorHandler(errorHandler);\r\n    const inEmittingFrame = recordCrossOriginIframes\r\n        ? window.parent === window\r\n        : true;\r\n    let passEmitsToParent = false;\r\n    if (!inEmittingFrame) {\r\n        try {\r\n            if (window.parent.document) {\r\n                passEmitsToParent = false;\r\n            }\r\n        }\r\n        catch (e) {\r\n            passEmitsToParent = true;\r\n        }\r\n    }\r\n    if (inEmittingFrame && !emit) {\r\n        throw new Error('emit function is required');\r\n    }\r\n    if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n        sampling.mousemove = mousemoveWait;\r\n    }\r\n    mirror.reset();\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n            radio: true,\r\n            checkbox: true,\r\n        }\r\n        : _maskInputOptions !== undefined\r\n            ? _maskInputOptions\r\n            : {};\r\n    const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n        ? {\r\n            script: true,\r\n            comment: true,\r\n            headFavicon: true,\r\n            headWhitespace: true,\r\n            headMetaSocial: true,\r\n            headMetaRobots: true,\r\n            headMetaHttpEquiv: true,\r\n            headMetaVerification: true,\r\n            headMetaAuthorship: _slimDOMOptions === 'all',\r\n            headMetaDescKeywords: _slimDOMOptions === 'all',\r\n        }\r\n        : _slimDOMOptions\r\n            ? _slimDOMOptions\r\n            : {};\r\n    polyfill();\r\n    let lastFullSnapshotEvent;\r\n    let incrementalSnapshotCount = 0;\r\n    const eventProcessor = (e) => {\r\n        for (const plugin of plugins || []) {\r\n            if (plugin.eventProcessor) {\r\n                e = plugin.eventProcessor(e);\r\n            }\r\n        }\r\n        if (packFn &&\r\n            !passEmitsToParent) {\r\n            e = packFn(e);\r\n        }\r\n        return e;\r\n    };\r\n    const wrappedEmit = (e, isCheckout) => {\r\n        if (mutationBuffers[0]?.isFrozen() &&\r\n            e.type !== EventType.FullSnapshot &&\r\n            !(e.type === EventType.IncrementalSnapshot &&\r\n                e.data.source === IncrementalSource.Mutation)) {\r\n            mutationBuffers.forEach((buf) => buf.unfreeze());\r\n        }\r\n        if (inEmittingFrame) {\r\n            emit?.(eventProcessor(e), isCheckout);\r\n        }\r\n        else if (passEmitsToParent) {\r\n            const message = {\r\n                type: 'rrweb',\r\n                event: eventProcessor(e),\r\n                origin: window.location.origin,\r\n                isCheckout,\r\n            };\r\n            window.parent.postMessage(message, '*');\r\n        }\r\n        if (e.type === EventType.FullSnapshot) {\r\n            lastFullSnapshotEvent = e;\r\n            incrementalSnapshotCount = 0;\r\n        }\r\n        else if (e.type === EventType.IncrementalSnapshot) {\r\n            if (e.data.source === IncrementalSource.Mutation &&\r\n                e.data.isAttachIframe) {\r\n                return;\r\n            }\r\n            incrementalSnapshotCount++;\r\n            const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n            const exceedTime = checkoutEveryNms &&\r\n                e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n            if (exceedCount || exceedTime) {\r\n                takeFullSnapshot(true);\r\n            }\r\n        }\r\n    };\r\n    _wrappedEmit = wrappedEmit;\r\n    const wrappedMutationEmit = (m) => {\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.IncrementalSnapshot,\r\n            data: {\r\n                source: IncrementalSource.Mutation,\r\n                ...m,\r\n            },\r\n        }));\r\n    };\r\n    const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: {\r\n            source: IncrementalSource.Scroll,\r\n            ...p,\r\n        },\r\n    }));\r\n    const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: {\r\n            source: IncrementalSource.CanvasMutation,\r\n            ...p,\r\n        },\r\n    }));\r\n    const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: {\r\n            source: IncrementalSource.AdoptedStyleSheet,\r\n            ...a,\r\n        },\r\n    }));\r\n    const stylesheetManager = new StylesheetManager({\r\n        mutationCb: wrappedMutationEmit,\r\n        adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n    });\r\n    const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\r\n        ? new IframeManagerNoop()\r\n        : new IframeManager({\r\n            mirror,\r\n            mutationCb: wrappedMutationEmit,\r\n            stylesheetManager: stylesheetManager,\r\n            recordCrossOriginIframes,\r\n            wrappedEmit,\r\n        });\r\n    for (const plugin of plugins || []) {\r\n        if (plugin.getMirror)\r\n            plugin.getMirror({\r\n                nodeMirror: mirror,\r\n                crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n                crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n            });\r\n    }\r\n    const processedNodeManager = new ProcessedNodeManager();\r\n    const canvasManager = _getCanvasManager(getCanvasManager, {\r\n        mirror,\r\n        win: window,\r\n        mutationCb: (p) => wrappedEmit(wrapEvent({\r\n            type: EventType.IncrementalSnapshot,\r\n            data: {\r\n                source: IncrementalSource.CanvasMutation,\r\n                ...p,\r\n            },\r\n        })),\r\n        recordCanvas,\r\n        blockClass,\r\n        blockSelector,\r\n        unblockSelector,\r\n        sampling: sampling['canvas'],\r\n        dataURLOptions,\r\n    });\r\n    const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\r\n        __RRWEB_EXCLUDE_SHADOW_DOM__\r\n        ? new ShadowDomManagerNoop()\r\n        : new ShadowDomManager({\r\n            mutationCb: wrappedMutationEmit,\r\n            scrollCb: wrappedScrollEmit,\r\n            bypassOptions: {\r\n                onMutation,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                inlineStylesheet,\r\n                maskInputOptions,\r\n                dataURLOptions,\r\n                maskAttributeFn,\r\n                maskTextFn,\r\n                maskInputFn,\r\n                recordCanvas,\r\n                inlineImages,\r\n                sampling,\r\n                slimDOMOptions,\r\n                iframeManager,\r\n                stylesheetManager,\r\n                canvasManager,\r\n                keepIframeSrcFn,\r\n                processedNodeManager,\r\n            },\r\n            mirror,\r\n        });\r\n    const takeFullSnapshot = (isCheckout = false) => {\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.Meta,\r\n            data: {\r\n                href: window.location.href,\r\n                width: getWindowWidth(),\r\n                height: getWindowHeight(),\r\n            },\r\n        }), isCheckout);\r\n        stylesheetManager.reset();\r\n        shadowDomManager.init();\r\n        mutationBuffers.forEach((buf) => buf.lock());\r\n        const node = snapshot(document, {\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            unblockSelector,\r\n            maskAllText,\r\n            maskTextClass,\r\n            unmaskTextClass,\r\n            maskTextSelector,\r\n            unmaskTextSelector,\r\n            inlineStylesheet,\r\n            maskAllInputs: maskInputOptions,\r\n            maskAttributeFn,\r\n            maskInputFn,\r\n            maskTextFn,\r\n            slimDOM: slimDOMOptions,\r\n            dataURLOptions,\r\n            recordCanvas,\r\n            inlineImages,\r\n            onSerialize: (n) => {\r\n                if (isSerializedIframe(n, mirror)) {\r\n                    iframeManager.addIframe(n);\r\n                }\r\n                if (isSerializedStylesheet(n, mirror)) {\r\n                    stylesheetManager.trackLinkElement(n);\r\n                }\r\n                if (hasShadowRoot(n)) {\r\n                    shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n                }\r\n            },\r\n            onIframeLoad: (iframe, childSn) => {\r\n                iframeManager.attachIframe(iframe, childSn);\r\n                shadowDomManager.observeAttachShadow(iframe);\r\n            },\r\n            onStylesheetLoad: (linkEl, childSn) => {\r\n                stylesheetManager.attachLinkElement(linkEl, childSn);\r\n            },\r\n            keepIframeSrcFn,\r\n        });\r\n        if (!node) {\r\n            return console.warn('Failed to snapshot the document');\r\n        }\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.FullSnapshot,\r\n            data: {\r\n                node,\r\n                initialOffset: getWindowScroll(window),\r\n            },\r\n        }));\r\n        mutationBuffers.forEach((buf) => buf.unlock());\r\n        if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n            stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n    };\r\n    _takeFullSnapshot = takeFullSnapshot;\r\n    try {\r\n        const handlers = [];\r\n        const observe = (doc) => {\r\n            return callbackWrapper(initObservers)({\r\n                onMutation,\r\n                mutationCb: wrappedMutationEmit,\r\n                mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source,\r\n                        positions,\r\n                    },\r\n                })),\r\n                mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.MouseInteraction,\r\n                        ...d,\r\n                    },\r\n                })),\r\n                scrollCb: wrappedScrollEmit,\r\n                viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.ViewportResize,\r\n                        ...d,\r\n                    },\r\n                })),\r\n                inputCb: (v) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.Input,\r\n                        ...v,\r\n                    },\r\n                })),\r\n                mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.MediaInteraction,\r\n                        ...p,\r\n                    },\r\n                })),\r\n                styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.StyleSheetRule,\r\n                        ...r,\r\n                    },\r\n                })),\r\n                styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.StyleDeclaration,\r\n                        ...r,\r\n                    },\r\n                })),\r\n                canvasMutationCb: wrappedCanvasMutationEmit,\r\n                fontCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.Font,\r\n                        ...p,\r\n                    },\r\n                })),\r\n                selectionCb: (p) => {\r\n                    wrappedEmit(wrapEvent({\r\n                        type: EventType.IncrementalSnapshot,\r\n                        data: {\r\n                            source: IncrementalSource.Selection,\r\n                            ...p,\r\n                        },\r\n                    }));\r\n                },\r\n                customElementCb: (c) => {\r\n                    wrappedEmit(wrapEvent({\r\n                        type: EventType.IncrementalSnapshot,\r\n                        data: {\r\n                            source: IncrementalSource.CustomElement,\r\n                            ...c,\r\n                        },\r\n                    }));\r\n                },\r\n                blockClass,\r\n                ignoreClass,\r\n                ignoreSelector,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                maskInputOptions,\r\n                inlineStylesheet,\r\n                sampling,\r\n                recordCanvas,\r\n                inlineImages,\r\n                userTriggeredOnInput,\r\n                collectFonts,\r\n                doc,\r\n                maskAttributeFn,\r\n                maskInputFn,\r\n                maskTextFn,\r\n                keepIframeSrcFn,\r\n                blockSelector,\r\n                unblockSelector,\r\n                slimDOMOptions,\r\n                dataURLOptions,\r\n                mirror,\r\n                iframeManager,\r\n                stylesheetManager,\r\n                shadowDomManager,\r\n                processedNodeManager,\r\n                canvasManager,\r\n                ignoreCSSAttributes,\r\n                plugins: plugins\r\n                    ?.filter((p) => p.observer)\r\n                    ?.map((p) => ({\r\n                    observer: p.observer,\r\n                    options: p.options,\r\n                    callback: (payload) => wrappedEmit(wrapEvent({\r\n                        type: EventType.Plugin,\r\n                        data: {\r\n                            plugin: p.name,\r\n                            payload,\r\n                        },\r\n                    })),\r\n                })) || [],\r\n            }, {});\r\n        };\r\n        iframeManager.addLoadListener((iframeEl) => {\r\n            try {\r\n                handlers.push(observe(iframeEl.contentDocument));\r\n            }\r\n            catch (error) {\r\n                console.warn(error);\r\n            }\r\n        });\r\n        const init = () => {\r\n            takeFullSnapshot();\r\n            handlers.push(observe(document));\r\n        };\r\n        if (document.readyState === 'interactive' ||\r\n            document.readyState === 'complete') {\r\n            init();\r\n        }\r\n        else {\r\n            handlers.push(on('DOMContentLoaded', () => {\r\n                wrappedEmit(wrapEvent({\r\n                    type: EventType.DomContentLoaded,\r\n                    data: {},\r\n                }));\r\n                if (recordAfter === 'DOMContentLoaded')\r\n                    init();\r\n            }));\r\n            handlers.push(on('load', () => {\r\n                wrappedEmit(wrapEvent({\r\n                    type: EventType.Load,\r\n                    data: {},\r\n                }));\r\n                if (recordAfter === 'load')\r\n                    init();\r\n            }, window));\r\n        }\r\n        return () => {\r\n            handlers.forEach((h) => h());\r\n            processedNodeManager.destroy();\r\n            _takeFullSnapshot = undefined;\r\n            unregisterErrorHandler();\r\n        };\r\n    }\r\n    catch (error) {\r\n        console.warn(error);\r\n    }\r\n}\r\nfunction addCustomEvent(tag, payload) {\r\n    if (!_wrappedEmit) {\r\n        throw new Error('please add custom event after start recording');\r\n    }\r\n    _wrappedEmit(wrapEvent({\r\n        type: EventType.Custom,\r\n        data: {\r\n            tag,\r\n            payload,\r\n        },\r\n    }));\r\n}\r\nfunction freezePage() {\r\n    mutationBuffers.forEach((buf) => buf.freeze());\r\n}\r\nfunction takeFullSnapshot(isCheckout) {\r\n    if (!_takeFullSnapshot) {\r\n        throw new Error('please take full snapshot after start recording');\r\n    }\r\n    _takeFullSnapshot(isCheckout);\r\n}\r\nrecord.mirror = mirror;\r\nrecord.takeFullSnapshot = takeFullSnapshot;\r\nfunction _getCanvasManager(getCanvasManagerFn, options) {\r\n    try {\r\n        return getCanvasManagerFn\r\n            ? getCanvasManagerFn(options)\r\n            : new CanvasManagerNoop();\r\n    }\r\n    catch {\r\n        console.warn('Unable to initialize CanvasManager');\r\n        return new CanvasManagerNoop();\r\n    }\r\n}\n\nexport { addCustomEvent, record as default, freezePage, mirror, takeFullSnapshot };\n","/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nexport function timestampToMs(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nexport function timestampToS(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../../types';\n\n/**\n * Add a breadcrumb event to replay.\n */\nexport function addBreadcrumbEvent(replay: ReplayContainer, breadcrumb: Breadcrumb): void {\n  if (breadcrumb.category === 'sentry.transaction') {\n    return;\n  }\n\n  if (['ui.click', 'ui.input'].includes(breadcrumb.category as string)) {\n    replay.triggerUserActivity();\n  } else {\n    replay.checkAndHandleExpiredSession();\n  }\n\n  replay.addUpdate(() => {\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n      // but maybe we should just keep them as milliseconds\n      timestamp: (breadcrumb.timestamp || 0) * 1000,\n      data: {\n        tag: 'breadcrumb',\n        // normalize to max. 10 depth and 1_000 properties per object\n        payload: normalize(breadcrumb, 10, 1_000),\n      },\n    });\n\n    // Do not flush after console log messages\n    return breadcrumb.category === 'console';\n  });\n}\n","import type { INode } from '@sentry-internal/rrweb-snapshot';\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nexport function getClosestInteractive(element: Element): Element {\n  const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n  return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in <button><img></button>,\n * The target will be the image, not the button, which we don't want here\n */\nexport function getClickTargetNode(event: Event | MouseEvent | Node): Node | INode | null {\n  const target = getTargetNode(event);\n\n  if (!target || !(target instanceof Element)) {\n    return target;\n  }\n\n  return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nexport function getTargetNode(event: Node | { target: EventTarget | null }): Node | INode | null {\n  if (isEventWithTarget(event)) {\n    return event.target as Node | null;\n  }\n\n  return event;\n}\n\nfunction isEventWithTarget(event: unknown): event is { target: EventTarget | null } {\n  return typeof event === 'object' && !!event && 'target' in event;\n}\n","import { fill } from '@sentry/utils';\n\nimport { WINDOW } from '../../constants';\n\ntype WindowOpenHandler = () => void;\n\nlet handlers: undefined | WindowOpenHandler[];\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nexport function onWindowOpen(cb: WindowOpenHandler): () => void {\n  // Ensure to only register this once\n  if (!handlers) {\n    handlers = [];\n    monkeyPatchWindowOpen();\n  }\n\n  handlers.push(cb);\n\n  return () => {\n    const pos = handlers ? handlers.indexOf(cb) : -1;\n    if (pos > -1) {\n      (handlers as WindowOpenHandler[]).splice(pos, 1);\n    }\n  };\n}\n\nfunction monkeyPatchWindowOpen(): void {\n  fill(WINDOW, 'open', function (originalWindowOpen: () => void): () => void {\n    return function (...args: unknown[]): void {\n      if (handlers) {\n        try {\n          handlers.forEach(handler => handler());\n        } catch (e) {\n          // ignore errors in here\n        }\n      }\n\n      return originalWindowOpen.apply(WINDOW, args);\n    };\n  });\n}\n","import { IncrementalSource, MouseInteractions, record } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/types';\n\nimport { WINDOW } from '../constants';\nimport type {\n  RecordingEvent,\n  ReplayClickDetector,\n  ReplayContainer,\n  ReplayMultiClickFrame,\n  ReplaySlowClickFrame,\n  SlowClickConfig,\n} from '../types';\nimport { ReplayEventTypeIncrementalSnapshot } from '../types';\nimport { timestampToS } from '../util/timestamp';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClosestInteractive } from './util/domUtils';\nimport { onWindowOpen } from './util/onWindowOpen';\n\ntype ClickBreadcrumb = Breadcrumb & {\n  timestamp: number;\n};\n\ninterface Click {\n  timestamp: number;\n  mutationAfter?: number;\n  scrollAfter?: number;\n  clickBreadcrumb: ClickBreadcrumb;\n  clickCount: number;\n  node: HTMLElement;\n}\n\ntype IncrementalRecordingEvent = RecordingEvent & {\n  type: typeof ReplayEventTypeIncrementalSnapshot;\n  data: { source: IncrementalSource };\n};\n\ntype IncrementalMouseInteractionRecordingEvent = IncrementalRecordingEvent & {\n  type: typeof ReplayEventTypeIncrementalSnapshot;\n  data: { type: MouseInteractions; id: number };\n};\n\n/** Handle a click. */\nexport function handleClick(clickDetector: ReplayClickDetector, clickBreadcrumb: Breadcrumb, node: HTMLElement): void {\n  clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nexport class ClickDetector implements ReplayClickDetector {\n  // protected for testing\n  protected _lastMutation: number;\n  protected _lastScroll: number;\n\n  private _clicks: Click[];\n  private _teardown: undefined | (() => void);\n\n  private _threshold: number;\n  private _scollTimeout: number;\n  private _timeout: number;\n  private _ignoreSelector: string;\n\n  private _replay: ReplayContainer;\n  private _checkClickTimeout?: ReturnType<typeof setTimeout>;\n  private _addBreadcrumbEvent: typeof addBreadcrumbEvent;\n\n  public constructor(\n    replay: ReplayContainer,\n    slowClickConfig: SlowClickConfig,\n    // Just for easier testing\n    _addBreadcrumbEvent = addBreadcrumbEvent,\n  ) {\n    this._lastMutation = 0;\n    this._lastScroll = 0;\n    this._clicks = [];\n\n    // We want everything in s, but options are in ms\n    this._timeout = slowClickConfig.timeout / 1000;\n    this._threshold = slowClickConfig.threshold / 1000;\n    this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n    this._replay = replay;\n    this._ignoreSelector = slowClickConfig.ignoreSelector;\n    this._addBreadcrumbEvent = _addBreadcrumbEvent;\n  }\n\n  /** Register click detection handlers on mutation or scroll. */\n  public addListeners(): void {\n    const cleanupWindowOpen = onWindowOpen(() => {\n      // Treat window.open as mutation\n      this._lastMutation = nowInSeconds();\n    });\n\n    this._teardown = () => {\n      cleanupWindowOpen();\n\n      this._clicks = [];\n      this._lastMutation = 0;\n      this._lastScroll = 0;\n    };\n  }\n\n  /** Clean up listeners. */\n  public removeListeners(): void {\n    if (this._teardown) {\n      this._teardown();\n    }\n\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n  }\n\n  /** @inheritDoc */\n  public handleClick(breadcrumb: Breadcrumb, node: HTMLElement): void {\n    if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n      return;\n    }\n\n    const newClick: Click = {\n      timestamp: timestampToS(breadcrumb.timestamp),\n      clickBreadcrumb: breadcrumb,\n      // Set this to 0 so we know it originates from the click breadcrumb\n      clickCount: 0,\n      node,\n    };\n\n    // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n    if (\n      this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n    ) {\n      return;\n    }\n\n    this._clicks.push(newClick);\n\n    // If this is the first new click, set a timeout to check for multi clicks\n    if (this._clicks.length === 1) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** @inheritDoc */\n  public registerMutation(timestamp = Date.now()): void {\n    this._lastMutation = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n  public registerScroll(timestamp = Date.now()): void {\n    this._lastScroll = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n  public registerClick(element: HTMLElement): void {\n    const node = getClosestInteractive(element);\n    this._handleMultiClick(node as HTMLElement);\n  }\n\n  /** Count multiple clicks on elements. */\n  private _handleMultiClick(node: HTMLElement): void {\n    this._getClicks(node).forEach(click => {\n      click.clickCount++;\n    });\n  }\n\n  /** Get all pending clicks for a given node. */\n  private _getClicks(node: HTMLElement): Click[] {\n    return this._clicks.filter(click => click.node === node);\n  }\n\n  /** Check the clicks that happened. */\n  private _checkClicks(): void {\n    const timedOutClicks: Click[] = [];\n\n    const now = nowInSeconds();\n\n    this._clicks.forEach(click => {\n      if (!click.mutationAfter && this._lastMutation) {\n        click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n      }\n      if (!click.scrollAfter && this._lastScroll) {\n        click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n      }\n\n      // All of these are in seconds!\n      if (click.timestamp + this._timeout <= now) {\n        timedOutClicks.push(click);\n      }\n    });\n\n    // Remove \"old\" clicks\n    for (const click of timedOutClicks) {\n      const pos = this._clicks.indexOf(click);\n\n      if (pos > -1) {\n        this._generateBreadcrumbs(click);\n        this._clicks.splice(pos, 1);\n      }\n    }\n\n    // Trigger new check, unless no clicks left\n    if (this._clicks.length) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** Generate matching breadcrumb(s) for the click. */\n  private _generateBreadcrumbs(click: Click): void {\n    const replay = this._replay;\n    const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n    const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n    const isSlowClick = !hadScroll && !hadMutation;\n    const { clickCount, clickBreadcrumb } = click;\n\n    // Slow click\n    if (isSlowClick) {\n      // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n      // If not, it means we just timed out without scroll & mutation\n      const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n      const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n      const breadcrumb: ReplaySlowClickFrame = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.slowClickDetected',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          timeAfterClickMs,\n          endReason,\n          // If clickCount === 0, it means multiClick was not correctly captured here\n          // - we still want to send 1 in this case\n          clickCount: clickCount || 1,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n      return;\n    }\n\n    // Multi click\n    if (clickCount > 1) {\n      const breadcrumb: ReplayMultiClickFrame = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.multiClick',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          clickCount,\n          metric: true,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n    }\n  }\n\n  /** Schedule to check current clicks. */\n  private _scheduleCheckClicks(): void {\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n\n    this._checkClickTimeout = setTimeout(() => this._checkClicks(), 1000);\n  }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nexport function ignoreElement(node: HTMLElement, ignoreSelector: string): boolean {\n  if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n    return true;\n  }\n\n  // If <input> tag, we only want to consider input[type='submit'] & input[type='button']\n  if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n    return true;\n  }\n\n  // If <a> tag, detect special variants that may not lead to an action\n  // If target !== _self, we may open the link somewhere else, which would lead to no action\n  // Also, when downloading a file, we may not leave the page, but still not trigger an action\n  if (\n    node.tagName === 'A' &&\n    (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n  ) {\n    return true;\n  }\n\n  if (ignoreSelector && node.matches(ignoreSelector)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is ClickBreadcrumb {\n  return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds(): number {\n  return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nexport function updateClickDetectorForRecordingEvent(clickDetector: ReplayClickDetector, event: RecordingEvent): void {\n  try {\n    // note: We only consider incremental snapshots here\n    // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n    // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n    // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n    // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n    // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n    // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n    if (!isIncrementalEvent(event)) {\n      return;\n    }\n\n    const { source } = event.data;\n    if (source === IncrementalSource.Mutation) {\n      clickDetector.registerMutation(event.timestamp);\n    }\n\n    if (source === IncrementalSource.Scroll) {\n      clickDetector.registerScroll(event.timestamp);\n    }\n\n    if (isIncrementalMouseInteraction(event)) {\n      const { type, id } = event.data;\n      const node = record.mirror.getNode(id);\n\n      if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n        clickDetector.registerClick(node);\n      }\n    }\n  } catch {\n    // ignore errors here, e.g. if accessing something that does not exist\n  }\n}\n\nfunction isIncrementalEvent(event: RecordingEvent): event is IncrementalRecordingEvent {\n  return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n  event: IncrementalRecordingEvent,\n): event is IncrementalMouseInteractionRecordingEvent {\n  return event.data.source === IncrementalSource.MouseInteraction;\n}\n","import type { ReplayBreadcrumbFrame } from '../types/replayFrame';\n\n/**\n * Create a breadcrumb for a replay.\n */\nexport function createBreadcrumb(\n  breadcrumb: Omit<ReplayBreadcrumbFrame, 'timestamp' | 'type'> & Partial<Pick<ReplayBreadcrumbFrame, 'timestamp'>>,\n): ReplayBreadcrumbFrame {\n  return {\n    timestamp: Date.now() / 1000,\n    type: 'default',\n    ...breadcrumb,\n  };\n}\n","var NodeType;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n    return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n    const host = n?.host;\r\n    return Boolean(host?.shadowRoot === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n    if (cssText.includes(' background-clip: text;') &&\r\n        !cssText.includes(' -webkit-background-clip: text;')) {\r\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n    }\r\n    return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n    const { cssText } = rule;\r\n    if (cssText.split('\"').length < 3)\r\n        return cssText;\r\n    const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n    if (rule.layerName === '') {\r\n        statement.push(`layer`);\r\n    }\r\n    else if (rule.layerName) {\r\n        statement.push(`layer(${rule.layerName})`);\r\n    }\r\n    if (rule.supportsText) {\r\n        statement.push(`supports(${rule.supportsText})`);\r\n    }\r\n    if (rule.media.length) {\r\n        statement.push(rule.media.mediaText);\r\n    }\r\n    return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n    try {\r\n        const rules = s.rules || s.cssRules;\r\n        return rules\r\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n            : null;\r\n    }\r\n    catch (error) {\r\n        return null;\r\n    }\r\n}\r\nfunction stringifyRule(rule) {\r\n    let importStringified;\r\n    if (isCSSImportRule(rule)) {\r\n        try {\r\n            importStringified =\r\n                stringifyStylesheet(rule.styleSheet) ||\r\n                    escapeImportStatement(rule);\r\n        }\r\n        catch (error) {\r\n        }\r\n    }\r\n    else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n        return fixSafariColons(rule.cssText);\r\n    }\r\n    return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n    const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n    return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n    return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n    return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n    constructor() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    getId(n) {\r\n        if (!n)\r\n            return -1;\r\n        const id = this.getMeta(n)?.id;\r\n        return id ?? -1;\r\n    }\r\n    getNode(id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    }\r\n    getIds() {\r\n        return Array.from(this.idNodeMap.keys());\r\n    }\r\n    getMeta(n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    }\r\n    removeNodeFromMap(n) {\r\n        const id = this.getId(n);\r\n        this.idNodeMap.delete(id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n        }\r\n    }\r\n    has(id) {\r\n        return this.idNodeMap.has(id);\r\n    }\r\n    hasNode(node) {\r\n        return this.nodeMetaMap.has(node);\r\n    }\r\n    add(n, meta) {\r\n        const id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    }\r\n    replace(id, n) {\r\n        const oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            const meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    }\r\n    reset() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n}\r\nfunction createMirror() {\r\n    return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n    if (tagName === 'OPTION') {\r\n        tagName = 'SELECT';\r\n    }\r\n    return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n        (type && maskInputOptions[type]) ||\r\n        type === 'password' ||\r\n        (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n    let text = value || '';\r\n    if (!isMasked) {\r\n        return text;\r\n    }\r\n    if (maskInputFn) {\r\n        text = maskInputFn(text, element);\r\n    }\r\n    return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n    return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n    return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n    const ctx = canvas.getContext('2d');\r\n    if (!ctx)\r\n        return true;\r\n    const chunkSize = 50;\r\n    for (let x = 0; x < canvas.width; x += chunkSize) {\r\n        for (let y = 0; y < canvas.height; y += chunkSize) {\r\n            const getImageData = ctx.getImageData;\r\n            const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n                : getImageData;\r\n            const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n            if (pixelBuffer.some((pixel) => pixel !== 0))\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n    if (!a || !b || a.type !== b.type)\r\n        return false;\r\n    if (a.type === NodeType.Document)\r\n        return a.compatMode === b.compatMode;\r\n    else if (a.type === NodeType.DocumentType)\r\n        return (a.name === b.name &&\r\n            a.publicId === b.publicId &&\r\n            a.systemId === b.systemId);\r\n    else if (a.type === NodeType.Comment ||\r\n        a.type === NodeType.Text ||\r\n        a.type === NodeType.CDATA)\r\n        return a.textContent === b.textContent;\r\n    else if (a.type === NodeType.Element)\r\n        return (a.tagName === b.tagName &&\r\n            JSON.stringify(a.attributes) ===\r\n                JSON.stringify(b.attributes) &&\r\n            a.isSVG === b.isSVG &&\r\n            a.needBlock === b.needBlock);\r\n    return false;\r\n}\r\nfunction getInputType(element) {\r\n    const type = element.type;\r\n    return element.hasAttribute('data-rr-is-password')\r\n        ? 'password'\r\n        : type\r\n            ?\r\n                toLowerCase(type)\r\n            : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n    if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n        return el.getAttribute('value') || '';\r\n    }\r\n    return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n    return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n    if (element instanceof HTMLFormElement) {\r\n        return 'form';\r\n    }\r\n    const processedTagName = toLowerCase(element.tagName);\r\n    if (tagNameRegex.test(processedTagName)) {\r\n        return 'div';\r\n    }\r\n    return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n    let origin = '';\r\n    if (url.indexOf('//') > -1) {\r\n        origin = url.split('/').slice(0, 3).join('/');\r\n    }\r\n    else {\r\n        origin = url.split('/')[0];\r\n    }\r\n    origin = origin.split('?')[0];\r\n    return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n    return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n        const filePath = path1 || path2 || path3;\r\n        const maybeQuote = quote1 || quote2 || '';\r\n        if (!filePath) {\r\n            return origin;\r\n        }\r\n        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (DATA_URI.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (filePath[0] === '/') {\r\n            return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n        }\r\n        const stack = href.split('/');\r\n        const parts = filePath.split('/');\r\n        stack.pop();\r\n        for (const part of parts) {\r\n            if (part === '.') {\r\n                continue;\r\n            }\r\n            else if (part === '..') {\r\n                stack.pop();\r\n            }\r\n            else {\r\n                stack.push(part);\r\n            }\r\n        }\r\n        return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n    });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n    if (attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    let pos = 0;\r\n    function collectCharacters(regEx) {\r\n        let chars;\r\n        const match = regEx.exec(attributeValue.substring(pos));\r\n        if (match) {\r\n            chars = match[0];\r\n            pos += chars.length;\r\n            return chars;\r\n        }\r\n        return '';\r\n    }\r\n    const output = [];\r\n    while (true) {\r\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n        if (pos >= attributeValue.length) {\r\n            break;\r\n        }\r\n        let url = collectCharacters(SRCSET_NOT_SPACES);\r\n        if (url.slice(-1) === ',') {\r\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n            output.push(url);\r\n        }\r\n        else {\r\n            let descriptorsStr = '';\r\n            url = absoluteToDoc(doc, url);\r\n            let inParens = false;\r\n            while (true) {\r\n                const c = attributeValue.charAt(pos);\r\n                if (c === '') {\r\n                    output.push((url + descriptorsStr).trim());\r\n                    break;\r\n                }\r\n                else if (!inParens) {\r\n                    if (c === ',') {\r\n                        pos += 1;\r\n                        output.push((url + descriptorsStr).trim());\r\n                        break;\r\n                    }\r\n                    else if (c === '(') {\r\n                        inParens = true;\r\n                    }\r\n                }\r\n                else {\r\n                    if (c === ')') {\r\n                        inParens = false;\r\n                    }\r\n                }\r\n                descriptorsStr += c;\r\n                pos += 1;\r\n            }\r\n        }\r\n    }\r\n    return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n    if (!attributeValue || attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    const a = doc.createElement('a');\r\n    a.href = attributeValue;\r\n    return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n    const a = document.createElement('a');\r\n    a.href = '';\r\n    return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n    if (!value) {\r\n        return value;\r\n    }\r\n    if (name === 'src' ||\r\n        (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'xlink:href' && value[0] !== '#') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'background' &&\r\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'srcset') {\r\n        return getAbsoluteSrcsetString(doc, value);\r\n    }\r\n    else if (name === 'style') {\r\n        return absoluteToStylesheet(value, getHref());\r\n    }\r\n    else if (tagName === 'object' && name === 'data') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    if (typeof maskAttributeFn === 'function') {\r\n        return maskAttributeFn(name, value, element);\r\n    }\r\n    return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n    return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n    try {\r\n        if (unblockSelector && element.matches(unblockSelector)) {\r\n            return false;\r\n        }\r\n        if (typeof blockClass === 'string') {\r\n            if (element.classList.contains(blockClass)) {\r\n                return true;\r\n            }\r\n        }\r\n        else {\r\n            for (let eIndex = element.classList.length; eIndex--;) {\r\n                const className = element.classList[eIndex];\r\n                if (blockClass.test(className)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        if (blockSelector) {\r\n            return element.matches(blockSelector);\r\n        }\r\n    }\r\n    catch (e) {\r\n    }\r\n    return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n    for (let eIndex = el.classList.length; eIndex--;) {\r\n        const className = el.classList[eIndex];\r\n        if (regex.test(className)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n    if (!node)\r\n        return false;\r\n    if (checkAncestors) {\r\n        return (distanceToMatch(node, (node) => elementClassMatchesRegex(node, regex)) >= 0);\r\n    }\r\n    else if (node.nodeType === node.ELEMENT_NODE) {\r\n        return elementClassMatchesRegex(node, regex);\r\n    }\r\n    return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n    if (!node)\r\n        return -1;\r\n    if (node.nodeType !== node.ELEMENT_NODE)\r\n        return -1;\r\n    if (distance > limit)\r\n        return -1;\r\n    if (matchPredicate(node))\r\n        return distance;\r\n    return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n    return (node) => {\r\n        const el = node;\r\n        if (el === null)\r\n            return false;\r\n        try {\r\n            if (className) {\r\n                if (typeof className === 'string') {\r\n                    if (el.matches(`.${className}`))\r\n                        return true;\r\n                }\r\n                else if (elementClassMatchesRegex(el, className)) {\r\n                    return true;\r\n                }\r\n            }\r\n            if (selector && el.matches(selector))\r\n                return true;\r\n            return false;\r\n        }\r\n        catch {\r\n            return false;\r\n        }\r\n    };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n    try {\r\n        const el = node.nodeType === node.ELEMENT_NODE\r\n            ? node\r\n            : node.parentElement;\r\n        if (el === null)\r\n            return false;\r\n        let maskDistance = -1;\r\n        let unmaskDistance = -1;\r\n        if (maskAllText) {\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n            if (unmaskDistance < 0) {\r\n                return true;\r\n            }\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n        }\r\n        else {\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n            if (maskDistance < 0) {\r\n                return false;\r\n            }\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n        }\r\n        return maskDistance >= 0\r\n            ? unmaskDistance >= 0\r\n                ? maskDistance <= unmaskDistance\r\n                : true\r\n            : unmaskDistance >= 0\r\n                ? false\r\n                : !!maskAllText;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n    const win = iframeEl.contentWindow;\r\n    if (!win) {\r\n        return;\r\n    }\r\n    let fired = false;\r\n    let readyState;\r\n    try {\r\n        readyState = win.document.readyState;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (readyState !== 'complete') {\r\n        const timer = setTimeout(() => {\r\n            if (!fired) {\r\n                listener();\r\n                fired = true;\r\n            }\r\n        }, iframeLoadTimeout);\r\n        iframeEl.addEventListener('load', () => {\r\n            clearTimeout(timer);\r\n            fired = true;\r\n            listener();\r\n        });\r\n        return;\r\n    }\r\n    const blankUrl = 'about:blank';\r\n    if (win.location.href !== blankUrl ||\r\n        iframeEl.src === blankUrl ||\r\n        iframeEl.src === '') {\r\n        setTimeout(listener, 0);\r\n        return iframeEl.addEventListener('load', listener);\r\n    }\r\n    iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n    let fired = false;\r\n    let styleSheetLoaded;\r\n    try {\r\n        styleSheetLoaded = link.sheet;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (styleSheetLoaded)\r\n        return;\r\n    const timer = setTimeout(() => {\r\n        if (!fired) {\r\n            listener();\r\n            fired = true;\r\n        }\r\n    }, styleSheetLoadTimeout);\r\n    link.addEventListener('load', () => {\r\n        clearTimeout(timer);\r\n        fired = true;\r\n        listener();\r\n    });\r\n}\r\nfunction serializeNode(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n    const rootId = getRootId(doc, mirror);\r\n    switch (n.nodeType) {\r\n        case n.DOCUMENT_NODE:\r\n            if (n.compatMode !== 'CSS1Compat') {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                    compatMode: n.compatMode,\r\n                };\r\n            }\r\n            else {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                };\r\n            }\r\n        case n.DOCUMENT_TYPE_NODE:\r\n            return {\r\n                type: NodeType.DocumentType,\r\n                name: n.name,\r\n                publicId: n.publicId,\r\n                systemId: n.systemId,\r\n                rootId,\r\n            };\r\n        case n.ELEMENT_NODE:\r\n            return serializeElementNode(n, {\r\n                doc,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                inlineStylesheet,\r\n                maskAttributeFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                dataURLOptions,\r\n                inlineImages,\r\n                recordCanvas,\r\n                keepIframeSrcFn,\r\n                newlyAddedElement,\r\n                rootId,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n            });\r\n        case n.TEXT_NODE:\r\n            return serializeTextNode(n, {\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                maskTextFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                rootId,\r\n            });\r\n        case n.CDATA_SECTION_NODE:\r\n            return {\r\n                type: NodeType.CDATA,\r\n                textContent: '',\r\n                rootId,\r\n            };\r\n        case n.COMMENT_NODE:\r\n            return {\r\n                type: NodeType.Comment,\r\n                textContent: n.textContent || '',\r\n                rootId,\r\n            };\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n    if (!mirror.hasNode(doc))\r\n        return undefined;\r\n    const docId = mirror.getId(doc);\r\n    return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n    const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n    const parentTagName = n.parentNode && n.parentNode.tagName;\r\n    let textContent = n.textContent;\r\n    const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n    const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n    const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n    if (isStyle && textContent) {\r\n        try {\r\n            if (n.nextSibling || n.previousSibling) {\r\n            }\r\n            else if (n.parentNode.sheet?.cssRules) {\r\n                textContent = stringifyStylesheet(n.parentNode.sheet);\r\n            }\r\n        }\r\n        catch (err) {\r\n            console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n        }\r\n        textContent = absoluteToStylesheet(textContent, getHref());\r\n    }\r\n    if (isScript) {\r\n        textContent = 'SCRIPT_PLACEHOLDER';\r\n    }\r\n    const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n    if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n        textContent = maskTextFn\r\n            ? maskTextFn(textContent)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n        textContent = maskInputFn\r\n            ? maskInputFn(textContent, n.parentNode)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (parentTagName === 'OPTION' && textContent) {\r\n        const isInputMasked = shouldMaskInput({\r\n            type: null,\r\n            tagName: parentTagName,\r\n            maskInputOptions,\r\n        });\r\n        textContent = maskInputValue({\r\n            isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n            element: n,\r\n            value: textContent,\r\n            maskInputFn,\r\n        });\r\n    }\r\n    return {\r\n        type: NodeType.Text,\r\n        textContent: textContent || '',\r\n        isStyle,\r\n        rootId,\r\n    };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n    const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n    const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n    const tagName = getValidTagName(n);\r\n    let attributes = {};\r\n    const len = n.attributes.length;\r\n    for (let i = 0; i < len; i++) {\r\n        const attr = n.attributes[i];\r\n        if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n            attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n        }\r\n    }\r\n    if (tagName === 'link' && inlineStylesheet) {\r\n        const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n            return s.href === n.href;\r\n        });\r\n        let cssText = null;\r\n        if (stylesheet) {\r\n            cssText = stringifyStylesheet(stylesheet);\r\n        }\r\n        if (cssText) {\r\n            delete attributes.rel;\r\n            delete attributes.href;\r\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n        }\r\n    }\r\n    if (tagName === 'style' &&\r\n        n.sheet &&\r\n        !(n.innerText || n.textContent || '').trim().length) {\r\n        const cssText = stringifyStylesheet(n.sheet);\r\n        if (cssText) {\r\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n        }\r\n    }\r\n    if (tagName === 'input' ||\r\n        tagName === 'textarea' ||\r\n        tagName === 'select' ||\r\n        tagName === 'option') {\r\n        const el = n;\r\n        const type = getInputType(el);\r\n        const value = getInputValue(el, toUpperCase(tagName), type);\r\n        const checked = el.checked;\r\n        if (type !== 'submit' && type !== 'button' && value) {\r\n            const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n                type,\r\n                tagName: toUpperCase(tagName),\r\n                maskInputOptions,\r\n            }));\r\n            attributes.value = maskInputValue({\r\n                isMasked: forceMask,\r\n                element: el,\r\n                value,\r\n                maskInputFn,\r\n            });\r\n        }\r\n        if (checked) {\r\n            attributes.checked = checked;\r\n        }\r\n    }\r\n    if (tagName === 'option') {\r\n        if (n.selected && !maskInputOptions['select']) {\r\n            attributes.selected = true;\r\n        }\r\n        else {\r\n            delete attributes.selected;\r\n        }\r\n    }\r\n    if (tagName === 'canvas' && recordCanvas) {\r\n        if (n.__context === '2d') {\r\n            if (!is2DCanvasBlank(n)) {\r\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n        }\r\n        else if (!('__context' in n)) {\r\n            const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            const blankCanvas = document.createElement('canvas');\r\n            blankCanvas.width = n.width;\r\n            blankCanvas.height = n.height;\r\n            const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            if (canvasDataURL !== blankCanvasDataURL) {\r\n                attributes.rr_dataURL = canvasDataURL;\r\n            }\r\n        }\r\n    }\r\n    if (tagName === 'img' && inlineImages) {\r\n        if (!canvasService) {\r\n            canvasService = doc.createElement('canvas');\r\n            canvasCtx = canvasService.getContext('2d');\r\n        }\r\n        const image = n;\r\n        const oldValue = image.crossOrigin;\r\n        image.crossOrigin = 'anonymous';\r\n        const recordInlineImage = () => {\r\n            image.removeEventListener('load', recordInlineImage);\r\n            try {\r\n                canvasService.width = image.naturalWidth;\r\n                canvasService.height = image.naturalHeight;\r\n                canvasCtx.drawImage(image, 0, 0);\r\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n            catch (err) {\r\n                console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n            }\r\n            oldValue\r\n                ? (attributes.crossOrigin = oldValue)\r\n                : image.removeAttribute('crossorigin');\r\n        };\r\n        if (image.complete && image.naturalWidth !== 0)\r\n            recordInlineImage();\r\n        else\r\n            image.addEventListener('load', recordInlineImage);\r\n    }\r\n    if (tagName === 'audio' || tagName === 'video') {\r\n        attributes.rr_mediaState = n.paused\r\n            ? 'paused'\r\n            : 'played';\r\n        attributes.rr_mediaCurrentTime = n.currentTime;\r\n    }\r\n    if (!newlyAddedElement) {\r\n        if (n.scrollLeft) {\r\n            attributes.rr_scrollLeft = n.scrollLeft;\r\n        }\r\n        if (n.scrollTop) {\r\n            attributes.rr_scrollTop = n.scrollTop;\r\n        }\r\n    }\r\n    if (needBlock) {\r\n        const { width, height } = n.getBoundingClientRect();\r\n        attributes = {\r\n            class: attributes.class,\r\n            rr_width: `${width}px`,\r\n            rr_height: `${height}px`,\r\n        };\r\n    }\r\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n        if (!n.contentDocument) {\r\n            attributes.rr_src = attributes.src;\r\n        }\r\n        delete attributes.src;\r\n    }\r\n    let isCustomElement;\r\n    try {\r\n        if (customElements.get(tagName))\r\n            isCustomElement = true;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return {\r\n        type: NodeType.Element,\r\n        tagName,\r\n        attributes,\r\n        childNodes: [],\r\n        isSVG: isSVGElement(n) || undefined,\r\n        needBlock,\r\n        rootId,\r\n        isCustom: isCustomElement,\r\n    };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n    if (maybeAttr === undefined || maybeAttr === null) {\r\n        return '';\r\n    }\r\n    else {\r\n        return maybeAttr.toLowerCase();\r\n    }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n    if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n        return true;\r\n    }\r\n    else if (sn.type === NodeType.Element) {\r\n        if (slimDOMOptions.script &&\r\n            (sn.tagName === 'script' ||\r\n                (sn.tagName === 'link' &&\r\n                    (sn.attributes.rel === 'preload' ||\r\n                        sn.attributes.rel === 'modulepreload') &&\r\n                    sn.attributes.as === 'script') ||\r\n                (sn.tagName === 'link' &&\r\n                    sn.attributes.rel === 'prefetch' &&\r\n                    typeof sn.attributes.href === 'string' &&\r\n                    sn.attributes.href.endsWith('.js')))) {\r\n            return true;\r\n        }\r\n        else if (slimDOMOptions.headFavicon &&\r\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n                (sn.tagName === 'meta' &&\r\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n            return true;\r\n        }\r\n        else if (sn.tagName === 'meta') {\r\n            if (slimDOMOptions.headMetaDescKeywords &&\r\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaSocial &&\r\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaRobots &&\r\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaHttpEquiv &&\r\n                sn.attributes['http-equiv'] !== undefined) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaAuthorship &&\r\n                (lowerIfExists(sn.attributes.name) === 'author' ||\r\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\r\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\r\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\r\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaVerification &&\r\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\r\n    let { preserveWhiteSpace = true } = options;\r\n    const _serializedNode = serializeNode(n, {\r\n        doc,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        maskAllText,\r\n        unblockSelector,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement,\r\n    });\r\n    if (!_serializedNode) {\r\n        console.warn(n, 'not serialized');\r\n        return null;\r\n    }\r\n    let id;\r\n    if (mirror.hasNode(n)) {\r\n        id = mirror.getId(n);\r\n    }\r\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n        (!preserveWhiteSpace &&\r\n            _serializedNode.type === NodeType.Text &&\r\n            !_serializedNode.isStyle &&\r\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n        id = IGNORED_NODE;\r\n    }\r\n    else {\r\n        id = genId();\r\n    }\r\n    const serializedNode = Object.assign(_serializedNode, { id });\r\n    mirror.add(n, serializedNode);\r\n    if (id === IGNORED_NODE) {\r\n        return null;\r\n    }\r\n    if (onSerialize) {\r\n        onSerialize(n);\r\n    }\r\n    let recordChild = !skipChild;\r\n    if (serializedNode.type === NodeType.Element) {\r\n        recordChild = recordChild && !serializedNode.needBlock;\r\n        delete serializedNode.needBlock;\r\n        const shadowRoot = n.shadowRoot;\r\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n            serializedNode.isShadowHost = true;\r\n    }\r\n    if ((serializedNode.type === NodeType.Document ||\r\n        serializedNode.type === NodeType.Element) &&\r\n        recordChild) {\r\n        if (slimDOMOptions.headWhitespace &&\r\n            serializedNode.type === NodeType.Element &&\r\n            serializedNode.tagName === 'head') {\r\n            preserveWhiteSpace = false;\r\n        }\r\n        const bypassOptions = {\r\n            doc,\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            maskAllText,\r\n            unblockSelector,\r\n            maskTextClass,\r\n            unmaskTextClass,\r\n            maskTextSelector,\r\n            unmaskTextSelector,\r\n            skipChild,\r\n            inlineStylesheet,\r\n            maskInputOptions,\r\n            maskAttributeFn,\r\n            maskTextFn,\r\n            maskInputFn,\r\n            slimDOMOptions,\r\n            dataURLOptions,\r\n            inlineImages,\r\n            recordCanvas,\r\n            preserveWhiteSpace,\r\n            onSerialize,\r\n            onIframeLoad,\r\n            iframeLoadTimeout,\r\n            onStylesheetLoad,\r\n            stylesheetLoadTimeout,\r\n            keepIframeSrcFn,\r\n        };\r\n        for (const childN of Array.from(n.childNodes)) {\r\n            const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n            if (serializedChildNode) {\r\n                serializedNode.childNodes.push(serializedChildNode);\r\n            }\r\n        }\r\n        if (isElement(n) && n.shadowRoot) {\r\n            for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n                const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n                if (serializedChildNode) {\r\n                    isNativeShadowDom(n.shadowRoot) &&\r\n                        (serializedChildNode.isShadow = true);\r\n                    serializedNode.childNodes.push(serializedChildNode);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (n.parentNode &&\r\n        isShadowRoot(n.parentNode) &&\r\n        isNativeShadowDom(n.parentNode)) {\r\n        serializedNode.isShadow = true;\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'iframe') {\r\n        onceIframeLoaded(n, () => {\r\n            const iframeDoc = n.contentDocument;\r\n            if (iframeDoc && onIframeLoad) {\r\n                const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n                    doc: iframeDoc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedIframeNode) {\r\n                    onIframeLoad(n, serializedIframeNode);\r\n                }\r\n            }\r\n        }, iframeLoadTimeout);\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'link' &&\r\n        serializedNode.attributes.rel === 'stylesheet') {\r\n        onceStylesheetLoaded(n, () => {\r\n            if (onStylesheetLoad) {\r\n                const serializedLinkNode = serializeNodeWithId(n, {\r\n                    doc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedLinkNode) {\r\n                    onStylesheetLoad(n, serializedLinkNode);\r\n                }\r\n            }\r\n        }, stylesheetLoadTimeout);\r\n    }\r\n    return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n    const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n        }\r\n        : maskAllInputs === false\r\n            ? {}\r\n            : maskAllInputs;\r\n    const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n        ?\r\n            {\r\n                script: true,\r\n                comment: true,\r\n                headFavicon: true,\r\n                headWhitespace: true,\r\n                headMetaDescKeywords: slimDOM === 'all',\r\n                headMetaSocial: true,\r\n                headMetaRobots: true,\r\n                headMetaHttpEquiv: true,\r\n                headMetaAuthorship: true,\r\n                headMetaVerification: true,\r\n            }\r\n        : slimDOM === false\r\n            ? {}\r\n            : slimDOM;\r\n    return serializeNodeWithId(n, {\r\n        doc: n,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        unblockSelector,\r\n        maskAllText,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        skipChild: false,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        slimDOMOptions,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        preserveWhiteSpace,\r\n        onSerialize,\r\n        onIframeLoad,\r\n        iframeLoadTimeout,\r\n        onStylesheetLoad,\r\n        stylesheetLoadTimeout,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement: false,\r\n    });\r\n}\r\nfunction visitSnapshot(node, onVisit) {\r\n    function walk(current) {\r\n        onVisit(current);\r\n        if (current.type === NodeType.Document ||\r\n            current.type === NodeType.Element) {\r\n            current.childNodes.forEach(walk);\r\n        }\r\n    }\r\n    walk(node);\r\n}\r\nfunction cleanupSnapshot() {\r\n    _id = 1;\r\n}\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n    let lineno = 1;\r\n    let column = 1;\r\n    function updatePosition(str) {\r\n        const lines = str.match(/\\n/g);\r\n        if (lines) {\r\n            lineno += lines.length;\r\n        }\r\n        const i = str.lastIndexOf('\\n');\r\n        column = i === -1 ? column + str.length : str.length - i;\r\n    }\r\n    function position() {\r\n        const start = { line: lineno, column };\r\n        return (node) => {\r\n            node.position = new Position(start);\r\n            whitespace();\r\n            return node;\r\n        };\r\n    }\r\n    class Position {\r\n        constructor(start) {\r\n            this.start = start;\r\n            this.end = { line: lineno, column };\r\n            this.source = options.source;\r\n        }\r\n    }\r\n    Position.prototype.content = css;\r\n    const errorsList = [];\r\n    function error(msg) {\r\n        const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n        err.reason = msg;\r\n        err.filename = options.source;\r\n        err.line = lineno;\r\n        err.column = column;\r\n        err.source = css;\r\n        if (options.silent) {\r\n            errorsList.push(err);\r\n        }\r\n        else {\r\n            throw err;\r\n        }\r\n    }\r\n    function stylesheet() {\r\n        const rulesList = rules();\r\n        return {\r\n            type: 'stylesheet',\r\n            stylesheet: {\r\n                source: options.source,\r\n                rules: rulesList,\r\n                parsingErrors: errorsList,\r\n            },\r\n        };\r\n    }\r\n    function open() {\r\n        return match(/^{\\s*/);\r\n    }\r\n    function close() {\r\n        return match(/^}/);\r\n    }\r\n    function rules() {\r\n        let node;\r\n        const rules = [];\r\n        whitespace();\r\n        comments(rules);\r\n        while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n            if (node) {\r\n                rules.push(node);\r\n                comments(rules);\r\n            }\r\n        }\r\n        return rules;\r\n    }\r\n    function match(re) {\r\n        const m = re.exec(css);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const str = m[0];\r\n        updatePosition(str);\r\n        css = css.slice(str.length);\r\n        return m;\r\n    }\r\n    function whitespace() {\r\n        match(/^\\s*/);\r\n    }\r\n    function comments(rules = []) {\r\n        let c;\r\n        while ((c = comment())) {\r\n            if (c) {\r\n                rules.push(c);\r\n            }\r\n            c = comment();\r\n        }\r\n        return rules;\r\n    }\r\n    function comment() {\r\n        const pos = position();\r\n        if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n            return;\r\n        }\r\n        let i = 2;\r\n        while ('' !== css.charAt(i) &&\r\n            ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n            ++i;\r\n        }\r\n        i += 2;\r\n        if ('' === css.charAt(i - 1)) {\r\n            return error('End of comment missing');\r\n        }\r\n        const str = css.slice(2, i - 2);\r\n        column += 2;\r\n        updatePosition(str);\r\n        css = css.slice(i);\r\n        column += 2;\r\n        return pos({\r\n            type: 'comment',\r\n            comment: str,\r\n        });\r\n    }\r\n    function selector() {\r\n        const m = match(/^([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return trim(m[0])\r\n            .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n            .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n            return m.replace(/,/g, '\\u200C');\r\n        })\r\n            .split(/\\s*(?![^(]*\\)),\\s*/)\r\n            .map((s) => {\r\n            return s.replace(/\\u200C/g, ',');\r\n        });\r\n    }\r\n    function declaration() {\r\n        const pos = position();\r\n        const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n        if (!propMatch) {\r\n            return;\r\n        }\r\n        const prop = trim(propMatch[0]);\r\n        if (!match(/^:\\s*/)) {\r\n            return error(`property missing ':'`);\r\n        }\r\n        const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n        const ret = pos({\r\n            type: 'declaration',\r\n            property: prop.replace(commentre, ''),\r\n            value: val ? trim(val[0]).replace(commentre, '') : '',\r\n        });\r\n        match(/^[;\\s]*/);\r\n        return ret;\r\n    }\r\n    function declarations() {\r\n        const decls = [];\r\n        if (!open()) {\r\n            return error(`missing '{'`);\r\n        }\r\n        comments(decls);\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            if (decl !== false) {\r\n                decls.push(decl);\r\n                comments(decls);\r\n            }\r\n            decl = declaration();\r\n        }\r\n        if (!close()) {\r\n            return error(`missing '}'`);\r\n        }\r\n        return decls;\r\n    }\r\n    function keyframe() {\r\n        let m;\r\n        const vals = [];\r\n        const pos = position();\r\n        while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n            vals.push(m[1]);\r\n            match(/^,\\s*/);\r\n        }\r\n        if (!vals.length) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'keyframe',\r\n            values: vals,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    function atkeyframes() {\r\n        const pos = position();\r\n        let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = m[1];\r\n        m = match(/^([-\\w]+)\\s*/);\r\n        if (!m) {\r\n            return error('@keyframes missing name');\r\n        }\r\n        const name = m[1];\r\n        if (!open()) {\r\n            return error(`@keyframes missing '{'`);\r\n        }\r\n        let frame;\r\n        let frames = comments();\r\n        while ((frame = keyframe())) {\r\n            frames.push(frame);\r\n            frames = frames.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@keyframes missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'keyframes',\r\n            name,\r\n            vendor,\r\n            keyframes: frames,\r\n        });\r\n    }\r\n    function atsupports() {\r\n        const pos = position();\r\n        const m = match(/^@supports *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const supports = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@supports missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@supports missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'supports',\r\n            supports,\r\n            rules: style,\r\n        });\r\n    }\r\n    function athost() {\r\n        const pos = position();\r\n        const m = match(/^@host\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@host missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@host missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'host',\r\n            rules: style,\r\n        });\r\n    }\r\n    function atmedia() {\r\n        const pos = position();\r\n        const m = match(/^@media *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const media = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@media missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@media missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'media',\r\n            media,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atcustommedia() {\r\n        const pos = position();\r\n        const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'custom-media',\r\n            name: trim(m[1]),\r\n            media: trim(m[2]),\r\n        });\r\n    }\r\n    function atpage() {\r\n        const pos = position();\r\n        const m = match(/^@page */);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const sel = selector() || [];\r\n        if (!open()) {\r\n            return error(`@page missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@page missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'page',\r\n            selectors: sel,\r\n            declarations: decls,\r\n        });\r\n    }\r\n    function atdocument() {\r\n        const pos = position();\r\n        const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = trim(m[1]);\r\n        const doc = trim(m[2]);\r\n        if (!open()) {\r\n            return error(`@document missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@document missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'document',\r\n            document: doc,\r\n            vendor,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atfontface() {\r\n        const pos = position();\r\n        const m = match(/^@font-face\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@font-face missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@font-face missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'font-face',\r\n            declarations: decls,\r\n        });\r\n    }\r\n    const atimport = _compileAtrule('import');\r\n    const atcharset = _compileAtrule('charset');\r\n    const atnamespace = _compileAtrule('namespace');\r\n    function _compileAtrule(name) {\r\n        const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n        return () => {\r\n            const pos = position();\r\n            const m = match(re);\r\n            if (!m) {\r\n                return;\r\n            }\r\n            const ret = { type: name };\r\n            ret[name] = m[1].trim();\r\n            return pos(ret);\r\n        };\r\n    }\r\n    function atrule() {\r\n        if (css[0] !== '@') {\r\n            return;\r\n        }\r\n        return (atkeyframes() ||\r\n            atmedia() ||\r\n            atcustommedia() ||\r\n            atsupports() ||\r\n            atimport() ||\r\n            atcharset() ||\r\n            atnamespace() ||\r\n            atdocument() ||\r\n            atpage() ||\r\n            athost() ||\r\n            atfontface());\r\n    }\r\n    function rule() {\r\n        const pos = position();\r\n        const sel = selector();\r\n        if (!sel) {\r\n            return error('selector missing');\r\n        }\r\n        comments();\r\n        return pos({\r\n            type: 'rule',\r\n            selectors: sel,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n    return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n    const isNode = obj && typeof obj.type === 'string';\r\n    const childParent = isNode ? obj : parent;\r\n    for (const k of Object.keys(obj)) {\r\n        const value = obj[k];\r\n        if (Array.isArray(value)) {\r\n            value.forEach((v) => {\r\n                addParent(v, childParent);\r\n            });\r\n        }\r\n        else if (value && typeof value === 'object') {\r\n            addParent(value, childParent);\r\n        }\r\n    }\r\n    if (isNode) {\r\n        Object.defineProperty(obj, 'parent', {\r\n            configurable: true,\r\n            writable: true,\r\n            enumerable: false,\r\n            value: parent || null,\r\n        });\r\n    }\r\n    return obj;\r\n}\n\nconst tagMap = {\r\n    script: 'noscript',\r\n    altglyph: 'altGlyph',\r\n    altglyphdef: 'altGlyphDef',\r\n    altglyphitem: 'altGlyphItem',\r\n    animatecolor: 'animateColor',\r\n    animatemotion: 'animateMotion',\r\n    animatetransform: 'animateTransform',\r\n    clippath: 'clipPath',\r\n    feblend: 'feBlend',\r\n    fecolormatrix: 'feColorMatrix',\r\n    fecomponenttransfer: 'feComponentTransfer',\r\n    fecomposite: 'feComposite',\r\n    feconvolvematrix: 'feConvolveMatrix',\r\n    fediffuselighting: 'feDiffuseLighting',\r\n    fedisplacementmap: 'feDisplacementMap',\r\n    fedistantlight: 'feDistantLight',\r\n    fedropshadow: 'feDropShadow',\r\n    feflood: 'feFlood',\r\n    fefunca: 'feFuncA',\r\n    fefuncb: 'feFuncB',\r\n    fefuncg: 'feFuncG',\r\n    fefuncr: 'feFuncR',\r\n    fegaussianblur: 'feGaussianBlur',\r\n    feimage: 'feImage',\r\n    femerge: 'feMerge',\r\n    femergenode: 'feMergeNode',\r\n    femorphology: 'feMorphology',\r\n    feoffset: 'feOffset',\r\n    fepointlight: 'fePointLight',\r\n    fespecularlighting: 'feSpecularLighting',\r\n    fespotlight: 'feSpotLight',\r\n    fetile: 'feTile',\r\n    feturbulence: 'feTurbulence',\r\n    foreignobject: 'foreignObject',\r\n    glyphref: 'glyphRef',\r\n    lineargradient: 'linearGradient',\r\n    radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n    let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n    if (tagName === 'link' && n.attributes._cssText) {\r\n        tagName = 'style';\r\n    }\r\n    return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n    const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\r\n    if (cachedStyle)\r\n        return cachedStyle;\r\n    if (cssText.length >= 1000000) {\r\n        return cssText;\r\n    }\r\n    const ast = parse(cssText, {\r\n        silent: true,\r\n    });\r\n    if (!ast.stylesheet) {\r\n        return cssText;\r\n    }\r\n    const selectors = [];\r\n    ast.stylesheet.rules.forEach((rule) => {\r\n        if ('selectors' in rule) {\r\n            (rule.selectors || []).forEach((selector) => {\r\n                if (HOVER_SELECTOR.test(selector)) {\r\n                    selectors.push(selector);\r\n                }\r\n            });\r\n        }\r\n    });\r\n    if (selectors.length === 0) {\r\n        return cssText;\r\n    }\r\n    const selectorMatcher = new RegExp(selectors\r\n        .filter((selector, index) => selectors.indexOf(selector) === index)\r\n        .sort((a, b) => b.length - a.length)\r\n        .map((selector) => {\r\n        return escapeRegExp(selector);\r\n    })\r\n        .join('|'), 'g');\r\n    const result = cssText.replace(selectorMatcher, (selector) => {\r\n        const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n        return `${selector}, ${newSelector}`;\r\n    });\r\n    cache?.stylesWithHoverClass.set(cssText, result);\r\n    return result;\r\n}\r\nfunction createCache() {\r\n    const stylesWithHoverClass = new Map();\r\n    return {\r\n        stylesWithHoverClass,\r\n    };\r\n}\r\nfunction buildNode(n, options) {\r\n    const { doc, hackCss, cache } = options;\r\n    switch (n.type) {\r\n        case NodeType.Document:\r\n            return doc.implementation.createDocument(null, '', null);\r\n        case NodeType.DocumentType:\r\n            return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n        case NodeType.Element: {\r\n            const tagName = getTagName(n);\r\n            let node;\r\n            if (n.isSVG) {\r\n                node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n            }\r\n            else {\r\n                if (n.isCustom &&\r\n                    doc.defaultView?.customElements &&\r\n                    !doc.defaultView.customElements.get(n.tagName))\r\n                    doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n                    });\r\n                node = doc.createElement(tagName);\r\n            }\r\n            const specialAttributes = {};\r\n            for (const name in n.attributes) {\r\n                if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n                    continue;\r\n                }\r\n                let value = n.attributes[name];\r\n                if (tagName === 'option' &&\r\n                    name === 'selected' &&\r\n                    value === false) {\r\n                    continue;\r\n                }\r\n                if (value === null) {\r\n                    continue;\r\n                }\r\n                if (value === true)\r\n                    value = '';\r\n                if (name.startsWith('rr_')) {\r\n                    specialAttributes[name] = value;\r\n                    continue;\r\n                }\r\n                const isTextarea = tagName === 'textarea' && name === 'value';\r\n                const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n                if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n                    value = addHoverClass(value, cache);\r\n                }\r\n                if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n                    const child = doc.createTextNode(value);\r\n                    for (const c of Array.from(node.childNodes)) {\r\n                        if (c.nodeType === node.TEXT_NODE) {\r\n                            node.removeChild(c);\r\n                        }\r\n                    }\r\n                    node.appendChild(child);\r\n                    continue;\r\n                }\r\n                try {\r\n                    if (n.isSVG && name === 'xlink:href') {\r\n                        node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n                    }\r\n                    else if (name === 'onload' ||\r\n                        name === 'onclick' ||\r\n                        name.substring(0, 7) === 'onmouse') {\r\n                        node.setAttribute('_' + name, value.toString());\r\n                    }\r\n                    else if (tagName === 'meta' &&\r\n                        n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n                        name === 'content') {\r\n                        node.setAttribute('csp-content', value.toString());\r\n                        continue;\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        (n.attributes.rel === 'preload' ||\r\n                            n.attributes.rel === 'modulepreload') &&\r\n                        n.attributes.as === 'script') {\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        n.attributes.rel === 'prefetch' &&\r\n                        typeof n.attributes.href === 'string' &&\r\n                        n.attributes.href.endsWith('.js')) {\r\n                    }\r\n                    else if (tagName === 'img' &&\r\n                        n.attributes.srcset &&\r\n                        n.attributes.rr_dataURL) {\r\n                        node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n                    }\r\n                    else {\r\n                        node.setAttribute(name, value.toString());\r\n                    }\r\n                }\r\n                catch (error) {\r\n                }\r\n            }\r\n            for (const name in specialAttributes) {\r\n                const value = specialAttributes[name];\r\n                if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n                    const image = document.createElement('img');\r\n                    image.onload = () => {\r\n                        const ctx = node.getContext('2d');\r\n                        if (ctx) {\r\n                            ctx.drawImage(image, 0, 0, image.width, image.height);\r\n                        }\r\n                    };\r\n                    image.src = value.toString();\r\n                    if (node.RRNodeType)\r\n                        node.rr_dataURL = value.toString();\r\n                }\r\n                else if (tagName === 'img' && name === 'rr_dataURL') {\r\n                    const image = node;\r\n                    if (!image.currentSrc.startsWith('data:')) {\r\n                        image.setAttribute('rrweb-original-src', n.attributes.src);\r\n                        image.src = value.toString();\r\n                    }\r\n                }\r\n                if (name === 'rr_width') {\r\n                    node.style.setProperty('width', value.toString());\r\n                }\r\n                else if (name === 'rr_height') {\r\n                    node.style.setProperty('height', value.toString());\r\n                }\r\n                else if (name === 'rr_mediaCurrentTime' &&\r\n                    typeof value === 'number') {\r\n                    node.currentTime = value;\r\n                }\r\n                else if (name === 'rr_mediaState') {\r\n                    switch (value) {\r\n                        case 'played':\r\n                            node\r\n                                .play()\r\n                                .catch((e) => console.warn('media playback error', e));\r\n                            break;\r\n                        case 'paused':\r\n                            node.pause();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            if (n.isShadowHost) {\r\n                if (!node.shadowRoot) {\r\n                    node.attachShadow({ mode: 'open' });\r\n                }\r\n                else {\r\n                    while (node.shadowRoot.firstChild) {\r\n                        node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n                    }\r\n                }\r\n            }\r\n            return node;\r\n        }\r\n        case NodeType.Text:\r\n            return doc.createTextNode(n.isStyle && hackCss\r\n                ? addHoverClass(n.textContent, cache)\r\n                : n.textContent);\r\n        case NodeType.CDATA:\r\n            return doc.createCDATASection(n.textContent);\r\n        case NodeType.Comment:\r\n            return doc.createComment(n.textContent);\r\n        default:\r\n            return null;\r\n    }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n    const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n    if (mirror.has(n.id)) {\r\n        const nodeInMirror = mirror.getNode(n.id);\r\n        const meta = mirror.getMeta(nodeInMirror);\r\n        if (isNodeMetaEqual(meta, n))\r\n            return mirror.getNode(n.id);\r\n    }\r\n    let node = buildNode(n, { doc, hackCss, cache });\r\n    if (!node) {\r\n        return null;\r\n    }\r\n    if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n        mirror.replace(n.rootId, doc);\r\n    }\r\n    if (n.type === NodeType.Document) {\r\n        doc.close();\r\n        doc.open();\r\n        if (n.compatMode === 'BackCompat' &&\r\n            n.childNodes &&\r\n            n.childNodes[0].type !== NodeType.DocumentType) {\r\n            if (n.childNodes[0].type === NodeType.Element &&\r\n                'xmlns' in n.childNodes[0].attributes &&\r\n                n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n            }\r\n            else {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n            }\r\n        }\r\n        node = doc;\r\n    }\r\n    mirror.add(node, n);\r\n    if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n        !skipChild) {\r\n        for (const childN of n.childNodes) {\r\n            const childNode = buildNodeWithSN(childN, {\r\n                doc,\r\n                mirror,\r\n                skipChild: false,\r\n                hackCss,\r\n                afterAppend,\r\n                cache,\r\n            });\r\n            if (!childNode) {\r\n                console.warn('Failed to rebuild', childN);\r\n                continue;\r\n            }\r\n            if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n                node.shadowRoot.appendChild(childNode);\r\n            }\r\n            else if (n.type === NodeType.Document &&\r\n                childN.type == NodeType.Element) {\r\n                const htmlElement = childNode;\r\n                let body = null;\r\n                htmlElement.childNodes.forEach((child) => {\r\n                    if (child.nodeName === 'BODY')\r\n                        body = child;\r\n                });\r\n                if (body) {\r\n                    htmlElement.removeChild(body);\r\n                    node.appendChild(childNode);\r\n                    htmlElement.appendChild(body);\r\n                }\r\n                else {\r\n                    node.appendChild(childNode);\r\n                }\r\n            }\r\n            else {\r\n                node.appendChild(childNode);\r\n            }\r\n            if (afterAppend) {\r\n                afterAppend(childNode, childN.id);\r\n            }\r\n        }\r\n    }\r\n    return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n    function walk(node) {\r\n        onVisit(node);\r\n    }\r\n    for (const id of mirror.getIds()) {\r\n        if (mirror.has(id)) {\r\n            walk(mirror.getNode(id));\r\n        }\r\n    }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n    const n = mirror.getMeta(node);\r\n    if (n?.type !== NodeType.Element) {\r\n        return;\r\n    }\r\n    const el = node;\r\n    for (const name in n.attributes) {\r\n        if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n            name.startsWith('rr_'))) {\r\n            continue;\r\n        }\r\n        const value = n.attributes[name];\r\n        if (name === 'rr_scrollLeft') {\r\n            el.scrollLeft = value;\r\n        }\r\n        if (name === 'rr_scrollTop') {\r\n            el.scrollTop = value;\r\n        }\r\n    }\r\n}\r\nfunction rebuild(n, options) {\r\n    const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n    const node = buildNodeWithSN(n, {\r\n        doc,\r\n        mirror,\r\n        skipChild: false,\r\n        hackCss,\r\n        afterAppend,\r\n        cache,\r\n    });\r\n    visit(mirror, (visitedNode) => {\r\n        if (onVisit) {\r\n            onVisit(visitedNode);\r\n        }\r\n        handleScroll(visitedNode, mirror);\r\n    });\r\n    return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, cleanupSnapshot, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute, visitSnapshot };\n","// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n  'id',\n  'class',\n  'aria-label',\n  'role',\n  'name',\n  'alt',\n  'title',\n  'data-test-id',\n  'data-testid',\n  'disabled',\n  'aria-disabled',\n  'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nexport function getAttributesToRecord(attributes: Record<string, unknown>): Record<string, unknown> {\n  const obj: Record<string, unknown> = {};\n  for (const key in attributes) {\n    if (ATTRIBUTES_TO_RECORD.has(key)) {\n      let normalizedKey = key;\n\n      if (key === 'data-testid' || key === 'data-test-id') {\n        normalizedKey = 'testId';\n      }\n\n      obj[normalizedKey] = attributes[key];\n    }\n  }\n\n  return obj;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport type { serializedElementNodeWithId, serializedNodeWithId } from '@sentry-internal/rrweb-snapshot';\nimport { NodeType } from '@sentry-internal/rrweb-snapshot';\nimport type { Breadcrumb, HandlerDataDom } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { handleClick } from './handleClick';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClickTargetNode, getTargetNode } from './util/domUtils';\nimport { getAttributesToRecord } from './util/getAttributesToRecord';\n\nexport const handleDomListener: (replay: ReplayContainer) => (handlerData: HandlerDataDom) => void = (\n  replay: ReplayContainer,\n) => {\n  return (handlerData: HandlerDataDom): void => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleDom(handlerData);\n\n    if (!result) {\n      return;\n    }\n\n    const isClick = handlerData.name === 'click';\n    const event = isClick ? (handlerData.event as PointerEvent) : undefined;\n    // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n    if (\n      isClick &&\n      replay.clickDetector &&\n      event &&\n      event.target &&\n      !event.altKey &&\n      !event.metaKey &&\n      !event.ctrlKey &&\n      !event.shiftKey\n    ) {\n      handleClick(\n        replay.clickDetector,\n        result as Breadcrumb & { timestamp: number; data: { nodeId: number } },\n        getClickTargetNode(handlerData.event as Event) as HTMLElement,\n      );\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n};\n\n/** Get the base DOM breadcrumb. */\nexport function getBaseDomBreadcrumb(target: Node | null, message: string): Breadcrumb {\n  const nodeId = record.mirror.getId(target);\n  const node = nodeId && record.mirror.getNode(nodeId);\n  const meta = node && record.mirror.getMeta(node);\n  const element = meta && isElement(meta) ? meta : null;\n\n  return {\n    message,\n    data: element\n      ? {\n          nodeId,\n          node: {\n            id: nodeId,\n            tagName: element.tagName,\n            textContent: Array.from(element.childNodes)\n              .map((node: serializedNodeWithId) => node.type === NodeType.Text && node.textContent)\n              .filter(Boolean) // filter out empty values\n              .map(text => (text as string).trim())\n              .join(''),\n            attributes: getAttributesToRecord(element.attributes),\n          },\n        }\n      : {},\n  };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nexport function handleDom(handlerData: HandlerDataDom): Breadcrumb | null {\n  const { target, message } = getDomTarget(handlerData);\n\n  return createBreadcrumb({\n    category: `ui.${handlerData.name}`,\n    ...getBaseDomBreadcrumb(target, message),\n  });\n}\n\nfunction getDomTarget(handlerData: HandlerDataDom): { target: Node | null; message: string } {\n  const isClick = handlerData.name === 'click';\n\n  let message: string | undefined;\n  let target: Node | null = null;\n\n  // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n  try {\n    target = isClick ? getClickTargetNode(handlerData.event as Event) : getTargetNode(handlerData.event as Event);\n    message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  } catch (e) {\n    message = '<unknown>';\n  }\n\n  return { target, message };\n}\n\nfunction isElement(node: serializedNodeWithId): node is serializedElementNodeWithId {\n  return node.type === NodeType.Element;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport { browserPerformanceTimeOrigin } from '@sentry/utils';\n\nimport { WINDOW } from '../constants';\nimport type {\n  AllPerformanceEntry,\n  AllPerformanceEntryData,\n  ExperimentalPerformanceResourceTiming,\n  LargestContentfulPaintData,\n  NavigationData,\n  PaintData,\n  ReplayPerformanceEntry,\n  ResourceData,\n} from '../types';\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES: Record<\n  string,\n  (entry: AllPerformanceEntry) => null | ReplayPerformanceEntry<AllPerformanceEntryData>\n> = {\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  resource: createResourceEntry,\n  paint: createPaintEntry,\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  navigation: createNavigationEntry,\n};\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nexport function createPerformanceEntries(\n  entries: AllPerformanceEntry[],\n): ReplayPerformanceEntry<AllPerformanceEntryData>[] {\n  return entries.map(createPerformanceEntry).filter(Boolean) as ReplayPerformanceEntry<AllPerformanceEntryData>[];\n}\n\nfunction createPerformanceEntry(entry: AllPerformanceEntry): ReplayPerformanceEntry<AllPerformanceEntryData> | null {\n  if (!ENTRY_TYPES[entry.entryType]) {\n    return null;\n  }\n\n  return ENTRY_TYPES[entry.entryType](entry);\n}\n\nfunction getAbsoluteTime(time: number): number {\n  // browserPerformanceTimeOrigin can be undefined if `performance` or\n  // `performance.now` doesn't exist, but this is already checked by this integration\n  return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry: PerformancePaintTiming): ReplayPerformanceEntry<PaintData> {\n  const { duration, entryType, name, startTime } = entry;\n\n  const start = getAbsoluteTime(startTime);\n  return {\n    type: entryType,\n    name,\n    start,\n    end: start + duration,\n    data: undefined,\n  };\n}\n\nfunction createNavigationEntry(entry: PerformanceNavigationTiming): ReplayPerformanceEntry<NavigationData> | null {\n  const {\n    entryType,\n    name,\n    decodedBodySize,\n    duration,\n    domComplete,\n    encodedBodySize,\n    domContentLoadedEventStart,\n    domContentLoadedEventEnd,\n    domInteractive,\n    loadEventStart,\n    loadEventEnd,\n    redirectCount,\n    startTime,\n    transferSize,\n    type,\n  } = entry;\n\n  // Ignore entries with no duration, they do not seem to be useful and cause dupes\n  if (duration === 0) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${type}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(domComplete),\n    name,\n    data: {\n      size: transferSize,\n      decodedBodySize,\n      encodedBodySize,\n      duration,\n      domInteractive,\n      domContentLoadedEventStart,\n      domContentLoadedEventEnd,\n      loadEventStart,\n      loadEventEnd,\n      domComplete,\n      redirectCount,\n    },\n  };\n}\n\nfunction createResourceEntry(\n  entry: ExperimentalPerformanceResourceTiming,\n): ReplayPerformanceEntry<ResourceData> | null {\n  const {\n    entryType,\n    initiatorType,\n    name,\n    responseEnd,\n    startTime,\n    decodedBodySize,\n    encodedBodySize,\n    responseStatus,\n    transferSize,\n  } = entry;\n\n  // Core SDK handles these\n  if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${initiatorType}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(responseEnd),\n    name,\n    data: {\n      size: transferSize,\n      statusCode: responseStatus,\n      decodedBodySize,\n      encodedBodySize,\n    },\n  };\n}\n\n/**\n * Add a LCP event to the replay based on an LCP metric.\n */\nexport function getLargestContentfulPaint(metric: {\n  value: number;\n  entries: PerformanceEntry[];\n}): ReplayPerformanceEntry<LargestContentfulPaintData> {\n  const entries = metric.entries;\n  const lastEntry = entries[entries.length - 1] as (PerformanceEntry & { element?: Element }) | undefined;\n  const element = lastEntry ? lastEntry.element : undefined;\n\n  const value = metric.value;\n\n  const end = getAbsoluteTime(value);\n\n  const data: ReplayPerformanceEntry<LargestContentfulPaintData> = {\n    type: 'largest-contentful-paint',\n    name: 'largest-contentful-paint',\n    start: end,\n    end,\n    data: {\n      value,\n      size: value,\n      nodeId: element ? record.mirror.getId(element) : undefined,\n    },\n  };\n\n  return data;\n}\n","import { addBreadcrumb } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\n/**\n * Log a message in debug mode, and add a breadcrumb when _experiment.traceInternals is enabled.\n */\nexport function logInfo(message: string, shouldAddBreadcrumb?: boolean): void {\n  if (!DEBUG_BUILD) {\n    return;\n  }\n\n  logger.info(message);\n\n  if (shouldAddBreadcrumb) {\n    addLogBreadcrumb(message);\n  }\n}\n\n/**\n * Log a message, and add a breadcrumb in the next tick.\n * This is necessary when the breadcrumb may be added before the replay is initialized.\n */\nexport function logInfoNextTick(message: string, shouldAddBreadcrumb?: boolean): void {\n  if (!DEBUG_BUILD) {\n    return;\n  }\n\n  logger.info(message);\n\n  if (shouldAddBreadcrumb) {\n    // Wait a tick here to avoid race conditions for some initial logs\n    // which may be added before replay is initialized\n    setTimeout(() => {\n      addLogBreadcrumb(message);\n    }, 0);\n  }\n}\n\nfunction addLogBreadcrumb(message: string): void {\n  addBreadcrumb(\n    {\n      category: 'console',\n      data: {\n        logger: 'replay',\n      },\n      level: 'info',\n      message,\n    },\n    { level: 'info' },\n  );\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nexport class EventBufferSizeExceededError extends Error {\n  public constructor() {\n    super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n  }\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { EventBufferSizeExceededError } from './error';\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nexport class EventBufferArray implements EventBuffer {\n  /** All the events that are buffered to be sent. */\n  public events: RecordingEvent[];\n\n  /** @inheritdoc */\n  public hasCheckout: boolean;\n\n  private _totalSize: number;\n\n  public constructor() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public get hasEvents(): boolean {\n    return this.events.length > 0;\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return 'sync';\n  }\n\n  /** @inheritdoc */\n  public destroy(): void {\n    this.events = [];\n  }\n\n  /** @inheritdoc */\n  public async addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    const eventSize = JSON.stringify(event).length;\n    this._totalSize += eventSize;\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      throw new EventBufferSizeExceededError();\n    }\n\n    this.events.push(event);\n  }\n\n  /** @inheritdoc */\n  public finish(): Promise<string> {\n    return new Promise<string>(resolve => {\n      // Make a copy of the events array reference and immediately clear the\n      // events member so that we do not lose new events while uploading\n      // attachment.\n      const eventsRet = this.events;\n      this.clear();\n      resolve(JSON.stringify(eventsRet));\n    });\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n    if (!timestamp) {\n      return null;\n    }\n\n    return timestampToMs(timestamp);\n  }\n}\n","import { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { WorkerRequest, WorkerResponse } from '../types';\nimport { logInfo } from '../util/log';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class WorkerHandler {\n  private _worker: Worker;\n  private _id: number;\n  private _ensureReadyPromise?: Promise<void>;\n\n  public constructor(worker: Worker) {\n    this._worker = worker;\n    this._id = 0;\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n  public ensureReady(): Promise<void> {\n    // Ensure we only check once\n    if (this._ensureReadyPromise) {\n      return this._ensureReadyPromise;\n    }\n\n    this._ensureReadyPromise = new Promise((resolve, reject) => {\n      this._worker.addEventListener(\n        'message',\n        ({ data }: MessageEvent) => {\n          if ((data as WorkerResponse).success) {\n            resolve();\n          } else {\n            reject();\n          }\n        },\n        { once: true },\n      );\n\n      this._worker.addEventListener(\n        'error',\n        error => {\n          reject(error);\n        },\n        { once: true },\n      );\n    });\n\n    return this._ensureReadyPromise;\n  }\n\n  /**\n   * Destroy the worker.\n   */\n  public destroy(): void {\n    logInfo('[Replay] Destroying compression worker');\n    this._worker.terminate();\n  }\n\n  /**\n   * Post message to worker and wait for response before resolving promise.\n   */\n  public postMessage<T>(method: WorkerRequest['method'], arg?: WorkerRequest['arg']): Promise<T> {\n    const id = this._getAndIncrementId();\n\n    return new Promise((resolve, reject) => {\n      const listener = ({ data }: MessageEvent): void => {\n        const response = data as WorkerResponse;\n        if (response.method !== method) {\n          return;\n        }\n\n        // There can be multiple listeners for a single method, the id ensures\n        // that the response matches the caller.\n        if (response.id !== id) {\n          return;\n        }\n\n        // At this point, we'll always want to remove listener regardless of result status\n        this._worker.removeEventListener('message', listener);\n\n        if (!response.success) {\n          // TODO: Do some error handling, not sure what\n          DEBUG_BUILD && logger.error('[Replay]', response.response);\n\n          reject(new Error('Error in compression worker'));\n          return;\n        }\n\n        resolve(response.response as T);\n      };\n\n      // Note: we can't use `once` option because it's possible it needs to\n      // listen to multiple messages\n      this._worker.addEventListener('message', listener);\n      this._worker.postMessage({ id, method, arg });\n    });\n  }\n\n  /** Get the current ID and increment it for the next call. */\n  private _getAndIncrementId(): number {\n    return this._id++;\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\n\nimport { logger } from '@sentry/utils';\nimport { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { WorkerHandler } from './WorkerHandler';\nimport { EventBufferSizeExceededError } from './error';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class EventBufferCompressionWorker implements EventBuffer {\n  /** @inheritdoc */\n  public hasCheckout: boolean;\n\n  private _worker: WorkerHandler;\n  private _earliestTimestamp: number | null;\n  private _totalSize;\n\n  public constructor(worker: Worker) {\n    this._worker = new WorkerHandler(worker);\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public get hasEvents(): boolean {\n    return !!this._earliestTimestamp;\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return 'worker';\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n  public ensureReady(): Promise<void> {\n    return this._worker.ensureReady();\n  }\n\n  /**\n   * Destroy the event buffer.\n   */\n  public destroy(): void {\n    this._worker.destroy();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfuly received and processed by worker.\n   */\n  public addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    const timestamp = timestampToMs(event.timestamp);\n    if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n      this._earliestTimestamp = timestamp;\n    }\n\n    const data = JSON.stringify(event);\n    this._totalSize += data.length;\n\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      return Promise.reject(new EventBufferSizeExceededError());\n    }\n\n    return this._sendEventToWorker(data);\n  }\n\n  /**\n   * Finish the event buffer and return the compressed data.\n   */\n  public finish(): Promise<ReplayRecordingData> {\n    return this._finishRequest();\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n\n    // We do not wait on this, as we assume the order of messages is consistent for the worker\n    this._worker.postMessage('clear').then(null, e => {\n      DEBUG_BUILD && logger.warn('[Replay] Sending \"clear\" message to worker failed', e);\n    });\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    return this._earliestTimestamp;\n  }\n\n  /**\n   * Send the event to the worker.\n   */\n  private _sendEventToWorker(data: string): Promise<AddEventResult> {\n    return this._worker.postMessage<void>('addEvent', data);\n  }\n\n  /**\n   * Finish the request and return the compressed data from the worker.\n   */\n  private async _finishRequest(): Promise<Uint8Array> {\n    const response = await this._worker.postMessage<Uint8Array>('finish');\n\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n\n    return response;\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferCompressionWorker } from './EventBufferCompressionWorker';\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nexport class EventBufferProxy implements EventBuffer {\n  private _fallback: EventBufferArray;\n  private _compression: EventBufferCompressionWorker;\n  private _used: EventBuffer;\n  private _ensureWorkerIsLoadedPromise: Promise<void>;\n\n  public constructor(worker: Worker) {\n    this._fallback = new EventBufferArray();\n    this._compression = new EventBufferCompressionWorker(worker);\n    this._used = this._fallback;\n\n    this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return this._used.type;\n  }\n\n  /** @inheritDoc */\n  public get hasEvents(): boolean {\n    return this._used.hasEvents;\n  }\n\n  /** @inheritdoc */\n  public get hasCheckout(): boolean {\n    return this._used.hasCheckout;\n  }\n  /** @inheritdoc */\n  public set hasCheckout(value: boolean) {\n    this._used.hasCheckout = value;\n  }\n\n  /** @inheritDoc */\n  public destroy(): void {\n    this._fallback.destroy();\n    this._compression.destroy();\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    return this._used.clear();\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    return this._used.getEarliestTimestamp();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully added.\n   */\n  public addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    return this._used.addEvent(event);\n  }\n\n  /** @inheritDoc */\n  public async finish(): Promise<ReplayRecordingData> {\n    // Ensure the worker is loaded, so the sent event is compressed\n    await this.ensureWorkerIsLoaded();\n\n    return this._used.finish();\n  }\n\n  /** Ensure the worker has loaded. */\n  public ensureWorkerIsLoaded(): Promise<void> {\n    return this._ensureWorkerIsLoadedPromise;\n  }\n\n  /** Actually check if the worker has been loaded. */\n  private async _ensureWorkerIsLoaded(): Promise<void> {\n    try {\n      await this._compression.ensureReady();\n    } catch (error) {\n      // If the worker fails to load, we fall back to the simple buffer.\n      // Nothing more to do from our side here\n      logInfo('[Replay] Failed to load the compression worker, falling back to simple buffer');\n      return;\n    }\n\n    // Now we need to switch over the array buffer to the compression worker\n    await this._switchToCompressionWorker();\n  }\n\n  /** Switch the used buffer to the compression worker. */\n  private async _switchToCompressionWorker(): Promise<void> {\n    const { events, hasCheckout } = this._fallback;\n\n    const addEventPromises: Promise<void>[] = [];\n    for (const event of events) {\n      addEventPromises.push(this._compression.addEvent(event));\n    }\n\n    this._compression.hasCheckout = hasCheckout;\n\n    // We switch over to the new buffer immediately - any further events will be added\n    // after the previously buffered ones\n    this._used = this._compression;\n\n    // Wait for original events to be re-added before resolving\n    try {\n      await Promise.all(addEventPromises);\n    } catch (error) {\n      DEBUG_BUILD && logger.warn('[Replay] Failed to add events when switching buffers.', error);\n    }\n  }\n}\n","import { WINDOW } from '../constants';\n\n/** If sessionStorage is available. */\nexport function hasSessionStorage(): boolean {\n  try {\n    // This can throw, e.g. when being accessed in a sandboxed iframe\n    return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n  } catch {\n    return false;\n  }\n}\n","/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nexport function isSampled(sampleRate?: number): boolean {\n  if (sampleRate === undefined) {\n    return false;\n  }\n\n  // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n  return Math.random() < sampleRate;\n}\n","import { uuid4 } from '@sentry/utils';\n\nimport type { Sampled, Session } from '../types';\n\n/**\n * Get a session with defaults & applied sampling.\n */\nexport function makeSession(session: Partial<Session> & { sampled: Sampled }): Session {\n  const now = Date.now();\n  const id = session.id || uuid4();\n  // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n  const started = session.started || now;\n  const lastActivity = session.lastActivity || now;\n  const segmentId = session.segmentId || 0;\n  const sampled = session.sampled;\n  const previousSessionId = session.previousSessionId;\n\n  return {\n    id,\n    started,\n    lastActivity,\n    segmentId,\n    sampled,\n    previousSessionId,\n  };\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Save a session to session storage.\n */\nexport function saveSession(session: Session): void {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n  } catch {\n    // Ignore potential SecurityError exceptions\n  }\n}\n","import type { Sampled, Session, SessionOptions } from '../types';\nimport { isSampled } from '../util/isSampled';\nimport { makeSession } from './Session';\nimport { saveSession } from './saveSession';\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nexport function getSessionSampleType(sessionSampleRate: number, allowBuffering: boolean): Sampled {\n  return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nexport function createSession(\n  { sessionSampleRate, allowBuffering, stickySession = false }: SessionOptions,\n  { previousSessionId }: { previousSessionId?: string } = {},\n): Session {\n  const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n  const session = makeSession({\n    sampled,\n    previousSessionId,\n  });\n\n  if (stickySession) {\n    saveSession(session);\n  }\n\n  return session;\n}\n","/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nexport function isExpired(\n  initialTime: null | number,\n  expiry: undefined | number,\n  targetTime: number = +new Date(),\n): boolean {\n  // Always expired if < 0\n  if (initialTime === null || expiry === undefined || expiry < 0) {\n    return true;\n  }\n\n  // Never expires if == 0\n  if (expiry === 0) {\n    return false;\n  }\n\n  return initialTime + expiry <= targetTime;\n}\n","import type { Session } from '../types';\nimport { isExpired } from './isExpired';\n\n/**\n * Checks to see if session is expired\n */\nexport function isSessionExpired(\n  session: Session,\n  {\n    maxReplayDuration,\n    sessionIdleExpire,\n    targetTime = Date.now(),\n  }: { maxReplayDuration: number; sessionIdleExpire: number; targetTime?: number },\n): boolean {\n  return (\n    // First, check that maximum session length has not been exceeded\n    isExpired(session.started, maxReplayDuration, targetTime) ||\n    // check that the idle timeout has not been exceeded (i.e. user has\n    // performed an action within the last `sessionIdleExpire` ms)\n    isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n  );\n}\n","import type { Session } from '../types';\nimport { isSessionExpired } from '../util/isSessionExpired';\n\n/** If the session should be refreshed or not. */\nexport function shouldRefreshSession(\n  session: Session,\n  { sessionIdleExpire, maxReplayDuration }: { sessionIdleExpire: number; maxReplayDuration: number },\n): boolean {\n  // If not expired, all good, just keep the session\n  if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n    return false;\n  }\n\n  // If we are buffering & haven't ever flushed yet, always continue\n  if (session.sampled === 'buffer' && session.segmentId === 0) {\n    return false;\n  }\n\n  return true;\n}\n","import type { Session, SessionOptions } from '../types';\nimport { logInfoNextTick } from '../util/log';\nimport { createSession } from './createSession';\nimport { fetchSession } from './fetchSession';\nimport { shouldRefreshSession } from './shouldRefreshSession';\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nexport function loadOrCreateSession(\n  {\n    traceInternals,\n    sessionIdleExpire,\n    maxReplayDuration,\n    previousSessionId,\n  }: {\n    sessionIdleExpire: number;\n    maxReplayDuration: number;\n    traceInternals?: boolean;\n    previousSessionId?: string;\n  },\n  sessionOptions: SessionOptions,\n): Session {\n  const existingSession = sessionOptions.stickySession && fetchSession(traceInternals);\n\n  // No session exists yet, just create a new one\n  if (!existingSession) {\n    logInfoNextTick('[Replay] Creating new session', traceInternals);\n    return createSession(sessionOptions, { previousSessionId });\n  }\n\n  if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n    return existingSession;\n  }\n\n  logInfoNextTick('[Replay] Session in sessionStorage is expired, creating new one...');\n  return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\nimport { logInfoNextTick } from '../util/log';\nimport { makeSession } from './Session';\n\n/**\n * Fetches a session from storage\n */\nexport function fetchSession(traceInternals?: boolean): Session | null {\n  if (!hasSessionStorage()) {\n    return null;\n  }\n\n  try {\n    // This can throw if cookies are disabled\n    const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n    if (!sessionStringFromStorage) {\n      return null;\n    }\n\n    const sessionObj = JSON.parse(sessionStringFromStorage) as Session;\n\n    logInfoNextTick('[Replay] Loading existing session', traceInternals);\n\n    return makeSession(sessionObj);\n  } catch {\n    return null;\n  }\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { getClient } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { EventBufferSizeExceededError } from '../eventBuffer/error';\nimport type { AddEventResult, RecordingEvent, ReplayContainer, ReplayFrameEvent, ReplayPluginOptions } from '../types';\nimport { logInfo } from './log';\nimport { timestampToMs } from './timestamp';\n\nfunction isCustomEvent(event: RecordingEvent): event is ReplayFrameEvent {\n  return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nexport function addEventSync(replay: ReplayContainer, event: RecordingEvent, isCheckout?: boolean): boolean {\n  if (!shouldAddEvent(replay, event)) {\n    return false;\n  }\n\n  // This should never reject\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  _addEvent(replay, event, isCheckout);\n\n  return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nexport function addEvent(\n  replay: ReplayContainer,\n  event: RecordingEvent,\n  isCheckout?: boolean,\n): Promise<AddEventResult | null> {\n  if (!shouldAddEvent(replay, event)) {\n    return Promise.resolve(null);\n  }\n\n  return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n  replay: ReplayContainer,\n  event: RecordingEvent,\n  isCheckout?: boolean,\n): Promise<AddEventResult | null> {\n  if (!replay.eventBuffer) {\n    return null;\n  }\n\n  try {\n    if (isCheckout && replay.recordingMode === 'buffer') {\n      replay.eventBuffer.clear();\n    }\n\n    if (isCheckout) {\n      replay.eventBuffer.hasCheckout = true;\n    }\n\n    const replayOptions = replay.getOptions();\n\n    const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n    if (!eventAfterPossibleCallback) {\n      return;\n    }\n\n    return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n  } catch (error) {\n    const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n\n    DEBUG_BUILD && logger.error(error);\n    await replay.stop({ reason });\n\n    const client = getClient();\n\n    if (client) {\n      client.recordDroppedEvent('internal_sdk_error', 'replay');\n    }\n  }\n}\n\n/** Exported only for tests. */\nexport function shouldAddEvent(replay: ReplayContainer, event: RecordingEvent): boolean {\n  if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n    return false;\n  }\n\n  const timestampInMs = timestampToMs(event.timestamp);\n\n  // Throw out events that happen more than 5 minutes ago. This can happen if\n  // page has been left open and idle for a long period of time and user\n  // comes back to trigger a new session. The performance entries rely on\n  // `performance.timeOrigin`, which is when the page first opened.\n  if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n    return false;\n  }\n\n  // Throw out events that are +60min from the initial timestamp\n  if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n    logInfo(\n      `[Replay] Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`,\n      replay.getOptions()._experiments.traceInternals,\n    );\n    return false;\n  }\n\n  return true;\n}\n\nfunction maybeApplyCallback(\n  event: RecordingEvent,\n  callback: ReplayPluginOptions['beforeAddRecordingEvent'],\n): RecordingEvent | null | undefined {\n  try {\n    if (typeof callback === 'function' && isCustomEvent(event)) {\n      return callback(event);\n    }\n  } catch (error) {\n    DEBUG_BUILD &&\n      logger.error('[Replay] An error occured in the `beforeAddRecordingEvent` callback, skipping the event...', error);\n    return null;\n  }\n\n  return event;\n}\n","import type { ErrorEvent, Event, FeedbackEvent, ReplayEvent, TransactionEvent } from '@sentry/types';\n\n/** If the event is an error event */\nexport function isErrorEvent(event: Event): event is ErrorEvent {\n  return !event.type;\n}\n\n/** If the event is a transaction event */\nexport function isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nexport function isReplayEvent(event: Event): event is ReplayEvent {\n  return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nexport function isFeedbackEvent(event: Event): event is FeedbackEvent {\n  return event.type === 'feedback';\n}\n","import { getClient } from '@sentry/core';\nimport type { ErrorEvent, Event, TransactionEvent, Transport, TransportMakeRequestResponse } from '@sentry/types';\n\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isTransactionEvent } from '../util/eventUtils';\n\ntype AfterSendEventCallback = (event: Event, sendResponse: TransportMakeRequestResponse | void) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleAfterSendEvent(replay: ReplayContainer): AfterSendEventCallback {\n  // Custom transports may still be returning `Promise<void>`, which means we cannot expect the status code to be available there\n  // TODO (v8): remove this check as it will no longer be necessary\n  const enforceStatusCode = isBaseTransportSend();\n\n  return (event: Event, sendResponse: TransportMakeRequestResponse | void) => {\n    if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n      return;\n    }\n\n    const statusCode = sendResponse && sendResponse.statusCode;\n\n    // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n    // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n    // If we do use the base transport, we skip if we encountered an non-OK status code\n    if (enforceStatusCode && (!statusCode || statusCode < 200 || statusCode >= 300)) {\n      return;\n    }\n\n    if (isTransactionEvent(event)) {\n      handleTransactionEvent(replay, event);\n      return;\n    }\n\n    handleErrorEvent(replay, event);\n  };\n}\n\nfunction handleTransactionEvent(replay: ReplayContainer, event: TransactionEvent): void {\n  const replayContext = replay.getContext();\n\n  // Collect traceIds in _context regardless of `recordingMode`\n  // In error mode, _context gets cleared on every checkout\n  // We limit to max. 100 transactions linked\n  if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n    replayContext.traceIds.add(event.contexts.trace.trace_id as string);\n  }\n}\n\nfunction handleErrorEvent(replay: ReplayContainer, event: ErrorEvent): void {\n  const replayContext = replay.getContext();\n\n  // Add error to list of errorIds of replay. This is ok to do even if not\n  // sampled because context will get reset at next checkout.\n  // XXX: There is also a race condition where it's possible to capture an\n  // error to Sentry before Replay SDK has loaded, but response returns after\n  // it was loaded, and this gets called.\n  // We limit to max. 100 errors linked\n  if (event.event_id && replayContext.errorIds.size < 100) {\n    replayContext.errorIds.add(event.event_id);\n  }\n\n  // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n  // Need to be very careful that this does not cause an infinite loop\n  if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n    return;\n  }\n\n  const { beforeErrorSampling } = replay.getOptions();\n  if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n    return;\n  }\n\n  setTimeout(() => {\n    // Capture current event buffer as new replay\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.sendBufferedReplayOrFlush();\n  });\n}\n\nfunction isBaseTransportSend(): boolean {\n  const client = getClient();\n  if (!client) {\n    return false;\n  }\n\n  const transport = client.getTransport();\n  if (!transport) {\n    return false;\n  }\n\n  return (\n    (transport.send as Transport['send'] & { __sentry__baseTransport__?: true }).__sentry__baseTransport__ || false\n  );\n}\n","import { EventType } from '@sentry-internal/rrweb';\n\nimport type { AddEventResult, AllEntryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\n\n/**\n * Create a \"span\" for each performance entry.\n */\nexport function createPerformanceSpans(\n  replay: ReplayContainer,\n  entries: ReplayPerformanceEntry<AllEntryData>[],\n): Promise<AddEventResult | null>[] {\n  return entries.map(({ type, start, end, name, data }) => {\n    const response = replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: start,\n      data: {\n        tag: 'performanceSpan',\n        payload: {\n          op: type,\n          description: name,\n          startTimestamp: start,\n          endTimestamp: end,\n          data,\n        },\n      },\n    });\n\n    // If response is a string, it means its either THROTTLED or SKIPPED\n    return typeof response === 'string' ? Promise.resolve(null) : response;\n  });\n}\n","import type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../../types';\nimport { createPerformanceSpans } from '../../util/createPerformanceSpans';\nimport { shouldFilterRequest } from '../../util/shouldFilterRequest';\n\n/** Add a performance entry breadcrumb */\nexport function addNetworkBreadcrumb(\n  replay: ReplayContainer,\n  result: ReplayPerformanceEntry<NetworkRequestData> | null,\n): void {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  if (result === null) {\n    return;\n  }\n\n  if (shouldFilterRequest(replay, result.name)) {\n    return;\n  }\n\n  replay.addUpdate(() => {\n    createPerformanceSpans(replay, [result]);\n    // Returning true will cause `addUpdate` to not flush\n    // We do not want network requests to cause a flush. This will prevent\n    // recurring/polling requests from keeping the replay session alive.\n    return true;\n  });\n}\n","import { getClient, isSentryRequestUrl } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ReplayContainer } from '../types';\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nexport function shouldFilterRequest(replay: ReplayContainer, url: string): boolean {\n  // If we enabled the `traceInternals` experiment, we want to trace everything\n  if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n    return false;\n  }\n\n  return isSentryRequestUrl(url, getClient());\n}\n","import type { TextEncoderInternal } from '@sentry/types';\nimport { dropUndefinedKeys, logger, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { NETWORK_BODY_MAX_SIZE, WINDOW } from '../../constants';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n  NetworkBody,\n  NetworkMetaWarning,\n  NetworkRequestData,\n  ReplayNetworkRequestData,\n  ReplayNetworkRequestOrResponse,\n  ReplayPerformanceEntry,\n} from '../../types';\n\n/** Get the size of a body. */\nexport function getBodySize(\n  body: RequestInit['body'],\n  textEncoder: TextEncoder | TextEncoderInternal,\n): number | undefined {\n  if (!body) {\n    return undefined;\n  }\n\n  try {\n    if (typeof body === 'string') {\n      return textEncoder.encode(body).length;\n    }\n\n    if (body instanceof URLSearchParams) {\n      return textEncoder.encode(body.toString()).length;\n    }\n\n    if (body instanceof FormData) {\n      const formDataStr = _serializeFormData(body);\n      return textEncoder.encode(formDataStr).length;\n    }\n\n    if (body instanceof Blob) {\n      return body.size;\n    }\n\n    if (body instanceof ArrayBuffer) {\n      return body.byteLength;\n    }\n\n    // Currently unhandled types: ArrayBufferView, ReadableStream\n  } catch {\n    // just return undefined\n  }\n\n  return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined.  */\nexport function parseContentLengthHeader(header: string | null | undefined): number | undefined {\n  if (!header) {\n    return undefined;\n  }\n\n  const size = parseInt(header, 10);\n  return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nexport function getBodyString(body: unknown): [string | undefined, NetworkMetaWarning?] {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof URLSearchParams) {\n      return [body.toString()];\n    }\n\n    if (body instanceof FormData) {\n      return [_serializeFormData(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch {\n    DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/** Merge a warning into an existing network request/response. */\nexport function mergeWarning(\n  info: ReplayNetworkRequestOrResponse | undefined,\n  warning: NetworkMetaWarning,\n): ReplayNetworkRequestOrResponse {\n  if (!info) {\n    return {\n      headers: {},\n      size: undefined,\n      _meta: {\n        warnings: [warning],\n      },\n    };\n  }\n\n  const newMeta = { ...info._meta };\n  const existingWarnings = newMeta.warnings || [];\n  newMeta.warnings = [...existingWarnings, warning];\n\n  info._meta = newMeta;\n  return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nexport function makeNetworkReplayBreadcrumb(\n  type: string,\n  data: ReplayNetworkRequestData | null,\n): ReplayPerformanceEntry<NetworkRequestData> | null {\n  if (!data) {\n    return null;\n  }\n\n  const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n  const result: ReplayPerformanceEntry<NetworkRequestData> = {\n    type,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: dropUndefinedKeys({\n      method,\n      statusCode,\n      request,\n      response,\n    }),\n  };\n\n  return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nexport function buildSkippedNetworkRequestOrResponse(bodySize: number | undefined): ReplayNetworkRequestOrResponse {\n  return {\n    headers: {},\n    size: bodySize,\n    _meta: {\n      warnings: ['URL_SKIPPED'],\n    },\n  };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nexport function buildNetworkRequestOrResponse(\n  headers: Record<string, string>,\n  bodySize: number | undefined,\n  body: string | undefined,\n): ReplayNetworkRequestOrResponse | undefined {\n  if (!bodySize && Object.keys(headers).length === 0) {\n    return undefined;\n  }\n\n  if (!bodySize) {\n    return {\n      headers,\n    };\n  }\n\n  if (!body) {\n    return {\n      headers,\n      size: bodySize,\n    };\n  }\n\n  const info: ReplayNetworkRequestOrResponse = {\n    headers,\n    size: bodySize,\n  };\n\n  const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n  info.body = normalizedBody;\n  if (warnings && warnings.length > 0) {\n    info._meta = {\n      warnings,\n    };\n  }\n\n  return info;\n}\n\n/** Filter a set of headers */\nexport function getAllowedHeaders(headers: Record<string, string>, allowedHeaders: string[]): Record<string, string> {\n  return Object.keys(headers).reduce((filteredHeaders: Record<string, string>, key: string) => {\n    const normalizedKey = key.toLowerCase();\n    // Avoid putting empty strings into the headers\n    if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n      filteredHeaders[normalizedKey] = headers[key];\n    }\n    return filteredHeaders;\n  }, {});\n}\n\nfunction _serializeFormData(formData: FormData): string {\n  // This is a bit simplified, but gives us a decent estimate\n  // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n  // @ts-expect-error passing FormData to URLSearchParams actually works\n  return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body: string | undefined): {\n  body: NetworkBody | undefined;\n  warnings?: NetworkMetaWarning[];\n} {\n  if (!body || typeof body !== 'string') {\n    return {\n      body,\n    };\n  }\n\n  const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n  const isProbablyJson = _strIsProbablyJson(body);\n\n  if (exceedsSizeLimit) {\n    const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n    if (isProbablyJson) {\n      return {\n        body: truncatedBody,\n        warnings: ['MAYBE_JSON_TRUNCATED'],\n      };\n    }\n\n    return {\n      body: `${truncatedBody}…`,\n      warnings: ['TEXT_TRUNCATED'],\n    };\n  }\n\n  if (isProbablyJson) {\n    try {\n      const jsonBody = JSON.parse(body);\n      return {\n        body: jsonBody,\n      };\n    } catch {\n      // fall back to just send the body as string\n    }\n  }\n\n  return {\n    body,\n  };\n}\n\nfunction _strIsProbablyJson(str: string): boolean {\n  const first = str[0];\n  const last = str[str.length - 1];\n\n  // Simple check: If this does not start & end with {} or [], it's not JSON\n  return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nexport function urlMatches(url: string, urls: (string | RegExp)[]): boolean {\n  const fullUrl = getFullUrl(url);\n\n  return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nexport function getFullUrl(url: string, baseURI = WINDOW.document.baseURI): string {\n  // Short circuit for common cases:\n  if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n    return url;\n  }\n  const fixedUrl = new URL(url, baseURI);\n\n  // If these do not match, we are not dealing with a relative URL, so just return it\n  if (fixedUrl.origin !== new URL(baseURI).origin) {\n    return url;\n  }\n\n  const fullUrl = fixedUrl.href;\n\n  // Remove trailing slashes, if they don't match the original URL\n  if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n    return fullUrl.slice(0, -1);\n  }\n\n  return fullUrl;\n}\n","import type { Breadcrumb, FetchBreadcrumbData, TextEncoderInternal } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n  FetchHint,\n  NetworkMetaWarning,\n  ReplayContainer,\n  ReplayNetworkOptions,\n  ReplayNetworkRequestData,\n  ReplayNetworkRequestOrResponse,\n} from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n  buildNetworkRequestOrResponse,\n  buildSkippedNetworkRequestOrResponse,\n  getAllowedHeaders,\n  getBodySize,\n  getBodyString,\n  makeNetworkReplayBreadcrumb,\n  mergeWarning,\n  parseContentLengthHeader,\n  urlMatches,\n} from './networkUtils';\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureFetchBreadcrumbToReplay(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: Partial<FetchHint>,\n  options: ReplayNetworkOptions & {\n    textEncoder: TextEncoderInternal;\n    replay: ReplayContainer;\n  },\n): Promise<void> {\n  try {\n    const data = await _prepareFetchData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && logger.error('[Replay] Failed to capture fetch breadcrumb', error);\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichFetchBreadcrumb(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: Partial<FetchHint>,\n  options: { textEncoder: TextEncoderInternal },\n): void {\n  const { input, response } = hint;\n\n  const body = input ? _getFetchRequestArgBody(input) : undefined;\n  const reqSize = getBodySize(body, options.textEncoder);\n\n  const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nasync function _prepareFetchData(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: Partial<FetchHint>,\n  options: ReplayNetworkOptions & {\n    textEncoder: TextEncoderInternal;\n  },\n): Promise<ReplayNetworkRequestData> {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  const captureDetails =\n    urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n  const request = captureDetails\n    ? _getRequestInfo(options, hint.input, requestBodySize)\n    : buildSkippedNetworkRequestOrResponse(requestBodySize);\n  const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request,\n    response,\n  };\n}\n\nfunction _getRequestInfo(\n  { networkCaptureBodies, networkRequestHeaders }: ReplayNetworkOptions,\n  input: FetchHint['input'] | undefined,\n  requestBodySize?: number,\n): ReplayNetworkRequestOrResponse | undefined {\n  const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n  if (!networkCaptureBodies) {\n    return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n  }\n\n  // We only want to transmit string or string-like bodies\n  const requestBody = _getFetchRequestArgBody(input);\n  const [bodyStr, warning] = getBodyString(requestBody);\n  const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n  if (warning) {\n    return mergeWarning(data, warning);\n  }\n\n  return data;\n}\n\n/** Exported only for tests. */\nexport async function _getResponseInfo(\n  captureDetails: boolean,\n  {\n    networkCaptureBodies,\n    textEncoder,\n    networkResponseHeaders,\n  }: Pick<ReplayNetworkOptions, 'networkCaptureBodies' | 'networkResponseHeaders'> & {\n    textEncoder: TextEncoderInternal;\n  },\n  response: Response | undefined,\n  responseBodySize?: number,\n): Promise<ReplayNetworkRequestOrResponse | undefined> {\n  if (!captureDetails && responseBodySize !== undefined) {\n    return buildSkippedNetworkRequestOrResponse(responseBodySize);\n  }\n\n  const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n  if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n\n  const [bodyText, warning] = await _parseFetchResponseBody(response);\n  const result = getResponseData(bodyText, {\n    networkCaptureBodies,\n    textEncoder,\n    responseBodySize,\n    captureDetails,\n    headers,\n  });\n\n  if (warning) {\n    return mergeWarning(result, warning);\n  }\n\n  return result;\n}\n\nfunction getResponseData(\n  bodyText: string | undefined,\n  {\n    networkCaptureBodies,\n    textEncoder,\n    responseBodySize,\n    captureDetails,\n    headers,\n  }: {\n    captureDetails: boolean;\n    networkCaptureBodies: boolean;\n    responseBodySize: number | undefined;\n    headers: Record<string, string>;\n    textEncoder: TextEncoderInternal;\n  },\n): ReplayNetworkRequestOrResponse | undefined {\n  try {\n    const size =\n      bodyText && bodyText.length && responseBodySize === undefined\n        ? getBodySize(bodyText, textEncoder)\n        : responseBodySize;\n\n    if (!captureDetails) {\n      return buildSkippedNetworkRequestOrResponse(size);\n    }\n\n    if (networkCaptureBodies) {\n      return buildNetworkRequestOrResponse(headers, size, bodyText);\n    }\n\n    return buildNetworkRequestOrResponse(headers, size, undefined);\n  } catch (error) {\n    DEBUG_BUILD && logger.warn('[Replay] Failed to serialize response body', error);\n    // fallback\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n}\n\nasync function _parseFetchResponseBody(response: Response): Promise<[string | undefined, NetworkMetaWarning?]> {\n  const res = _tryCloneResponse(response);\n\n  if (!res) {\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  try {\n    const text = await _tryGetResponseText(res);\n    return [text];\n  } catch (error) {\n    DEBUG_BUILD && logger.warn('[Replay] Failed to get text body from response', error);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs: unknown[] = []): RequestInit['body'] | undefined {\n  // We only support getting the body from the fetch options\n  if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n    return undefined;\n  }\n\n  return (fetchArgs[1] as RequestInit).body;\n}\n\nfunction getAllHeaders(headers: Headers, allowedHeaders: string[]): Record<string, string> {\n  const allHeaders: Record<string, string> = {};\n\n  allowedHeaders.forEach(header => {\n    if (headers.get(header)) {\n      allHeaders[header] = headers.get(header) as string;\n    }\n  });\n\n  return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs: unknown[], allowedHeaders: string[]): Record<string, string> {\n  if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n    return getHeadersFromOptions(fetchArgs[0] as Request | RequestInit, allowedHeaders);\n  }\n\n  if (fetchArgs.length === 2) {\n    return getHeadersFromOptions(fetchArgs[1] as Request | RequestInit, allowedHeaders);\n  }\n\n  return {};\n}\n\nfunction getHeadersFromOptions(\n  input: Request | RequestInit | undefined,\n  allowedHeaders: string[],\n): Record<string, string> {\n  if (!input) {\n    return {};\n  }\n\n  const headers = input.headers;\n\n  if (!headers) {\n    return {};\n  }\n\n  if (headers instanceof Headers) {\n    return getAllHeaders(headers, allowedHeaders);\n  }\n\n  // We do not support this, as it is not really documented (anymore?)\n  if (Array.isArray(headers)) {\n    return {};\n  }\n\n  return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response: Response): Response | void {\n  try {\n    // We have to clone this, as the body can only be read once\n    return response.clone();\n  } catch (error) {\n    // this can throw if the response was already consumed before\n    DEBUG_BUILD && logger.warn('[Replay] Failed to clone response body', error);\n  }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response: Response): Promise<string | undefined> {\n  return new Promise((resolve, reject) => {\n    const timeout = setTimeout(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n    _getResponseText(response)\n      .then(\n        txt => resolve(txt),\n        reason => reject(reason),\n      )\n      .finally(() => clearTimeout(timeout));\n  });\n\n  return _getResponseText(response);\n}\n\nasync function _getResponseText(response: Response): Promise<string> {\n  // Force this to be a promise, just to be safe\n  // eslint-disable-next-line no-return-await\n  return await response.text();\n}\n","import type { Breadcrumb, Scope } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport { CONSOLE_ARG_MAX_SIZE } from '../constants';\nimport type { ReplayContainer } from '../types';\nimport type { ReplayFrame } from '../types/replayFrame';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\nlet _LAST_BREADCRUMB: null | Breadcrumb = null;\n\ntype BreadcrumbWithCategory = Required<Pick<Breadcrumb, 'category'>>;\n\nfunction isBreadcrumbWithCategory(breadcrumb: Breadcrumb): breadcrumb is BreadcrumbWithCategory {\n  return !!breadcrumb.category;\n}\n\nexport const handleScopeListener: (replay: ReplayContainer) => (scope: Scope) => void =\n  (replay: ReplayContainer) =>\n  (scope: Scope): void => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleScope(scope);\n\n    if (!result) {\n      return;\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n\n/**\n * An event handler to handle scope changes.\n */\nexport function handleScope(scope: Scope): Breadcrumb | null {\n  // TODO (v8): Remove this guard. This was put in place because we introduced\n  // Scope.getLastBreadcrumb mid-v7 which caused incompatibilities with older SDKs.\n  // For now, we'll just return null if the method doesn't exist but we should eventually\n  // get rid of this guard.\n  const newBreadcrumb = scope.getLastBreadcrumb && scope.getLastBreadcrumb();\n\n  // Listener can be called when breadcrumbs have not changed, so we store the\n  // reference to the last crumb and only return a crumb if it has changed\n  if (_LAST_BREADCRUMB === newBreadcrumb || !newBreadcrumb) {\n    return null;\n  }\n\n  _LAST_BREADCRUMB = newBreadcrumb;\n\n  if (\n    !isBreadcrumbWithCategory(newBreadcrumb) ||\n    ['fetch', 'xhr', 'sentry.event', 'sentry.transaction'].includes(newBreadcrumb.category) ||\n    newBreadcrumb.category.startsWith('ui.')\n  ) {\n    return null;\n  }\n\n  if (newBreadcrumb.category === 'console') {\n    return normalizeConsoleBreadcrumb(newBreadcrumb);\n  }\n\n  return createBreadcrumb(newBreadcrumb);\n}\n\n/** exported for tests only */\nexport function normalizeConsoleBreadcrumb(\n  breadcrumb: Omit<Breadcrumb, 'category'> & BreadcrumbWithCategory,\n): ReplayFrame {\n  const args = breadcrumb.data && breadcrumb.data.arguments;\n\n  if (!Array.isArray(args) || args.length === 0) {\n    return createBreadcrumb(breadcrumb);\n  }\n\n  let isTruncated = false;\n\n  // Avoid giant args captures\n  const normalizedArgs = args.map(arg => {\n    if (!arg) {\n      return arg;\n    }\n    if (typeof arg === 'string') {\n      if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n        isTruncated = true;\n        return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n      }\n\n      return arg;\n    }\n    if (typeof arg === 'object') {\n      try {\n        const normalizedArg = normalize(arg, 7);\n        const stringified = JSON.stringify(normalizedArg);\n        if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n          isTruncated = true;\n          // We use the pretty printed JSON string here as a base\n          return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n        }\n        return normalizedArg;\n      } catch {\n        // fall back to default\n      }\n    }\n\n    return arg;\n  });\n\n  return createBreadcrumb({\n    ...breadcrumb,\n    data: {\n      ...breadcrumb.data,\n      arguments: normalizedArgs,\n      ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n    },\n  });\n}\n","import type { BaseClient } from '@sentry/core';\nimport { getCurrentScope } from '@sentry/core';\nimport { addEventProcessor, getClient } from '@sentry/core';\nimport type { Client, DynamicSamplingContext } from '@sentry/types';\nimport { addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler } from '@sentry/utils';\n\nimport { handleAfterSendEvent } from '../coreHandlers/handleAfterSendEvent';\nimport { handleBeforeSendEvent } from '../coreHandlers/handleBeforeSendEvent';\nimport { handleDomListener } from '../coreHandlers/handleDom';\nimport { handleGlobalEventListener } from '../coreHandlers/handleGlobalEvent';\nimport { handleHistorySpanListener } from '../coreHandlers/handleHistory';\nimport { handleNetworkBreadcrumbs } from '../coreHandlers/handleNetworkBreadcrumbs';\nimport { handleScopeListener } from '../coreHandlers/handleScope';\nimport type { ReplayContainer } from '../types';\n\n/**\n * Add global listeners that cannot be removed.\n */\nexport function addGlobalListeners(replay: ReplayContainer): void {\n  // Listeners from core SDK //\n  const scope = getCurrentScope();\n  const client = getClient();\n\n  scope.addScopeListener(handleScopeListener(replay));\n  addClickKeypressInstrumentationHandler(handleDomListener(replay));\n  addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n  handleNetworkBreadcrumbs(replay);\n\n  // Tag all (non replay) events that get sent to Sentry with the current\n  // replay ID so that we can reference them later in the UI\n  const eventProcessor = handleGlobalEventListener(replay, !hasHooks(client));\n  if (client && client.addEventProcessor) {\n    client.addEventProcessor(eventProcessor);\n  } else {\n    addEventProcessor(eventProcessor);\n  }\n\n  // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n  if (hasHooks(client)) {\n    client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n    client.on('afterSendEvent', handleAfterSendEvent(replay));\n    client.on('createDsc', (dsc: DynamicSamplingContext) => {\n      const replayId = replay.getSessionId();\n      // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n      if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n        // Ensure to check that the session is still active - it could have expired in the meanwhile\n        const isSessionActive = replay.checkAndHandleExpiredSession();\n        if (isSessionActive) {\n          dsc.replay_id = replayId;\n        }\n      }\n    });\n\n    client.on('startTransaction', transaction => {\n      replay.lastTransaction = transaction;\n    });\n\n    // We may be missing the initial startTransaction due to timing issues,\n    // so we capture it on finish again.\n    client.on('finishTransaction', transaction => {\n      replay.lastTransaction = transaction;\n    });\n\n    // We want to flush replay\n    client.on('beforeSendFeedback', (feedbackEvent, options) => {\n      const replayId = replay.getSessionId();\n      if (options && options.includeReplay && replay.isEnabled() && replayId) {\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        replay.flush();\n        if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) {\n          feedbackEvent.contexts.feedback.replay_id = replayId;\n        }\n      }\n    });\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hasHooks(client: Client | undefined): client is BaseClient<any> {\n  return !!(client && client.on);\n}\n","import type { HandlerDataHistory } from '@sentry/types';\n\nimport type { HistoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from '../util/createPerformanceSpans';\n\nfunction handleHistory(handlerData: HandlerDataHistory): ReplayPerformanceEntry<HistoryData> {\n  const { from, to } = handlerData;\n\n  const now = Date.now() / 1000;\n\n  return {\n    type: 'navigation.push',\n    start: now,\n    end: now,\n    name: to,\n    data: {\n      previous: from,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nexport function handleHistorySpanListener(replay: ReplayContainer): (handlerData: HandlerDataHistory) => void {\n  return (handlerData: HandlerDataHistory) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleHistory(handlerData);\n\n    if (result === null) {\n      return;\n    }\n\n    // Need to collect visited URLs\n    replay.getContext().urls.push(result.name);\n    replay.triggerUserActivity();\n\n    replay.addUpdate(() => {\n      createPerformanceSpans(replay, [result]);\n      // Returning false to flush\n      return false;\n    });\n  };\n}\n","import { getClient } from '@sentry/core';\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  FetchBreadcrumbData,\n  TextEncoderInternal,\n  XhrBreadcrumbData,\n} from '@sentry/types';\nimport { addFetchInstrumentationHandler, addXhrInstrumentationHandler, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { FetchHint, ReplayContainer, ReplayNetworkOptions, XhrHint } from '../types';\nimport { handleFetchSpanListener } from './handleFetch';\nimport { handleXhrSpanListener } from './handleXhr';\nimport { captureFetchBreadcrumbToReplay, enrichFetchBreadcrumb } from './util/fetchUtils';\nimport { captureXhrBreadcrumbToReplay, enrichXhrBreadcrumb } from './util/xhrUtils';\n\ninterface ExtendedNetworkBreadcrumbsOptions extends ReplayNetworkOptions {\n  replay: ReplayContainer;\n  textEncoder: TextEncoderInternal;\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n *   (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nexport function handleNetworkBreadcrumbs(replay: ReplayContainer): void {\n  const client = getClient();\n\n  try {\n    const textEncoder = new TextEncoder();\n\n    const {\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    } = replay.getOptions();\n\n    const options: ExtendedNetworkBreadcrumbsOptions = {\n      replay,\n      textEncoder,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    };\n\n    if (client && client.on) {\n      client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n    } else {\n      // Fallback behavior\n      addFetchInstrumentationHandler(handleFetchSpanListener(replay));\n      addXhrInstrumentationHandler(handleXhrSpanListener(replay));\n    }\n  } catch {\n    // Do nothing\n  }\n}\n\n/** just exported for tests */\nexport function beforeAddNetworkBreadcrumb(\n  options: ExtendedNetworkBreadcrumbsOptions,\n  breadcrumb: Breadcrumb,\n  hint?: BreadcrumbHint,\n): void {\n  if (!breadcrumb.data) {\n    return;\n  }\n\n  try {\n    if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichXhrBreadcrumb(breadcrumb, hint, options);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n\n    if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichFetchBreadcrumb(breadcrumb, hint, options);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n  } catch (e) {\n    DEBUG_BUILD && logger.warn('Error when enriching network breadcrumb');\n  }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: XhrBreadcrumbData } {\n  return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: FetchBreadcrumbData } {\n  return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint?: BreadcrumbHint): hint is XhrHint {\n  return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint?: BreadcrumbHint): hint is FetchHint {\n  return hint && hint.response;\n}\n","import type { Breadcrumb, TextEncoderInternal, XhrBreadcrumbData } from '@sentry/types';\nimport { SENTRY_XHR_DATA_KEY, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n  NetworkMetaWarning,\n  ReplayContainer,\n  ReplayNetworkOptions,\n  ReplayNetworkRequestData,\n  XhrHint,\n} from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n  buildNetworkRequestOrResponse,\n  buildSkippedNetworkRequestOrResponse,\n  getAllowedHeaders,\n  getBodySize,\n  getBodyString,\n  makeNetworkReplayBreadcrumb,\n  mergeWarning,\n  parseContentLengthHeader,\n  urlMatches,\n} from './networkUtils';\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureXhrBreadcrumbToReplay(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: Partial<XhrHint>,\n  options: ReplayNetworkOptions & { replay: ReplayContainer },\n): Promise<void> {\n  try {\n    const data = _prepareXhrData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && logger.error('[Replay] Failed to capture xhr breadcrumb', error);\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichXhrBreadcrumb(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: Partial<XhrHint>,\n  options: { textEncoder: TextEncoderInternal },\n): void {\n  const { xhr, input } = hint;\n\n  if (!xhr) {\n    return;\n  }\n\n  const reqSize = getBodySize(input, options.textEncoder);\n  const resSize = xhr.getResponseHeader('content-length')\n    ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n    : _getBodySize(xhr.response, xhr.responseType, options.textEncoder);\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nfunction _prepareXhrData(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: Partial<XhrHint>,\n  options: ReplayNetworkOptions,\n): ReplayNetworkRequestData | null {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  if (!url) {\n    return null;\n  }\n\n  if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n    const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n    const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n    return {\n      startTimestamp,\n      endTimestamp,\n      url,\n      method,\n      statusCode,\n      request,\n      response,\n    };\n  }\n\n  const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n  const networkRequestHeaders = xhrInfo\n    ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n    : {};\n  const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n  const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input) : [undefined];\n  const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n  const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n  const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request: requestWarning ? mergeWarning(request, requestWarning) : request,\n    response: responseWarning ? mergeWarning(response, responseWarning) : response,\n  };\n}\n\nfunction getResponseHeaders(xhr: XMLHttpRequest): Record<string, string> {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc: Record<string, string>, line: string) => {\n    const [key, value] = line.split(': ');\n    acc[key.toLowerCase()] = value;\n    return acc;\n  }, {});\n}\n\nfunction _getXhrResponseBody(xhr: XMLHttpRequest): [string | undefined, NetworkMetaWarning?] {\n  // We collect errors that happen, but only log them if we can't get any response body\n  const errors: unknown[] = [];\n\n  try {\n    return [xhr.responseText];\n  } catch (e) {\n    errors.push(e);\n  }\n\n  // Try to manually parse the response body, if responseText fails\n  try {\n    return _parseXhrResponse(xhr.response, xhr.responseType);\n  } catch (e) {\n    errors.push(e);\n  }\n\n  DEBUG_BUILD && logger.warn('[Replay] Failed to get xhr response body', ...errors);\n\n  return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nexport function _parseXhrResponse(\n  body: XMLHttpRequest['response'],\n  responseType: XMLHttpRequest['responseType'],\n): [string | undefined, NetworkMetaWarning?] {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof Document) {\n      return [body.body.outerHTML];\n    }\n\n    if (responseType === 'json' && body && typeof body === 'object') {\n      return [JSON.stringify(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch {\n    DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n  body: XMLHttpRequest['response'],\n  responseType: XMLHttpRequest['responseType'],\n  textEncoder: TextEncoder | TextEncoderInternal,\n): number | undefined {\n  try {\n    const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n    return getBodySize(bodyStr, textEncoder);\n  } catch {\n    return undefined;\n  }\n}\n","import type { HandlerDataFetch } from '@sentry/types';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleFetch(handlerData: HandlerDataFetch): null | ReplayPerformanceEntry<NetworkRequestData> {\n  const { startTimestamp, endTimestamp, fetchData, response } = handlerData;\n\n  if (!endTimestamp) {\n    return null;\n  }\n\n  // This is only used as a fallback, so we know the body sizes are never set here\n  const { method, url } = fetchData;\n\n  return {\n    type: 'resource.fetch',\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: {\n      method,\n      statusCode: response ? (response as Response).status : undefined,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addFetchInstrumentationHandler(listener)`.\n */\nexport function handleFetchSpanListener(replay: ReplayContainer): (handlerData: HandlerDataFetch) => void {\n  return (handlerData: HandlerDataFetch) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleFetch(handlerData);\n\n    addNetworkBreadcrumb(replay, result);\n  };\n}\n","import type { HandlerDataXhr } from '@sentry/types';\nimport { SENTRY_XHR_DATA_KEY } from '@sentry/utils';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleXhr(handlerData: HandlerDataXhr): ReplayPerformanceEntry<NetworkRequestData> | null {\n  const { startTimestamp, endTimestamp, xhr } = handlerData;\n\n  const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n    return null;\n  }\n\n  // This is only used as a fallback, so we know the body sizes are never set here\n  const { method, url, status_code: statusCode } = sentryXhrData;\n\n  if (url === undefined) {\n    return null;\n  }\n\n  return {\n    type: 'resource.xhr',\n    name: url,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    data: {\n      method,\n      statusCode,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addXhrInstrumentationHandler(listener)`.\n */\nexport function handleXhrSpanListener(replay: ReplayContainer): (handlerData: HandlerDataXhr) => void {\n  return (handlerData: HandlerDataXhr) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleXhr(handlerData);\n\n    addNetworkBreadcrumb(replay, result);\n  };\n}\n","import type { Event, EventHint } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isFeedbackEvent, isReplayEvent, isTransactionEvent } from '../util/eventUtils';\nimport { isRrwebError } from '../util/isRrwebError';\nimport { handleAfterSendEvent } from './handleAfterSendEvent';\nimport { addFeedbackBreadcrumb } from './util/addFeedbackBreadcrumb';\nimport { shouldSampleForBufferEvent } from './util/shouldSampleForBufferEvent';\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nexport function handleGlobalEventListener(\n  replay: ReplayContainer,\n  includeAfterSendEventHandling = false,\n): (event: Event, hint: EventHint) => Event | null {\n  const afterSendHandler = includeAfterSendEventHandling ? handleAfterSendEvent(replay) : undefined;\n\n  return Object.assign(\n    (event: Event, hint: EventHint) => {\n      // Do nothing if replay has been disabled\n      if (!replay.isEnabled()) {\n        return event;\n      }\n\n      if (isReplayEvent(event)) {\n        // Replays have separate set of breadcrumbs, do not include breadcrumbs\n        // from core SDK\n        delete event.breadcrumbs;\n        return event;\n      }\n\n      // We only want to handle errors, transactions, and feedbacks, nothing else\n      if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n        return event;\n      }\n\n      // Ensure we do not add replay_id if the session is expired\n      const isSessionActive = replay.checkAndHandleExpiredSession();\n      if (!isSessionActive) {\n        return event;\n      }\n\n      if (isFeedbackEvent(event)) {\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        replay.flush();\n        event.contexts.feedback.replay_id = replay.getSessionId();\n        // Add a replay breadcrumb for this piece of feedback\n        addFeedbackBreadcrumb(replay, event);\n        return event;\n      }\n\n      // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n      // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n      if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n        DEBUG_BUILD && logger.log('[Replay] Ignoring error from rrweb internals', event);\n        return null;\n      }\n\n      // When in buffer mode, we decide to sample here.\n      // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n      // And convert the buffer session to a full session\n      const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n      // Tag errors if it has been sampled in buffer mode, or if it is session mode\n      // Only tag transactions if in session mode\n      const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n      if (shouldTagReplayId) {\n        event.tags = { ...event.tags, replayId: replay.getSessionId() };\n      }\n\n      // In cases where a custom client is used that does not support the new hooks (yet),\n      // we manually call this hook method here\n      if (afterSendHandler) {\n        // Pretend the error had a 200 response so we always capture it\n        afterSendHandler(event, { statusCode: 200 });\n      }\n\n      return event;\n    },\n    { id: 'Replay' },\n  );\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport type { FeedbackEvent } from '@sentry/types';\n\nimport type { ReplayContainer } from '../../types';\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nexport function addFeedbackBreadcrumb(replay: ReplayContainer, event: FeedbackEvent): void {\n  replay.triggerUserActivity();\n  replay.addUpdate(() => {\n    if (!event.timestamp) {\n      // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n      // Return true here so that we don't flush\n      return true;\n    }\n\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: event.timestamp * 1000,\n      data: {\n        timestamp: event.timestamp,\n        tag: 'breadcrumb',\n        payload: {\n          category: 'sentry.feedback',\n          data: {\n            feedbackId: event.event_id,\n          },\n        },\n      },\n    });\n\n    return false;\n  });\n}\n","import type { Event, EventHint } from '@sentry/types';\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nexport function isRrwebError(event: Event, hint: EventHint): boolean {\n  if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n    return false;\n  }\n\n  // @ts-expect-error this may be set by rrweb when it finds errors\n  if (hint.originalException && hint.originalException.__rrweb__) {\n    return true;\n  }\n\n  return false;\n}\n","import type { Event } from '@sentry/types';\n\nimport { UNABLE_TO_SEND_REPLAY } from '../../constants';\nimport type { ReplayContainer } from '../../types';\nimport { isSampled } from '../../util/isSampled';\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nexport function shouldSampleForBufferEvent(replay: ReplayContainer, event: Event): boolean {\n  if (replay.recordingMode !== 'buffer') {\n    return false;\n  }\n\n  // ignore this error because otherwise we could loop indefinitely with\n  // trying to capture replay and failing\n  if (event.message === UNABLE_TO_SEND_REPLAY) {\n    return false;\n  }\n\n  // Require the event to be an error event & to have an exception\n  if (!event.exception || event.type) {\n    return false;\n  }\n\n  return isSampled(replay.getOptions().errorSampleRate);\n}\n","import type { ErrorEvent, Event } from '@sentry/types';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { isErrorEvent } from '../util/eventUtils';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\ntype BeforeSendEventCallback = (event: Event) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleBeforeSendEvent(replay: ReplayContainer): BeforeSendEventCallback {\n  return (event: Event) => {\n    if (!replay.isEnabled() || !isErrorEvent(event)) {\n      return;\n    }\n\n    handleHydrationError(replay, event);\n  };\n}\n\nfunction handleHydrationError(replay: ReplayContainer, event: ErrorEvent): void {\n  const exceptionValue = event.exception && event.exception.values && event.exception.values[0].value;\n  if (typeof exceptionValue !== 'string') {\n    return;\n  }\n\n  if (\n    // Only matches errors in production builds of react-dom\n    // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n    exceptionValue.match(/reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=(418|419|422|423|425)/) ||\n    // Development builds of react-dom\n    // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n    // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n    exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n  ) {\n    const breadcrumb = createBreadcrumb({\n      category: 'replay.hydrate-error',\n    });\n    addBreadcrumbEvent(replay, breadcrumb);\n  }\n}\n","import { WINDOW } from '../constants';\nimport type { AddEventResult, MemoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from './createPerformanceSpans';\n\ntype ReplayMemoryEntry = ReplayPerformanceEntry<MemoryData> & { data: { memory: MemoryInfo } };\n\ninterface MemoryInfo {\n  jsHeapSizeLimit: number;\n  totalJSHeapSize: number;\n  usedJSHeapSize: number;\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nexport async function addMemoryEntry(replay: ReplayContainer): Promise<Array<AddEventResult | null>> {\n  // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n  try {\n    return Promise.all(\n      createPerformanceSpans(replay, [\n        // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n        createMemoryEntry(WINDOW.performance.memory),\n      ]),\n    );\n  } catch (error) {\n    // Do nothing\n    return [];\n  }\n}\n\nfunction createMemoryEntry(memoryEntry: MemoryInfo): ReplayMemoryEntry {\n  const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n  // we don't want to use `getAbsoluteTime` because it adds the event time to the\n  // time origin, so we get the current timestamp instead\n  const time = Date.now() / 1000;\n  return {\n    type: 'memory',\n    name: 'memory',\n    start: time,\n    end: time,\n    data: {\n      memory: {\n        jsHeapSizeLimit,\n        totalJSHeapSize,\n        usedJSHeapSize,\n      },\n    },\n  };\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { logger } from '@sentry/utils';\n\nimport { updateClickDetectorForRecordingEvent } from '../coreHandlers/handleClick';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { saveSession } from '../session/saveSession';\nimport type { RecordingEvent, ReplayContainer, ReplayOptionFrameEvent } from '../types';\nimport { addEventSync } from './addEvent';\nimport { logInfo } from './log';\n\ntype RecordingEmitCallback = (event: RecordingEvent, isCheckout?: boolean) => void;\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nexport function getHandleRecordingEmit(replay: ReplayContainer): RecordingEmitCallback {\n  let hadFirstEvent = false;\n\n  return (event: RecordingEvent, _isCheckout?: boolean) => {\n    // If this is false, it means session is expired, create and a new session and wait for checkout\n    if (!replay.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && logger.warn('[Replay] Received replay event after session expired.');\n\n      return;\n    }\n\n    // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n    // We also want to treat the first event as a checkout, so we handle this specifically here\n    const isCheckout = _isCheckout || !hadFirstEvent;\n    hadFirstEvent = true;\n\n    if (replay.clickDetector) {\n      updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n    }\n\n    // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n    replay.addUpdate(() => {\n      // The session is always started immediately on pageload/init, but for\n      // error-only replays, it should reflect the most recent checkout\n      // when an error occurs. Clear any state that happens before this current\n      // checkout. This needs to happen before `addEvent()` which updates state\n      // dependent on this reset.\n      if (replay.recordingMode === 'buffer' && isCheckout) {\n        replay.setInitialState();\n      }\n\n      // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n      // Skip all further steps\n      if (!addEventSync(replay, event, isCheckout)) {\n        // Return true to skip scheduling a debounced flush\n        return true;\n      }\n\n      // Different behavior for full snapshots (type=2), ignore other event types\n      // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n      if (!isCheckout) {\n        return false;\n      }\n\n      // Additionally, create a meta event that will capture certain SDK settings.\n      // In order to handle buffer mode, this needs to either be done when we\n      // receive checkout events or at flush time.\n      //\n      // `isCheckout` is always true, but want to be explicit that it should\n      // only be added for checkouts\n      addSettingsEvent(replay, isCheckout);\n\n      // If there is a previousSessionId after a full snapshot occurs, then\n      // the replay session was started due to session expiration. The new session\n      // is started before triggering a new checkout and contains the id\n      // of the previous session. Do not immediately flush in this case\n      // to avoid capturing only the checkout and instead the replay will\n      // be captured if they perform any follow-up actions.\n      if (replay.session && replay.session.previousSessionId) {\n        return true;\n      }\n\n      // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n      // this should usually be the timestamp of the checkout event, but to be safe...\n      if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n        const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n        if (earliestEvent) {\n          logInfo(\n            `[Replay] Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`,\n            replay.getOptions()._experiments.traceInternals,\n          );\n\n          replay.session.started = earliestEvent;\n\n          if (replay.getOptions().stickySession) {\n            saveSession(replay.session);\n          }\n        }\n      }\n\n      if (replay.recordingMode === 'session') {\n        // If the full snapshot is due to an initial load, we will not have\n        // a previous session ID. In this case, we want to buffer events\n        // for a set amount of time before flushing. This can help avoid\n        // capturing replays of users that immediately close the window.\n\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        void replay.flush();\n      }\n\n      return true;\n    });\n  };\n}\n\n/**\n * Exported for tests\n */\nexport function createOptionsEvent(replay: ReplayContainer): ReplayOptionFrameEvent {\n  const options = replay.getOptions();\n  return {\n    type: EventType.Custom,\n    timestamp: Date.now(),\n    data: {\n      tag: 'options',\n      payload: {\n        shouldRecordCanvas: replay.isRecordingCanvas(),\n        sessionSampleRate: options.sessionSampleRate,\n        errorSampleRate: options.errorSampleRate,\n        useCompressionOption: options.useCompression,\n        blockAllMedia: options.blockAllMedia,\n        maskAllText: options.maskAllText,\n        maskAllInputs: options.maskAllInputs,\n        useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n        networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n        networkCaptureBodies: options.networkCaptureBodies,\n        networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n        networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n      },\n    },\n  };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay: ReplayContainer, isCheckout?: boolean): void {\n  // Only need to add this event when sending the first segment\n  if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n    return;\n  }\n\n  addEventSync(replay, createOptionsEvent(replay), false);\n}\n","type ClassOption = string | RegExp;\n\n/** Duplicate this from @sentry-internal/rrweb so we can export this as well. */\nexport const ReplayEventTypeDomContentLoaded = 0;\nexport const ReplayEventTypeLoad = 1;\nexport const ReplayEventTypeFullSnapshot = 2;\nexport const ReplayEventTypeIncrementalSnapshot = 3;\nexport const ReplayEventTypeMeta = 4;\nexport const ReplayEventTypeCustom = 5;\nexport const ReplayEventTypePlugin = 6;\n\nexport type ReplayEventType =\n  | typeof ReplayEventTypeDomContentLoaded\n  | typeof ReplayEventTypeLoad\n  | typeof ReplayEventTypeFullSnapshot\n  | typeof ReplayEventTypeIncrementalSnapshot\n  | typeof ReplayEventTypeMeta\n  | typeof ReplayEventTypeCustom\n  | typeof ReplayEventTypePlugin;\n\n/**\n * This is a partial copy of rrweb's eventWithTime type which only contains the properties\n * we specifcally need in the SDK.\n */\nexport type ReplayEventWithTime = {\n  type: ReplayEventType;\n  data: unknown;\n  timestamp: number;\n  delay?: number;\n};\n\n/**\n * This is a partial copy of rrweb's recording options which only contains the properties\n * we specifically us in the SDK. Users can specify additional properties, hence we add the\n * Record<string, unknown> union type.\n */\nexport type RrwebRecordOptions = {\n  maskAllText?: boolean;\n  maskAllInputs?: boolean;\n  blockClass?: ClassOption;\n  ignoreClass?: string;\n  maskTextClass?: ClassOption;\n  maskTextSelector?: string;\n  blockSelector?: string;\n  maskInputOptions?: Record<string, boolean>;\n} & Record<string, unknown>;\n\nexport interface CanvasManagerInterface {\n  reset(): void;\n  freeze(): void;\n  unfreeze(): void;\n  lock(): void;\n  unlock(): void;\n  snapshot(): void;\n}\n\nexport interface CanvasManagerOptions {\n  recordCanvas: boolean;\n  enableManualSnapshot?: boolean;\n  blockClass: string | RegExp;\n  blockSelector: string | null;\n  unblockSelector: string | null;\n  sampling?: 'all' | number;\n  dataURLOptions: Partial<{\n    type: string;\n    quality: number;\n  }>;\n  mutationCb: (p: any) => void;\n  win: typeof globalThis & Window;\n  mirror: any;\n}\n","import { getClient, getCurrentScope } from '@sentry/core';\nimport type { ReplayEvent, TransportMakeRequestResponse } from '@sentry/types';\nimport type { RateLimits } from '@sentry/utils';\nimport { isRateLimited, updateRateLimits } from '@sentry/utils';\n\nimport { REPLAY_EVENT_NAME, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport type { SendReplayData } from '../types';\nimport { createReplayEnvelope } from './createReplayEnvelope';\nimport { logInfo } from './log';\nimport { prepareRecordingData } from './prepareRecordingData';\nimport { prepareReplayEvent } from './prepareReplayEvent';\n\n/**\n * Send replay attachment using `fetch()`\n */\nexport async function sendReplayRequest({\n  recordingData,\n  replayId,\n  segmentId: segment_id,\n  eventContext,\n  timestamp,\n  session,\n}: SendReplayData): Promise<void | TransportMakeRequestResponse> {\n  const preparedRecordingData = prepareRecordingData({\n    recordingData,\n    headers: {\n      segment_id,\n    },\n  });\n\n  const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n  const client = getClient();\n  const scope = getCurrentScope();\n  const transport = client && client.getTransport();\n  const dsn = client && client.getDsn();\n\n  if (!client || !transport || !dsn || !session.sampled) {\n    return;\n  }\n\n  const baseEvent: ReplayEvent = {\n    type: REPLAY_EVENT_NAME,\n    replay_start_timestamp: initialTimestamp / 1000,\n    timestamp: timestamp / 1000,\n    error_ids: errorIds,\n    trace_ids: traceIds,\n    urls,\n    replay_id: replayId,\n    segment_id,\n    replay_type: session.sampled,\n  };\n\n  const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n  if (!replayEvent) {\n    // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n    client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n    logInfo('An event processor returned `null`, will not send event.');\n    return;\n  }\n\n  /*\n  For reference, the fully built event looks something like this:\n  {\n      \"type\": \"replay_event\",\n      \"timestamp\": 1670837008.634,\n      \"error_ids\": [\n          \"errorId\"\n      ],\n      \"trace_ids\": [\n          \"traceId\"\n      ],\n      \"urls\": [\n          \"https://example.com\"\n      ],\n      \"replay_id\": \"eventId\",\n      \"segment_id\": 3,\n      \"replay_type\": \"error\",\n      \"platform\": \"javascript\",\n      \"event_id\": \"eventId\",\n      \"environment\": \"production\",\n      \"sdk\": {\n          \"integrations\": [\n              \"BrowserTracing\",\n              \"Replay\"\n          ],\n          \"name\": \"sentry.javascript.browser\",\n          \"version\": \"7.25.0\"\n      },\n      \"sdkProcessingMetadata\": {},\n      \"contexts\": {\n      },\n  }\n  */\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete replayEvent.sdkProcessingMetadata;\n\n  const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n  let response: void | TransportMakeRequestResponse;\n\n  try {\n    response = await transport.send(envelope);\n  } catch (err) {\n    const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n    try {\n      // In case browsers don't allow this property to be writable\n      // @ts-expect-error This needs lib es2022 and newer\n      error.cause = err;\n    } catch {\n      // nothing to do\n    }\n    throw error;\n  }\n\n  // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n  if (!response) {\n    return response;\n  }\n\n  // If the status code is invalid, we want to immediately stop & not retry\n  if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n    throw new TransportStatusCodeError(response.statusCode);\n  }\n\n  const rateLimits = updateRateLimits({}, response);\n  if (isRateLimited(rateLimits, 'replay')) {\n    throw new RateLimitError(rateLimits);\n  }\n\n  return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nexport class TransportStatusCodeError extends Error {\n  public constructor(statusCode: number) {\n    super(`Transport returned status code ${statusCode}`);\n  }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nexport class RateLimitError extends Error {\n  public rateLimits: RateLimits;\n\n  public constructor(rateLimits: RateLimits) {\n    super('Rate limit hit');\n    this.rateLimits = rateLimits;\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\n\n/**\n * Prepare the recording data ready to be sent.\n */\nexport function prepareRecordingData({\n  recordingData,\n  headers,\n}: {\n  recordingData: ReplayRecordingData;\n  headers: Record<string, unknown>;\n}): ReplayRecordingData {\n  let payloadWithSequence;\n\n  // XXX: newline is needed to separate sequence id from events\n  const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n  if (typeof recordingData === 'string') {\n    payloadWithSequence = `${replayHeaders}${recordingData}`;\n  } else {\n    const enc = new TextEncoder();\n    // XXX: newline is needed to separate sequence id from events\n    const sequence = enc.encode(replayHeaders);\n    // Merge the two Uint8Arrays\n    payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n    payloadWithSequence.set(sequence);\n    payloadWithSequence.set(recordingData, sequence.length);\n  }\n\n  return payloadWithSequence;\n}\n","import type { IntegrationIndex, Scope } from '@sentry/core';\nimport { getIsolationScope } from '@sentry/core';\nimport { prepareEvent } from '@sentry/core';\nimport type { Client, EventHint, ReplayEvent } from '@sentry/types';\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nexport async function prepareReplayEvent({\n  client,\n  scope,\n  replayId: event_id,\n  event,\n}: {\n  client: Client & { _integrations?: IntegrationIndex };\n  scope: Scope;\n  replayId: string;\n  event: ReplayEvent;\n}): Promise<ReplayEvent | null> {\n  const integrations =\n    typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n      ? Object.keys(client._integrations)\n      : undefined;\n\n  const eventHint: EventHint = { event_id, integrations };\n\n  if (client.emit) {\n    client.emit('preprocessEvent', event, eventHint);\n  }\n\n  const preparedEvent = (await prepareEvent(\n    client.getOptions(),\n    event,\n    eventHint,\n    scope,\n    client,\n    getIsolationScope(),\n  )) as ReplayEvent | null;\n\n  // If e.g. a global event processor returned null\n  if (!preparedEvent) {\n    return null;\n  }\n\n  // This normally happens in browser client \"_prepareEvent\"\n  // but since we do not use this private method from the client, but rather the plain import\n  // we need to do this manually.\n  preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n  // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n  const metadata = client.getSdkMetadata && client.getSdkMetadata();\n  const { name, version } = (metadata && metadata.sdk) || {};\n\n  preparedEvent.sdk = {\n    ...preparedEvent.sdk,\n    name: name || 'sentry.javascript.unknown',\n    version: version || '0.0.0',\n  };\n\n  return preparedEvent;\n}\n","import type { DsnComponents, ReplayEnvelope, ReplayEvent, ReplayRecordingData } from '@sentry/types';\nimport { createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader } from '@sentry/utils';\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nexport function createReplayEnvelope(\n  replayEvent: ReplayEvent,\n  recordingData: ReplayRecordingData,\n  dsn: DsnComponents,\n  tunnel?: string,\n): ReplayEnvelope {\n  return createEnvelope<ReplayEnvelope>(\n    createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n    [\n      [{ type: 'replay_event' }, replayEvent],\n      [\n        {\n          type: 'replay_recording',\n          // If string then we need to encode to UTF8, otherwise will have\n          // wrong size. TextEncoder has similar browser support to\n          // MutationObserver, although it does not accept IE11.\n          length:\n            typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n        },\n        recordingData,\n      ],\n    ],\n  );\n}\n","import { captureException, setContext } from '@sentry/core';\n\nimport { RETRY_BASE_INTERVAL, RETRY_MAX_COUNT, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { SendReplayData } from '../types';\nimport { RateLimitError, TransportStatusCodeError, sendReplayRequest } from './sendReplayRequest';\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nexport async function sendReplay(\n  replayData: SendReplayData,\n  retryConfig = {\n    count: 0,\n    interval: RETRY_BASE_INTERVAL,\n  },\n): Promise<unknown> {\n  const { recordingData, options } = replayData;\n\n  // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n  if (!recordingData.length) {\n    return;\n  }\n\n  try {\n    await sendReplayRequest(replayData);\n    return true;\n  } catch (err) {\n    if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n      throw err;\n    }\n\n    // Capture error for every failed replay\n    setContext('Replays', {\n      _retryCount: retryConfig.count,\n    });\n\n    if (DEBUG_BUILD && options._experiments && options._experiments.captureExceptions) {\n      captureException(err);\n    }\n\n    // If an error happened here, it's likely that uploading the attachment\n    // failed, we'll can retry with the same events payload\n    if (retryConfig.count >= RETRY_MAX_COUNT) {\n      const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n      try {\n        // In case browsers don't allow this property to be writable\n        // @ts-expect-error This needs lib es2022 and newer\n        error.cause = err;\n      } catch {\n        // nothing to do\n      }\n\n      throw error;\n    }\n\n    // will retry in intervals of 5, 10, 30\n    retryConfig.interval *= ++retryConfig.count;\n\n    return new Promise((resolve, reject) => {\n      setTimeout(async () => {\n        try {\n          await sendReplay(replayData, retryConfig);\n          resolve(true);\n        } catch (err) {\n          reject(err);\n        }\n      }, retryConfig.interval);\n    });\n  }\n}\n","export const THROTTLED = '__THROTTLED';\nexport const SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throttle<T extends (...rest: any[]) => any>(\n  fn: T,\n  maxCount: number,\n  durationSeconds: number,\n): (...rest: Parameters<T>) => ReturnType<T> | typeof THROTTLED | typeof SKIPPED {\n  const counter = new Map<number, number>();\n\n  const _cleanup = (now: number): void => {\n    const threshold = now - durationSeconds;\n    counter.forEach((_value, key) => {\n      if (key < threshold) {\n        counter.delete(key);\n      }\n    });\n  };\n\n  const _getTotalCount = (): number => {\n    return [...counter.values()].reduce((a, b) => a + b, 0);\n  };\n\n  let isThrottled = false;\n\n  return (...rest: Parameters<T>): ReturnType<T> | typeof THROTTLED | typeof SKIPPED => {\n    // Date in second-precision, which we use as basis for the throttling\n    const now = Math.floor(Date.now() / 1000);\n\n    // First, make sure to delete any old entries\n    _cleanup(now);\n\n    // If already over limit, do nothing\n    if (_getTotalCount() >= maxCount) {\n      const wasThrottled = isThrottled;\n      isThrottled = true;\n      return wasThrottled ? SKIPPED : THROTTLED;\n    }\n\n    isThrottled = false;\n    const count = counter.get(now) || 0;\n    counter.set(now, count + 1);\n\n    return fn(...rest);\n  };\n}\n","/* eslint-disable max-lines */ // TODO: We might want to split this file up\nimport { EventType, record } from '@sentry-internal/rrweb';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  captureException,\n  getClient,\n  getCurrentScope,\n  spanToJSON,\n} from '@sentry/core';\nimport type { ReplayRecordingMode, Transaction } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport {\n  BUFFER_CHECKOUT_TIME,\n  SESSION_IDLE_EXPIRE_DURATION,\n  SESSION_IDLE_PAUSE_DURATION,\n  SLOW_CLICK_SCROLL_TIMEOUT,\n  SLOW_CLICK_THRESHOLD,\n  WINDOW,\n} from './constants';\nimport { ClickDetector } from './coreHandlers/handleClick';\nimport { handleKeyboardEvent } from './coreHandlers/handleKeyboardEvent';\nimport { setupPerformanceObserver } from './coreHandlers/performanceObserver';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventBuffer } from './eventBuffer';\nimport { clearSession } from './session/clearSession';\nimport { loadOrCreateSession } from './session/loadOrCreateSession';\nimport { saveSession } from './session/saveSession';\nimport { shouldRefreshSession } from './session/shouldRefreshSession';\nimport type {\n  AddEventResult,\n  AddUpdateCallback,\n  AllPerformanceEntry,\n  AllPerformanceEntryData,\n  EventBuffer,\n  InternalEventContext,\n  PopEventContext,\n  RecordingEvent,\n  RecordingOptions,\n  ReplayBreadcrumbFrame,\n  ReplayCanvasIntegrationOptions,\n  ReplayContainer as ReplayContainerInterface,\n  ReplayPerformanceEntry,\n  ReplayPluginOptions,\n  SendBufferedReplayOptions,\n  Session,\n  SlowClickConfig,\n  Timeouts,\n} from './types';\nimport { ReplayEventTypeCustom } from './types';\nimport { addEvent, addEventSync } from './util/addEvent';\nimport { addGlobalListeners } from './util/addGlobalListeners';\nimport { addMemoryEntry } from './util/addMemoryEntry';\nimport { createBreadcrumb } from './util/createBreadcrumb';\nimport { createPerformanceEntries } from './util/createPerformanceEntries';\nimport { createPerformanceSpans } from './util/createPerformanceSpans';\nimport { debounce } from './util/debounce';\nimport { getHandleRecordingEmit } from './util/handleRecordingEmit';\nimport { isExpired } from './util/isExpired';\nimport { isSessionExpired } from './util/isSessionExpired';\nimport { logInfo, logInfoNextTick } from './util/log';\nimport { sendReplay } from './util/sendReplay';\nimport type { SKIPPED } from './util/throttle';\nimport { THROTTLED, throttle } from './util/throttle';\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nexport class ReplayContainer implements ReplayContainerInterface {\n  public eventBuffer: EventBuffer | null;\n\n  public performanceEntries: AllPerformanceEntry[];\n\n  public replayPerformanceEntries: ReplayPerformanceEntry<AllPerformanceEntryData>[];\n\n  public session: Session | undefined;\n\n  public clickDetector: ClickDetector | undefined;\n\n  /**\n   * Recording can happen in one of three modes:\n   *   - session: Record the whole session, sending it continuously\n   *   - buffer: Always keep the last 60s of recording, requires:\n   *     - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n   *     - or calling `flush()` to send the replay\n   */\n  public recordingMode: ReplayRecordingMode;\n\n  /**\n   * The current or last active transcation.\n   * This is only available when performance is enabled.\n   */\n  public lastTransaction?: Transaction;\n\n  /**\n   * These are here so we can overwrite them in tests etc.\n   * @hidden\n   */\n  public readonly timeouts: Timeouts;\n\n  private _throttledAddEvent: (\n    event: RecordingEvent,\n    isCheckout?: boolean,\n  ) => typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null>;\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n  private readonly _recordingOptions: RecordingOptions;\n\n  private readonly _options: ReplayPluginOptions;\n\n  private _performanceCleanupCallback?: () => void;\n\n  private _debouncedFlush: ReturnType<typeof debounce>;\n  private _flushLock: Promise<unknown> | undefined;\n\n  /**\n   * Timestamp of the last user activity. This lives across sessions.\n   */\n  private _lastActivity: number;\n\n  /**\n   * Is the integration currently active?\n   */\n  private _isEnabled: boolean;\n\n  /**\n   * Paused is a state where:\n   * - DOM Recording is not listening at all\n   * - Nothing will be added to event buffer (e.g. core SDK events)\n   */\n  private _isPaused: boolean;\n\n  /**\n   * Have we attached listeners to the core SDK?\n   * Note we have to track this as there is no way to remove instrumentation handlers.\n   */\n  private _hasInitializedCoreListeners: boolean;\n\n  /**\n   * Function to stop recording\n   */\n  private _stopRecording: ReturnType<typeof record> | undefined;\n\n  private _context: InternalEventContext;\n\n  /**\n   * Internal use for canvas recording options\n   */\n  private _canvas: ReplayCanvasIntegrationOptions | undefined;\n\n  public constructor({\n    options,\n    recordingOptions,\n  }: {\n    options: ReplayPluginOptions;\n    recordingOptions: RecordingOptions;\n  }) {\n    this.eventBuffer = null;\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n    this.recordingMode = 'session';\n    this.timeouts = {\n      sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n      sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n    } as const;\n    this._lastActivity = Date.now();\n    this._isEnabled = false;\n    this._isPaused = false;\n    this._hasInitializedCoreListeners = false;\n    this._context = {\n      errorIds: new Set(),\n      traceIds: new Set(),\n      urls: [],\n      initialTimestamp: Date.now(),\n      initialUrl: '',\n    };\n\n    this._recordingOptions = recordingOptions;\n    this._options = options;\n\n    this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n      maxWait: this._options.flushMaxDelay,\n    });\n\n    this._throttledAddEvent = throttle(\n      (event: RecordingEvent, isCheckout?: boolean) => addEvent(this, event, isCheckout),\n      // Max 300 events...\n      300,\n      // ... per 5s\n      5,\n    );\n\n    const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n    const slowClickConfig: SlowClickConfig | undefined = slowClickTimeout\n      ? {\n          threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n          timeout: slowClickTimeout,\n          scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n          ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n        }\n      : undefined;\n\n    if (slowClickConfig) {\n      this.clickDetector = new ClickDetector(this, slowClickConfig);\n    }\n  }\n\n  /** Get the event context. */\n  public getContext(): InternalEventContext {\n    return this._context;\n  }\n\n  /** If recording is currently enabled. */\n  public isEnabled(): boolean {\n    return this._isEnabled;\n  }\n\n  /** If recording is currently paused. */\n  public isPaused(): boolean {\n    return this._isPaused;\n  }\n\n  /**\n   * Determine if canvas recording is enabled\n   */\n  public isRecordingCanvas(): boolean {\n    return Boolean(this._canvas);\n  }\n\n  /** Get the replay integration options. */\n  public getOptions(): ReplayPluginOptions {\n    return this._options;\n  }\n\n  /**\n   * Initializes the plugin based on sampling configuration. Should not be\n   * called outside of constructor.\n   */\n  public initializeSampling(previousSessionId?: string): void {\n    const { errorSampleRate, sessionSampleRate } = this._options;\n\n    // If neither sample rate is > 0, then do nothing - user will need to call one of\n    // `start()` or `startBuffering` themselves.\n    if (errorSampleRate <= 0 && sessionSampleRate <= 0) {\n      return;\n    }\n\n    // Otherwise if there is _any_ sample rate set, try to load an existing\n    // session, or create a new one.\n    this._initializeSessionForSampling(previousSessionId);\n\n    if (!this.session) {\n      // This should not happen, something wrong has occurred\n      this._handleException(new Error('Unable to initialize and create session'));\n      return;\n    }\n\n    if (this.session.sampled === false) {\n      // This should only occur if `errorSampleRate` is 0 and was unsampled for\n      // session-based replay. In this case there is nothing to do.\n      return;\n    }\n\n    // If segmentId > 0, it means we've previously already captured this session\n    // In this case, we still want to continue in `session` recording mode\n    this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n    logInfoNextTick(\n      `[Replay] Starting replay in ${this.recordingMode} mode`,\n      this._options._experiments.traceInternals,\n    );\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will throw an error if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * _performanceObserver, Recording, Sentry SDK, etc)\n   */\n  public start(): void {\n    if (this._isEnabled && this.recordingMode === 'session') {\n      throw new Error('Replay recording is already in progress');\n    }\n\n    if (this._isEnabled && this.recordingMode === 'buffer') {\n      throw new Error('Replay buffering is in progress, call `flush()` to save the replay');\n    }\n\n    logInfoNextTick('[Replay] Starting replay in session mode', this._options._experiments.traceInternals);\n\n    const session = loadOrCreateSession(\n      {\n        maxReplayDuration: this._options.maxReplayDuration,\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        traceInternals: this._options._experiments.traceInternals,\n      },\n      {\n        stickySession: this._options.stickySession,\n        // This is intentional: create a new session-based replay when calling `start()`\n        sessionSampleRate: 1,\n        allowBuffering: false,\n      },\n    );\n\n    this.session = session;\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, an error occurs.\n   */\n  public startBuffering(): void {\n    if (this._isEnabled) {\n      throw new Error('Replay recording is already in progress');\n    }\n\n    logInfoNextTick('[Replay] Starting replay in buffer mode', this._options._experiments.traceInternals);\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        traceInternals: this._options._experiments.traceInternals,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: 0,\n        allowBuffering: true,\n      },\n    );\n\n    this.session = session;\n\n    this.recordingMode = 'buffer';\n    this._initializeRecording();\n  }\n\n  /**\n   * Start recording.\n   *\n   * Note that this will cause a new DOM checkout\n   */\n  public startRecording(): void {\n    try {\n      const canvasOptions = this._canvas;\n\n      this._stopRecording = record({\n        ...this._recordingOptions,\n        // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n        // Without this, it would record forever, until an error happens, which we don't want\n        // instead, we'll always keep the last 60 seconds of replay before an error happened\n        ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n        emit: getHandleRecordingEmit(this),\n        onMutation: this._onMutationHandler,\n        ...(canvasOptions\n          ? {\n              recordCanvas: canvasOptions.recordCanvas,\n              getCanvasManager: canvasOptions.getCanvasManager,\n              sampling: canvasOptions.sampling,\n              dataURLOptions: canvasOptions.dataURLOptions,\n            }\n          : {}),\n      });\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Stops the recording, if it was running.\n   *\n   * Returns true if it was previously stopped, or is now stopped,\n   * otherwise false.\n   */\n  public stopRecording(): boolean {\n    try {\n      if (this._stopRecording) {\n        this._stopRecording();\n        this._stopRecording = undefined;\n      }\n\n      return true;\n    } catch (err) {\n      this._handleException(err);\n      return false;\n    }\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n  public async stop({ forceFlush = false, reason }: { forceFlush?: boolean; reason?: string } = {}): Promise<void> {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n    // enter into an infinite loop when `stop()` is called while flushing.\n    this._isEnabled = false;\n\n    try {\n      logInfo(\n        `[Replay] Stopping Replay${reason ? ` triggered by ${reason}` : ''}`,\n        this._options._experiments.traceInternals,\n      );\n\n      this._removeListeners();\n      this.stopRecording();\n\n      this._debouncedFlush.cancel();\n      // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n      // `_isEnabled` state of the plugin since it was disabled above.\n      if (forceFlush) {\n        await this._flush({ force: true });\n      }\n\n      // After flush, destroy event buffer\n      this.eventBuffer && this.eventBuffer.destroy();\n      this.eventBuffer = null;\n\n      // Clear session from session storage, note this means if a new session\n      // is started after, it will not have `previousSessionId`\n      clearSession(this);\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Pause some replay functionality. See comments for `_isPaused`.\n   * This differs from stop as this only stops DOM recording, it is\n   * not as thorough of a shutdown as `stop()`.\n   */\n  public pause(): void {\n    if (this._isPaused) {\n      return;\n    }\n\n    this._isPaused = true;\n    this.stopRecording();\n\n    logInfo('[Replay] Pausing replay', this._options._experiments.traceInternals);\n  }\n\n  /**\n   * Resumes recording, see notes for `pause().\n   *\n   * Note that calling `startRecording()` here will cause a\n   * new DOM checkout.`\n   */\n  public resume(): void {\n    if (!this._isPaused || !this._checkSession()) {\n      return;\n    }\n\n    this._isPaused = false;\n    this.startRecording();\n\n    logInfo('[Replay] Resuming replay', this._options._experiments.traceInternals);\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n  public async sendBufferedReplayOrFlush({ continueRecording = true }: SendBufferedReplayOptions = {}): Promise<void> {\n    if (this.recordingMode === 'session') {\n      return this.flushImmediate();\n    }\n\n    const activityTime = Date.now();\n\n    logInfo('[Replay] Converting buffer to session', this._options._experiments.traceInternals);\n\n    // Allow flush to complete before resuming as a session recording, otherwise\n    // the checkout from `startRecording` may be included in the payload.\n    // Prefer to keep the error replay as a separate (and smaller) segment\n    // than the session replay.\n    await this.flushImmediate();\n\n    const hasStoppedRecording = this.stopRecording();\n\n    if (!continueRecording || !hasStoppedRecording) {\n      return;\n    }\n\n    // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n    if ((this.recordingMode as ReplayRecordingMode) === 'session') {\n      return;\n    }\n\n    // Re-start recording in session-mode\n    this.recordingMode = 'session';\n\n    // Once this session ends, we do not want to refresh it\n    if (this.session) {\n      this._updateUserActivity(activityTime);\n      this._updateSessionActivity(activityTime);\n      this._maybeSaveSession();\n    }\n\n    this.startRecording();\n  }\n\n  /**\n   * We want to batch uploads of replay events. Save events only if\n   * `<flushMinDelay>` milliseconds have elapsed since the last event\n   * *OR* if `<flushMaxDelay>` milliseconds have elapsed.\n   *\n   * Accepts a callback to perform side-effects and returns true to stop batch\n   * processing and hand back control to caller.\n   */\n  public addUpdate(cb: AddUpdateCallback): void {\n    // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n    const cbResult = cb();\n\n    // If this option is turned on then we will only want to call `flush`\n    // explicitly\n    if (this.recordingMode === 'buffer') {\n      return;\n    }\n\n    // If callback is true, we do not want to continue with flushing -- the\n    // caller will need to handle it.\n    if (cbResult === true) {\n      return;\n    }\n\n    // addUpdate is called quite frequently - use _debouncedFlush so that it\n    // respects the flush delays and does not flush immediately\n    this._debouncedFlush();\n  }\n\n  /**\n   * Updates the user activity timestamp and resumes recording. This should be\n   * called in an event handler for a user action that we consider as the user\n   * being \"active\" (e.g. a mouse click).\n   */\n  public triggerUserActivity(): void {\n    this._updateUserActivity();\n\n    // This case means that recording was once stopped due to inactivity.\n    // Ensure that recording is resumed.\n    if (!this._stopRecording) {\n      // Create a new session, otherwise when the user action is flushed, it\n      // will get rejected due to an expired session.\n      if (!this._checkSession()) {\n        return;\n      }\n\n      // Note: This will cause a new DOM checkout\n      this.resume();\n      return;\n    }\n\n    // Otherwise... recording was never suspended, continue as normalish\n    this.checkAndHandleExpiredSession();\n\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Updates the user activity timestamp *without* resuming\n   * recording. Some user events (e.g. keydown) can be create\n   * low-value replays that only contain the keypress as a\n   * breadcrumb. Instead this would require other events to\n   * create a new replay after a session has expired.\n   */\n  public updateUserActivity(): void {\n    this._updateUserActivity();\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Only flush if `this.recordingMode === 'session'`\n   */\n  public conditionalFlush(): Promise<void> {\n    if (this.recordingMode === 'buffer') {\n      return Promise.resolve();\n    }\n\n    return this.flushImmediate();\n  }\n\n  /**\n   * Flush using debounce flush\n   */\n  public flush(): Promise<void> {\n    return this._debouncedFlush() as Promise<void>;\n  }\n\n  /**\n   * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n   * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n   * cases of mulitple flushes happening closely together.\n   */\n  public flushImmediate(): Promise<void> {\n    this._debouncedFlush();\n    // `.flush` is provided by the debounced function, analogously to lodash.debounce\n    return this._debouncedFlush.flush() as Promise<void>;\n  }\n\n  /**\n   * Cancels queued up flushes.\n   */\n  public cancelFlush(): void {\n    this._debouncedFlush.cancel();\n  }\n\n  /** Get the current sesion (=replay) ID */\n  public getSessionId(): string | undefined {\n    return this.session && this.session.id;\n  }\n\n  /**\n   * Checks if recording should be stopped due to user inactivity. Otherwise\n   * check if session is expired and create a new session if so. Triggers a new\n   * full snapshot on new session.\n   *\n   * Returns true if session is not expired, false otherwise.\n   * @hidden\n   */\n  public checkAndHandleExpiredSession(): boolean | void {\n    // Prevent starting a new session if the last user activity is older than\n    // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n    // session+recording. This creates noisy replays that do not have much\n    // content in them.\n    if (\n      this._lastActivity &&\n      isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n      this.session &&\n      this.session.sampled === 'session'\n    ) {\n      // Pause recording only for session-based replays. Otherwise, resuming\n      // will create a new replay and will conflict with users who only choose\n      // to record error-based replays only. (e.g. the resumed replay will not\n      // contain a reference to an error)\n      this.pause();\n      return;\n    }\n\n    // --- There is recent user activity --- //\n    // This will create a new session if expired, based on expiry length\n    if (!this._checkSession()) {\n      // Check session handles the refreshing itself\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Capture some initial state that can change throughout the lifespan of the\n   * replay. This is required because otherwise they would be captured at the\n   * first flush.\n   */\n  public setInitialState(): void {\n    const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n    const url = `${WINDOW.location.origin}${urlPath}`;\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    // Reset _context as well\n    this._clearContext();\n\n    this._context.initialUrl = url;\n    this._context.initialTimestamp = Date.now();\n    this._context.urls.push(url);\n  }\n\n  /**\n   * Add a breadcrumb event, that may be throttled.\n   * If it was throttled, we add a custom breadcrumb to indicate that.\n   */\n  public throttledAddEvent(\n    event: RecordingEvent,\n    isCheckout?: boolean,\n  ): typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null> {\n    const res = this._throttledAddEvent(event, isCheckout);\n\n    // If this is THROTTLED, it means we have throttled the event for the first time\n    // In this case, we want to add a breadcrumb indicating that something was skipped\n    if (res === THROTTLED) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.throttled',\n      });\n\n      this.addUpdate(() => {\n        // Return `false` if the event _was_ added, as that means we schedule a flush\n        return !addEventSync(this, {\n          type: ReplayEventTypeCustom,\n          timestamp: breadcrumb.timestamp || 0,\n          data: {\n            tag: 'breadcrumb',\n            payload: breadcrumb,\n            metric: true,\n          },\n        });\n      });\n    }\n\n    return res;\n  }\n\n  /**\n   * This will get the parametrized route name of the current page.\n   * This is only available if performance is enabled, and if an instrumented router is used.\n   */\n  public getCurrentRoute(): string | undefined {\n    // eslint-disable-next-line deprecation/deprecation\n    const lastTransaction = this.lastTransaction || getCurrentScope().getTransaction();\n\n    const attributes = (lastTransaction && spanToJSON(lastTransaction).data) || {};\n    const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n    if (!lastTransaction || !source || !['route', 'custom'].includes(source)) {\n      return undefined;\n    }\n\n    return spanToJSON(lastTransaction).description;\n  }\n\n  /**\n   * Initialize and start all listeners to varying events (DOM,\n   * Performance Observer, Recording, Sentry SDK, etc)\n   */\n  private _initializeRecording(): void {\n    this.setInitialState();\n\n    // this method is generally called on page load or manually - in both cases\n    // we should treat it as an activity\n    this._updateSessionActivity();\n\n    this.eventBuffer = createEventBuffer({\n      useCompression: this._options.useCompression,\n      workerUrl: this._options.workerUrl,\n    });\n\n    this._removeListeners();\n    this._addListeners();\n\n    // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n    this._isEnabled = true;\n    this._isPaused = false;\n\n    this.startRecording();\n  }\n\n  /** A wrapper to conditionally capture exceptions. */\n  private _handleException(error: unknown): void {\n    DEBUG_BUILD && logger.error('[Replay]', error);\n\n    if (DEBUG_BUILD && this._options._experiments && this._options._experiments.captureExceptions) {\n      captureException(error);\n    }\n  }\n\n  /**\n   * Loads (or refreshes) the current session.\n   */\n  private _initializeSessionForSampling(previousSessionId?: string): void {\n    // Whenever there is _any_ error sample rate, we always allow buffering\n    // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n    const allowBuffering = this._options.errorSampleRate > 0;\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        traceInternals: this._options._experiments.traceInternals,\n        previousSessionId,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: this._options.sessionSampleRate,\n        allowBuffering,\n      },\n    );\n\n    this.session = session;\n  }\n\n  /**\n   * Checks and potentially refreshes the current session.\n   * Returns false if session is not recorded.\n   */\n  private _checkSession(): boolean {\n    // If there is no session yet, we do not want to refresh anything\n    // This should generally not happen, but to be safe....\n    if (!this.session) {\n      return false;\n    }\n\n    const currentSession = this.session;\n\n    if (\n      shouldRefreshSession(currentSession, {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n      })\n    ) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this._refreshSession(currentSession);\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Refresh a session with a new one.\n   * This stops the current session (without forcing a flush, as that would never work since we are expired),\n   * and then does a new sampling based on the refreshed session.\n   */\n  private async _refreshSession(session: Session): Promise<void> {\n    if (!this._isEnabled) {\n      return;\n    }\n    await this.stop({ reason: 'refresh session' });\n    this.initializeSampling(session.id);\n  }\n\n  /**\n   * Adds listeners to record events for the replay\n   */\n  private _addListeners(): void {\n    try {\n      WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n      WINDOW.addEventListener('blur', this._handleWindowBlur);\n      WINDOW.addEventListener('focus', this._handleWindowFocus);\n      WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.addListeners();\n      }\n\n      // There is no way to remove these listeners, so ensure they are only added once\n      if (!this._hasInitializedCoreListeners) {\n        addGlobalListeners(this);\n\n        this._hasInitializedCoreListeners = true;\n      }\n    } catch (err) {\n      this._handleException(err);\n    }\n\n    this._performanceCleanupCallback = setupPerformanceObserver(this);\n  }\n\n  /**\n   * Cleans up listeners that were created in `_addListeners`\n   */\n  private _removeListeners(): void {\n    try {\n      WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n      WINDOW.removeEventListener('blur', this._handleWindowBlur);\n      WINDOW.removeEventListener('focus', this._handleWindowFocus);\n      WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.removeListeners();\n      }\n\n      if (this._performanceCleanupCallback) {\n        this._performanceCleanupCallback();\n      }\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Handle when visibility of the page content changes. Opening a new tab will\n   * cause the state to change to hidden because of content of current page will\n   * be hidden. Likewise, moving a different window to cover the contents of the\n   * page will also trigger a change to a hidden state.\n   */\n  private _handleVisibilityChange: () => void = () => {\n    if (WINDOW.document.visibilityState === 'visible') {\n      this._doChangeToForegroundTasks();\n    } else {\n      this._doChangeToBackgroundTasks();\n    }\n  };\n\n  /**\n   * Handle when page is blurred\n   */\n  private _handleWindowBlur: () => void = () => {\n    const breadcrumb = createBreadcrumb({\n      category: 'ui.blur',\n    });\n\n    // Do not count blur as a user action -- it's part of the process of them\n    // leaving the page\n    this._doChangeToBackgroundTasks(breadcrumb);\n  };\n\n  /**\n   * Handle when page is focused\n   */\n  private _handleWindowFocus: () => void = () => {\n    const breadcrumb = createBreadcrumb({\n      category: 'ui.focus',\n    });\n\n    // Do not count focus as a user action -- instead wait until they focus and\n    // interactive with page\n    this._doChangeToForegroundTasks(breadcrumb);\n  };\n\n  /** Ensure page remains active when a key is pressed. */\n  private _handleKeyboardEvent: (event: KeyboardEvent) => void = (event: KeyboardEvent) => {\n    handleKeyboardEvent(this, event);\n  };\n\n  /**\n   * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n   */\n  private _doChangeToBackgroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\n    if (!this.session) {\n      return;\n    }\n\n    const expired = isSessionExpired(this.session, {\n      maxReplayDuration: this._options.maxReplayDuration,\n      sessionIdleExpire: this.timeouts.sessionIdleExpire,\n    });\n\n    if (expired) {\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Send replay when the page/tab becomes hidden. There is no reason to send\n    // replay if it becomes visible, since no actions we care about were done\n    // while it was hidden\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    void this.conditionalFlush();\n  }\n\n  /**\n   * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n   */\n  private _doChangeToForegroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\n    if (!this.session) {\n      return;\n    }\n\n    const isSessionActive = this.checkAndHandleExpiredSession();\n\n    if (!isSessionActive) {\n      // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n      // ms, we will re-use the existing session, otherwise create a new\n      // session\n      logInfo('[Replay] Document has become active, but session has expired');\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n  }\n\n  /**\n   * Update user activity (across session lifespans)\n   */\n  private _updateUserActivity(_lastActivity: number = Date.now()): void {\n    this._lastActivity = _lastActivity;\n  }\n\n  /**\n   * Updates the session's last activity timestamp\n   */\n  private _updateSessionActivity(_lastActivity: number = Date.now()): void {\n    if (this.session) {\n      this.session.lastActivity = _lastActivity;\n      this._maybeSaveSession();\n    }\n  }\n\n  /**\n   * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n   */\n  private _createCustomBreadcrumb(breadcrumb: ReplayBreadcrumbFrame): void {\n    this.addUpdate(() => {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.throttledAddEvent({\n        type: EventType.Custom,\n        timestamp: breadcrumb.timestamp || 0,\n        data: {\n          tag: 'breadcrumb',\n          payload: breadcrumb,\n        },\n      });\n    });\n  }\n\n  /**\n   * Observed performance events are added to `this.performanceEntries`. These\n   * are included in the replay event before it is finished and sent to Sentry.\n   */\n  private _addPerformanceEntries(): Promise<Array<AddEventResult | null>> {\n    const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    return Promise.all(createPerformanceSpans(this, performanceEntries));\n  }\n\n  /**\n   * Clear _context\n   */\n  private _clearContext(): void {\n    // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n    this._context.errorIds.clear();\n    this._context.traceIds.clear();\n    this._context.urls = [];\n  }\n\n  /** Update the initial timestamp based on the buffer content. */\n  private _updateInitialTimestampFromEventBuffer(): void {\n    const { session, eventBuffer } = this;\n    if (!session || !eventBuffer) {\n      return;\n    }\n\n    // we only ever update this on the initial segment\n    if (session.segmentId) {\n      return;\n    }\n\n    const earliestEvent = eventBuffer.getEarliestTimestamp();\n    if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n      this._context.initialTimestamp = earliestEvent;\n    }\n  }\n\n  /**\n   * Return and clear _context\n   */\n  private _popEventContext(): PopEventContext {\n    const _context = {\n      initialTimestamp: this._context.initialTimestamp,\n      initialUrl: this._context.initialUrl,\n      errorIds: Array.from(this._context.errorIds),\n      traceIds: Array.from(this._context.traceIds),\n      urls: this._context.urls,\n    };\n\n    this._clearContext();\n\n    return _context;\n  }\n\n  /**\n   * Flushes replay event buffer to Sentry.\n   *\n   * Performance events are only added right before flushing - this is\n   * due to the buffered performance observer events.\n   *\n   * Should never be called directly, only by `flush`\n   */\n  private async _runFlush(): Promise<void> {\n    const replayId = this.getSessionId();\n\n    if (!this.session || !this.eventBuffer || !replayId) {\n      DEBUG_BUILD && logger.error('[Replay] No session or eventBuffer found to flush.');\n      return;\n    }\n\n    await this._addPerformanceEntries();\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n      return;\n    }\n\n    // Only attach memory event if eventBuffer is not empty\n    await addMemoryEntry(this);\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer) {\n      return;\n    }\n\n    // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n    if (replayId !== this.getSessionId()) {\n      return;\n    }\n\n    try {\n      // This uses the data from the eventBuffer, so we need to call this before `finish()\n      this._updateInitialTimestampFromEventBuffer();\n\n      const timestamp = Date.now();\n\n      // Check total duration again, to avoid sending outdated stuff\n      // We leave 30s wiggle room to accomodate late flushing etc.\n      // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n      if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30_000) {\n        throw new Error('Session is too long, not sending replay');\n      }\n\n      const eventContext = this._popEventContext();\n      // Always increment segmentId regardless of outcome of sending replay\n      const segmentId = this.session.segmentId++;\n      this._maybeSaveSession();\n\n      // Note this empties the event buffer regardless of outcome of sending replay\n      const recordingData = await this.eventBuffer.finish();\n\n      await sendReplay({\n        replayId,\n        recordingData,\n        segmentId,\n        eventContext,\n        session: this.session,\n        options: this.getOptions(),\n        timestamp,\n      });\n    } catch (err) {\n      this._handleException(err);\n\n      // This means we retried 3 times and all of them failed,\n      // or we ran into a problem we don't want to retry, like rate limiting.\n      // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'sendReplay' });\n\n      const client = getClient();\n\n      if (client) {\n        client.recordDroppedEvent('send_error', 'replay');\n      }\n    }\n  }\n\n  /**\n   * Flush recording data to Sentry. Creates a lock so that only a single flush\n   * can be active at a time. Do not call this directly.\n   */\n  private _flush = async ({\n    force = false,\n  }: {\n    /**\n     * If true, flush while ignoring the `_isEnabled` state of\n     * Replay integration. (By default, flush is noop if integration\n     * is stopped).\n     */\n    force?: boolean;\n  } = {}): Promise<void> => {\n    if (!this._isEnabled && !force) {\n      // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n      return;\n    }\n\n    if (!this.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && logger.error('[Replay] Attempting to finish replay event after session expired.');\n      return;\n    }\n\n    if (!this.session) {\n      // should never happen, as we would have bailed out before\n      return;\n    }\n\n    const start = this.session.started;\n    const now = Date.now();\n    const duration = now - start;\n\n    // A flush is about to happen, cancel any queued flushes\n    this._debouncedFlush.cancel();\n\n    // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n    // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n    const tooShort = duration < this._options.minReplayDuration;\n    const tooLong = duration > this._options.maxReplayDuration + 5_000;\n    if (tooShort || tooLong) {\n      logInfo(\n        `[Replay] Session duration (${Math.floor(duration / 1000)}s) is too ${\n          tooShort ? 'short' : 'long'\n        }, not sending replay.`,\n        this._options._experiments.traceInternals,\n      );\n\n      if (tooShort) {\n        this._debouncedFlush();\n      }\n      return;\n    }\n\n    const eventBuffer = this.eventBuffer;\n    if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n      logInfo('[Replay] Flushing initial segment without checkout.', this._options._experiments.traceInternals);\n      // TODO FN: Evaluate if we want to stop here, or remove this again?\n    }\n\n    // this._flushLock acts as a lock so that future calls to `_flush()`\n    // will be blocked until this promise resolves\n    if (!this._flushLock) {\n      this._flushLock = this._runFlush();\n      await this._flushLock;\n      this._flushLock = undefined;\n      return;\n    }\n\n    // Wait for previous flush to finish, then call the debounced `_flush()`.\n    // It's possible there are other flush requests queued and waiting for it\n    // to resolve. We want to reduce all outstanding requests (as well as any\n    // new flush requests that occur within a second of the locked flush\n    // completing) into a single flush.\n\n    try {\n      await this._flushLock;\n    } catch (err) {\n      DEBUG_BUILD && logger.error(err);\n    } finally {\n      this._debouncedFlush();\n    }\n  };\n\n  /** Save the session, if it is sticky */\n  private _maybeSaveSession(): void {\n    if (this.session && this._options.stickySession) {\n      saveSession(this.session);\n    }\n  }\n\n  /** Handler for rrweb.record.onMutation */\n  private _onMutationHandler = (mutations: unknown[]): boolean => {\n    const count = mutations.length;\n\n    const mutationLimit = this._options.mutationLimit;\n    const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n    const overMutationLimit = mutationLimit && count > mutationLimit;\n\n    // Create a breadcrumb if a lot of mutations happen at the same time\n    // We can show this in the UI as an information with potential performance improvements\n    if (count > mutationBreadcrumbLimit || overMutationLimit) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.mutations',\n        data: {\n          count,\n          limit: overMutationLimit,\n        },\n      });\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Stop replay if over the mutation limit\n    if (overMutationLimit) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n      return false;\n    }\n\n    // `true` means we use the regular mutation handling by rrweb\n    return true;\n  };\n}\n","type DebouncedCallback = {\n  (): void | unknown;\n  flush: () => void | unknown;\n  cancel: () => void;\n};\ntype CallbackFunction = () => unknown;\ntype DebounceOptions = { maxWait?: number };\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n *          debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n *          was already invoked in the meantime, return @param func's return value.\n *          The debounced function has two additional properties:\n *          - `flush`: Invokes the debounced function immediately and returns its return value\n *          - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nexport function debounce(func: CallbackFunction, wait: number, options?: DebounceOptions): DebouncedCallback {\n  let callbackReturnValue: unknown;\n\n  let timerId: ReturnType<typeof setTimeout> | undefined;\n  let maxTimerId: ReturnType<typeof setTimeout> | undefined;\n\n  const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n  function invokeFunc(): unknown {\n    cancelTimers();\n    callbackReturnValue = func();\n    return callbackReturnValue;\n  }\n\n  function cancelTimers(): void {\n    timerId !== undefined && clearTimeout(timerId);\n    maxTimerId !== undefined && clearTimeout(maxTimerId);\n    timerId = maxTimerId = undefined;\n  }\n\n  function flush(): unknown {\n    if (timerId !== undefined || maxTimerId !== undefined) {\n      return invokeFunc();\n    }\n    return callbackReturnValue;\n  }\n\n  function debounced(): unknown {\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeout(invokeFunc, wait);\n\n    if (maxWait && maxTimerId === undefined) {\n      maxTimerId = setTimeout(invokeFunc, maxWait);\n    }\n\n    return callbackReturnValue;\n  }\n\n  debounced.cancel = cancelTimers;\n  debounced.flush = flush;\n  return debounced;\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../../src/constants';\nimport type { ReplayContainer } from '../../src/types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nexport function clearSession(replay: ReplayContainer): void {\n  deleteSession();\n  replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession(): void {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n  } catch {\n    // Ignore potential SecurityError exceptions\n  }\n}\n","import { getWorkerURL } from '@sentry-internal/replay-worker';\n\nimport type { EventBuffer } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferProxy } from './EventBufferProxy';\n\ninterface CreateEventBufferParams {\n  useCompression: boolean;\n  workerUrl?: string;\n}\n\n// Treeshakable guard to remove the code of the included compression worker\ndeclare const __SENTRY_EXCLUDE_REPLAY_WORKER__: boolean;\n\n/**\n * Create an event buffer for replays.\n */\nexport function createEventBuffer({\n  useCompression,\n  workerUrl: customWorkerUrl,\n}: CreateEventBufferParams): EventBuffer {\n  if (\n    useCompression &&\n    // eslint-disable-next-line no-restricted-globals\n    window.Worker\n  ) {\n    const worker = _loadWorker(customWorkerUrl);\n\n    if (worker) {\n      return worker;\n    }\n  }\n\n  logInfo('[Replay] Using simple buffer');\n  return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl?: string): EventBufferProxy | void {\n  try {\n    const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n    if (!workerUrl) {\n      return;\n    }\n\n    logInfo(`[Replay] Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n    const worker = new Worker(workerUrl);\n    return new EventBufferProxy(worker);\n  } catch (error) {\n    logInfo('[Replay] Failed to create compression worker');\n    // Fall back to use simple event buffer array\n  }\n}\n\nfunction _getWorkerUrl(): string {\n  if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n    return getWorkerURL();\n  }\n\n  return '';\n}\n","import r from\"./worker\";function e(){const e=new Blob([r]);return URL.createObjectURL(e)}export{e as getWorkerURL};\n","export default `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<<t[a-1];var s=new r(i[30]);for(a=1;a<30;++a)for(var o=i[a];o<i[a+1];++o)s[o]=o-i[a]<<5|a;return{b:i,r:s}},o=s(e,2),f=o.b,h=o.r;f[28]=258,h[258]=28;for(var l=s(i,0).r,u=new n(32768),c=0;c<32768;++c){var v=(43690&c)>>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a<i;++a)t[a]&&++s[t[a]-1];var o,f=new n(r);for(a=1;a<r;++a)f[a]=f[a-1]+s[a-1]<<1;if(e){o=new n(1<<r);var h=15-r;for(a=0;a<i;++a)if(t[a])for(var l=a<<4|t[a],c=r-t[a],v=f[t[a]-1]++<<c,d=v|(1<<c)-1;v<=d;++v)o[u[v]>>h]=l}else for(o=new n(i),a=0;a<i;++a)t[a]&&(o[a]=u[f[t[a]-1]++]>>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;a<r.length;++a)r[a]&&i.push({s:a,f:r[a]});var s=i.length,o=i.slice();if(!s)return{t:F,l:0};if(1==s){var f=new t(i[0].s+1);return f[i[0].s]=1,{t:f,l:1}}i.sort((function(t,n){return t.f-n.f})),i.push({s:-1,f:25001});var h=i[0],l=i[1],u=0,c=1,v=2;for(i[0]={s:-1,f:h.f+l.f,l:h,r:l};c!=s-1;)h=i[i[u].f<i[v].f?u++:v++],l=i[u!=c&&i[u].f<i[v].f?u++:v++],i[c++]={s:-1,f:h.f+l.f,l:h,r:l};var d=o[0].s;for(a=1;a<s;++a)o[a].s>d&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<<y;for(o.sort((function(t,n){return g[n.s]-g[t.s]||t.f-n.f}));a<s;++a){var b=o[a].s;if(!(g[b]>e))break;p+=m-(1<<w-g[b]),g[b]=e}for(p>>=y;p>0;){var M=o[a].s;g[M]<e?p-=1<<e-g[M]++-1:++a}for(;a>=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e<n.length;++e)r+=t[e]*n[e];return r},k=function(t,n,r){var e=r.length,i=m(n+2);t[i]=255&e,t[i+1]=e>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a<e;++a)t[i+a+4]=r[a];return 8*(i+4+e)},C=function(t,r,s,o,f,h,l,u,c,v,m){z(r,m++,s),++f[256];for(var b=_(f,15),M=b.t,E=b.l,x=_(h,15),C=x.t,U=x.l,F=D(M),I=F.c,S=F.n,L=D(C),O=L.c,j=L.n,q=new n(19),B=0;B<I.length;++B)++q[31&I[B]];for(B=0;B<O.length;++B)++q[31&O[B]];for(var G=_(q,7),H=G.t,J=G.l,K=19;K>4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X<W)),m+=2,X<W){N=d(M,E,0),P=M,Q=d(C,U,0),R=C;var Y=d(H,J,0);z(r,m,S-257),z(r,m+5,j-1),z(r,m+10,K-4),m+=14;for(B=0;B<K;++B)z(r,m+3*B,H[a[B]]);m+=3*K;for(var Z=[I,O],$=0;$<2;++$){var tt=Z[$];for(B=0;B<tt.length;++B){var nt=31&tt[B];z(r,m,Y[nt]),m+=H[nt],nt>15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B<u;++B){var rt=o[B];if(rt>255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s<o;++s)i+=e+=r[s];e=(65535&e)+15*(e>>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},L=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<<o)-1,A=c.p||new n(32768),_=c.h||new n(z+1),x=Math.ceil(o/3),D=2*x,T=function(t){return(a[t]^a[t+1]<<x^a[t+2]<<D)&z},F=new r(25e3),I=new n(288),S=new n(32),L=0,O=0,j=c.i||0,q=0,B=c.w||0,G=0;j+2<v;++j){var H=T(j),J=32767&j,K=_[H];if(A[J]=K,_[H]=J,B<=j){var N=v-j;if((L>7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$<Z&&a[j+$]==a[j+$-W];++$);if($>Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;P<tt;++P){var rt=j-W+P&32767,et=rt-A[rt]&32767;et>nt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j<v;++j)F[q++]=a[j],++I[a[j]];p=C(a,g,w,F,I,S,O,q,G,j-G,p),w||(c.r=7&p|g[p/8|0]<<3,p-=7,c.h=_,c.p=A,c.i=j,c.w=B)}else{for(j=c.w||0;j<v+w;j+=65535){var st=j+65535;st>=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},O=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},j=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(L(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();function q(t,n){n||(n={});var r=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e<n.length;++e)r=I[255&r^n[e]]^r>>>8;t=r},d:function(){return~t}}}(),e=t.length;r.p(t);var i,a=L(t,n,10+((i=n).filename?i.filename.length+1:0),8),s=a.length;return function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&O(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}}(a,n),O(a,s-8,r.d()),O(a,s-4,e),a}var B=function(){function t(t,n){this.c=S(),this.v=1,j.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),j.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=L(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=S();i.p(n.dictionary),O(t,2,i.d())}}(r,this.o),this.v=0),n&&O(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),G=\"undefined\"!=typeof TextEncoder&&new TextEncoder,H=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=n||!1)},t}();function K(n,r){if(r){for(var e=new t(n.length),i=0;i<n.length;++i)e[i]=n.charCodeAt(i);return e}if(G)return G.encode(n);var a=n.length,s=new t(n.length+(n.length>>1)),o=0,f=function(t){s[o++]=t};for(i=0;i<a;++i){if(o+5>s.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(let r=0,e=t.length;r<e;r++)n+=t[r].length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n<i;n++){const i=t[n];r.set(i,e),e+=i.length}return r}(this._deflatedData);return this._init(),t}_init(){this._hasEvents=!1,this._deflatedData=[],this.deflate=new B,this.deflate.ondata=(t,n)=>{this._deflatedData.push(t)},this.stream=new J(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in P&&\"function\"==typeof P[n])try{const t=P[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n","import { addLcpInstrumentationHandler, addPerformanceInstrumentationHandler } from '@sentry-internal/tracing';\n\nimport type { ReplayContainer } from '../types';\nimport { getLargestContentfulPaint } from '../util/createPerformanceEntries';\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nexport function setupPerformanceObserver(replay: ReplayContainer): () => void {\n  function addPerformanceEntry(entry: PerformanceEntry): void {\n    // It is possible for entries to come up multiple times\n    if (!replay.performanceEntries.includes(entry)) {\n      replay.performanceEntries.push(entry);\n    }\n  }\n\n  function onEntries({ entries }: { entries: PerformanceEntry[] }): void {\n    entries.forEach(addPerformanceEntry);\n  }\n\n  const clearCallbacks: (() => void)[] = [];\n\n  (['navigation', 'paint', 'resource'] as const).forEach(type => {\n    clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n  });\n\n  clearCallbacks.push(\n    addLcpInstrumentationHandler(({ metric }) => {\n      replay.replayPerformanceEntries.push(getLargestContentfulPaint(metric));\n    }),\n  );\n\n  // A callback to cleanup all handlers\n  return () => {\n    clearCallbacks.forEach(clearCallback => clearCallback());\n  };\n}\n","import type { Breadcrumb } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { getBaseDomBreadcrumb } from './handleDom';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\n/** Handle keyboard events & create breadcrumbs. */\nexport function handleKeyboardEvent(replay: ReplayContainer, event: KeyboardEvent): void {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  // Update user activity, but do not restart recording as it can create\n  // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n  // session with a single \"keydown\" breadcrumb is created)\n  replay.updateUserActivity();\n\n  const breadcrumb = getKeyboardBreadcrumb(event);\n\n  if (!breadcrumb) {\n    return;\n  }\n\n  addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nexport function getKeyboardBreadcrumb(event: KeyboardEvent): Breadcrumb | null {\n  const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n  // never capture for input fields\n  if (!target || isInputElement(target as HTMLElement) || !key) {\n    return null;\n  }\n\n  // Note: We do not consider shift here, as that means \"uppercase\"\n  const hasModifierKey = metaKey || ctrlKey || altKey;\n  const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n  // Do not capture breadcrumb if only a word key is pressed\n  // This could leak e.g. user input\n  if (!hasModifierKey && isCharacterKey) {\n    return null;\n  }\n\n  const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  const baseBreadcrumb = getBaseDomBreadcrumb(target as Node, message);\n\n  return createBreadcrumb({\n    category: 'ui.keyDown',\n    message,\n    data: {\n      ...baseBreadcrumb.data,\n      metaKey,\n      shiftKey,\n      ctrlKey,\n      altKey,\n      key,\n    },\n  });\n}\n\nfunction isInputElement(target: HTMLElement): boolean {\n  return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n","import { consoleSandbox } from '@sentry/utils';\n\nimport type { DeprecatedPrivacyOptions, ReplayIntegrationPrivacyOptions } from '../types';\n\ntype GetPrivacyOptions = Required<Omit<ReplayIntegrationPrivacyOptions, 'maskFn'>> &\n  Omit<DeprecatedPrivacyOptions, 'maskInputOptions'>;\ninterface GetPrivacyReturn {\n  maskTextSelector: string;\n  unmaskTextSelector: string;\n  blockSelector: string;\n  unblockSelector: string;\n  ignoreSelector: string;\n\n  blockClass?: RegExp;\n  maskTextClass?: RegExp;\n}\n\nfunction getOption(\n  selectors: string[],\n  defaultSelectors: string[],\n  deprecatedClassOption?: string | RegExp,\n  deprecatedSelectorOption?: string,\n): string {\n  const deprecatedSelectors = typeof deprecatedSelectorOption === 'string' ? deprecatedSelectorOption.split(',') : [];\n\n  const allSelectors = [\n    ...selectors,\n    // @deprecated\n    ...deprecatedSelectors,\n\n    // sentry defaults\n    ...defaultSelectors,\n  ];\n\n  // @deprecated\n  if (typeof deprecatedClassOption !== 'undefined') {\n    // NOTE: No support for RegExp\n    if (typeof deprecatedClassOption === 'string') {\n      allSelectors.push(`.${deprecatedClassOption}`);\n    }\n\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        '[Replay] You are using a deprecated configuration item for privacy. Read the documentation on how to use the new privacy configuration.',\n      );\n    });\n  }\n\n  return allSelectors.join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nexport function getPrivacyOptions({\n  mask,\n  unmask,\n  block,\n  unblock,\n  ignore,\n\n  // eslint-disable-next-line deprecation/deprecation\n  blockClass,\n  // eslint-disable-next-line deprecation/deprecation\n  blockSelector,\n  // eslint-disable-next-line deprecation/deprecation\n  maskTextClass,\n  // eslint-disable-next-line deprecation/deprecation\n  maskTextSelector,\n  // eslint-disable-next-line deprecation/deprecation\n  ignoreClass,\n}: GetPrivacyOptions): GetPrivacyReturn {\n  const defaultBlockedElements = ['base[href=\"/\"]'];\n\n  const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]'], maskTextClass, maskTextSelector);\n  const unmaskSelector = getOption(unmask, ['.sentry-unmask', '[data-sentry-unmask]']);\n\n  const options: GetPrivacyReturn = {\n    // We are making the decision to make text and input selectors the same\n    maskTextSelector: maskSelector,\n    unmaskTextSelector: unmaskSelector,\n\n    blockSelector: getOption(\n      block,\n      ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements],\n      blockClass,\n      blockSelector,\n    ),\n    unblockSelector: getOption(unblock, ['.sentry-unblock', '[data-sentry-unblock]']),\n    ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]'], ignoreClass),\n  };\n\n  if (blockClass instanceof RegExp) {\n    options.blockClass = blockClass;\n  }\n\n  if (maskTextClass instanceof RegExp) {\n    options.maskTextClass = maskTextClass;\n  }\n\n  return options;\n}\n","import { getClient } from '@sentry/core';\nimport type { BrowserClientReplayOptions, Integration, IntegrationFn } from '@sentry/types';\nimport { consoleSandbox, dropUndefinedKeys, isBrowser } from '@sentry/utils';\n\nimport {\n  DEFAULT_FLUSH_MAX_DELAY,\n  DEFAULT_FLUSH_MIN_DELAY,\n  MAX_REPLAY_DURATION,\n  MIN_REPLAY_DURATION,\n  MIN_REPLAY_DURATION_LIMIT,\n} from './constants';\nimport { ReplayContainer } from './replay';\nimport type {\n  RecordingOptions,\n  ReplayCanvasIntegrationOptions,\n  ReplayConfiguration,\n  ReplayPluginOptions,\n  SendBufferedReplayOptions,\n} from './types';\nimport { getPrivacyOptions } from './util/getPrivacyOptions';\nimport { maskAttribute } from './util/maskAttribute';\n\nconst MEDIA_SELECTORS =\n  'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\ntype InitialReplayPluginOptions = Omit<ReplayPluginOptions, 'sessionSampleRate' | 'errorSampleRate'> &\n  Partial<Pick<ReplayPluginOptions, 'sessionSampleRate' | 'errorSampleRate'>>;\n\nexport const replayIntegration = ((options?: ReplayConfiguration) => {\n  // eslint-disable-next-line deprecation/deprecation\n  return new Replay(options);\n}) satisfies IntegrationFn;\n\n/**\n * The main replay integration class, to be passed to `init({  integrations: [] })`.\n * @deprecated Use `replayIntegration()` instead.\n */\nexport class Replay implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Replay';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n  private readonly _recordingOptions: RecordingOptions;\n\n  /**\n   * Initial options passed to the replay integration, merged with default values.\n   * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n   * can only be finally set when setupOnce() is called.\n   *\n   * @private\n   */\n  private readonly _initialOptions: InitialReplayPluginOptions;\n\n  private _replay?: ReplayContainer;\n\n  public constructor({\n    flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n    flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n    minReplayDuration = MIN_REPLAY_DURATION,\n    maxReplayDuration = MAX_REPLAY_DURATION,\n    stickySession = true,\n    useCompression = true,\n    workerUrl,\n    _experiments = {},\n    sessionSampleRate,\n    errorSampleRate,\n    maskAllText = true,\n    maskAllInputs = true,\n    blockAllMedia = true,\n\n    mutationBreadcrumbLimit = 750,\n    mutationLimit = 10_000,\n\n    slowClickTimeout = 7_000,\n    slowClickIgnoreSelectors = [],\n\n    networkDetailAllowUrls = [],\n    networkDetailDenyUrls = [],\n    networkCaptureBodies = true,\n    networkRequestHeaders = [],\n    networkResponseHeaders = [],\n\n    mask = [],\n    maskAttributes = ['title', 'placeholder'],\n    unmask = [],\n    block = [],\n    unblock = [],\n    ignore = [],\n    maskFn,\n\n    beforeAddRecordingEvent,\n    beforeErrorSampling,\n\n    // eslint-disable-next-line deprecation/deprecation\n    blockClass,\n    // eslint-disable-next-line deprecation/deprecation\n    blockSelector,\n    // eslint-disable-next-line deprecation/deprecation\n    maskInputOptions,\n    // eslint-disable-next-line deprecation/deprecation\n    maskTextClass,\n    // eslint-disable-next-line deprecation/deprecation\n    maskTextSelector,\n    // eslint-disable-next-line deprecation/deprecation\n    ignoreClass,\n  }: ReplayConfiguration = {}) {\n    // eslint-disable-next-line deprecation/deprecation\n    this.name = Replay.id;\n\n    const privacyOptions = getPrivacyOptions({\n      mask,\n      unmask,\n      block,\n      unblock,\n      ignore,\n      blockClass,\n      blockSelector,\n      maskTextClass,\n      maskTextSelector,\n      ignoreClass,\n    });\n\n    this._recordingOptions = {\n      maskAllInputs,\n      maskAllText,\n      maskInputOptions: { ...(maskInputOptions || {}), password: true },\n      maskTextFn: maskFn,\n      maskInputFn: maskFn,\n      maskAttributeFn: (key: string, value: string, el: HTMLElement): string =>\n        maskAttribute({\n          maskAttributes,\n          maskAllText,\n          privacyOptions,\n          key,\n          value,\n          el,\n        }),\n\n      ...privacyOptions,\n\n      // Our defaults\n      slimDOMOptions: 'all',\n      inlineStylesheet: true,\n      // Disable inline images as it will increase segment/replay size\n      inlineImages: false,\n      // collect fonts, but be aware that `sentry.io` needs to be an allowed\n      // origin for playback\n      collectFonts: true,\n      errorHandler: (err: Error & { __rrweb__?: boolean }) => {\n        try {\n          err.__rrweb__ = true;\n        } catch (error) {\n          // ignore errors here\n          // this can happen if the error is frozen or does not allow mutation for other reasons\n        }\n      },\n    };\n\n    this._initialOptions = {\n      flushMinDelay,\n      flushMaxDelay,\n      minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n      maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n      stickySession,\n      sessionSampleRate,\n      errorSampleRate,\n      useCompression,\n      workerUrl,\n      blockAllMedia,\n      maskAllInputs,\n      maskAllText,\n      mutationBreadcrumbLimit,\n      mutationLimit,\n      slowClickTimeout,\n      slowClickIgnoreSelectors,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n      networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n      beforeAddRecordingEvent,\n      beforeErrorSampling,\n\n      _experiments,\n    };\n\n    if (typeof sessionSampleRate === 'number') {\n      // eslint-disable-next-line\n      console.warn(\n        `[Replay] You are passing \\`sessionSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysSessionSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysSessionSampleRate: ${sessionSampleRate} })`,\n      );\n\n      this._initialOptions.sessionSampleRate = sessionSampleRate;\n    }\n\n    if (typeof errorSampleRate === 'number') {\n      // eslint-disable-next-line\n      console.warn(\n        `[Replay] You are passing \\`errorSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysOnErrorSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysOnErrorSampleRate: ${errorSampleRate} })`,\n      );\n\n      this._initialOptions.errorSampleRate = errorSampleRate;\n    }\n\n    if (this._initialOptions.blockAllMedia) {\n      // `blockAllMedia` is a more user friendly option to configure blocking\n      // embedded media elements\n      this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n        ? MEDIA_SELECTORS\n        : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n    }\n\n    if (this._isInitialized && isBrowser()) {\n      throw new Error('Multiple Sentry Session Replay instances are not supported');\n    }\n\n    this._isInitialized = true;\n  }\n\n  /** If replay has already been initialized */\n  protected get _isInitialized(): boolean {\n    return _initialized;\n  }\n\n  /** Update _isInitialized */\n  protected set _isInitialized(value: boolean) {\n    _initialized = value;\n  }\n\n  /**\n   * Setup and initialize replay container\n   */\n  public setupOnce(): void {\n    if (!isBrowser()) {\n      return;\n    }\n\n    this._setup();\n\n    // Once upon a time, we tried to create a transaction in `setupOnce` and it would\n    // potentially create a transaction before some native SDK integrations have run\n    // and applied their own global event processor. An example is:\n    // https://github.com/getsentry/sentry-javascript/blob/b47ceafbdac7f8b99093ce6023726ad4687edc48/packages/browser/src/integrations/useragent.ts\n    //\n    // So we call `this._initialize()` in next event loop as a workaround to wait for other\n    // global event processors to finish. This is no longer needed, but keeping it\n    // here to avoid any future issues.\n    setTimeout(() => this._initialize());\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will throw an error if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * PerformanceObserver, Recording, Sentry SDK, etc)\n   */\n  public start(): void {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.start();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, until an error occurs.\n   */\n  public startBuffering(): void {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.startBuffering();\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n  public stop(): Promise<void> {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n\n    return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n  public flush(options?: SendBufferedReplayOptions): Promise<void> {\n    if (!this._replay || !this._replay.isEnabled()) {\n      return Promise.resolve();\n    }\n\n    return this._replay.sendBufferedReplayOrFlush(options);\n  }\n\n  /**\n   * Get the current session ID.\n   */\n  public getReplayId(): string | undefined {\n    if (!this._replay || !this._replay.isEnabled()) {\n      return;\n    }\n\n    return this._replay.getSessionId();\n  }\n\n  /**\n   * Initializes replay.\n   */\n  protected _initialize(): void {\n    if (!this._replay) {\n      return;\n    }\n\n    // We have to run this in _initialize, because this runs in setTimeout\n    // So when this runs all integrations have been added\n    // Before this, we cannot access integrations on the client,\n    // so we need to mutate the options here\n    this._maybeLoadFromReplayCanvasIntegration();\n\n    this._replay.initializeSampling();\n  }\n\n  /** Setup the integration. */\n  private _setup(): void {\n    // Client is not available in constructor, so we need to wait until setupOnce\n    const finalOptions = loadReplayOptionsFromClient(this._initialOptions);\n\n    this._replay = new ReplayContainer({\n      options: finalOptions,\n      recordingOptions: this._recordingOptions,\n    });\n  }\n\n  /** Get canvas options from ReplayCanvas integration, if it is also added. */\n  private _maybeLoadFromReplayCanvasIntegration(): void {\n    // To save bundle size, we skip checking for stuff here\n    // and instead just try-catch everything - as generally this should all be defined\n    /* eslint-disable @typescript-eslint/no-non-null-assertion */\n    try {\n      const client = getClient()!;\n      const canvasIntegration = client.getIntegrationByName!('ReplayCanvas') as Integration & {\n        getOptions(): ReplayCanvasIntegrationOptions;\n      };\n      if (!canvasIntegration) {\n        return;\n      }\n\n      this._replay!['_canvas'] = canvasIntegration.getOptions();\n    } catch {\n      // ignore errors here\n    }\n    /* eslint-enable @typescript-eslint/no-non-null-assertion */\n  }\n}\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions: InitialReplayPluginOptions): ReplayPluginOptions {\n  const client = getClient();\n  const opt = client && (client.getOptions() as BrowserClientReplayOptions);\n\n  const finalOptions = { sessionSampleRate: 0, errorSampleRate: 0, ...dropUndefinedKeys(initialOptions) };\n\n  if (!opt) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn('SDK client is not available.');\n    });\n    return finalOptions;\n  }\n\n  if (\n    initialOptions.sessionSampleRate == null && // TODO remove once deprecated rates are removed\n    initialOptions.errorSampleRate == null && // TODO remove once deprecated rates are removed\n    opt.replaysSessionSampleRate == null &&\n    opt.replaysOnErrorSampleRate == null\n  ) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n      );\n    });\n  }\n\n  if (typeof opt.replaysSessionSampleRate === 'number') {\n    finalOptions.sessionSampleRate = opt.replaysSessionSampleRate;\n  }\n\n  if (typeof opt.replaysOnErrorSampleRate === 'number') {\n    finalOptions.errorSampleRate = opt.replaysOnErrorSampleRate;\n  }\n\n  return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers: string[]): string[] {\n  return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n","import type { getPrivacyOptions } from './getPrivacyOptions';\n\ninterface MaskAttributeParams {\n  maskAttributes: string[];\n  maskAllText: boolean;\n  privacyOptions: ReturnType<typeof getPrivacyOptions>;\n  key: string;\n  value: string;\n  el: HTMLElement;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nexport function maskAttribute({\n  el,\n  key,\n  maskAttributes,\n  maskAllText,\n  privacyOptions,\n  value,\n}: MaskAttributeParams): string {\n  // We only mask attributes if `maskAllText` is true\n  if (!maskAllText) {\n    return value;\n  }\n\n  // unmaskTextSelector takes precendence\n  if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n    return value;\n  }\n\n  if (\n    maskAttributes.includes(key) ||\n    // Need to mask `value` attribute for `<input>` if it's a button-like\n    // type\n    (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n  ) {\n    return value.replace(/[\\S]/g, '*');\n  }\n\n  return value;\n}\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    }\n    else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n    return base64;\n};\nvar decode = function (base64) {\n    var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n    var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n    return arraybuffer;\n};\n\nexport { decode, encode };\n","import { encode } from './../../../../../../ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js';\n\nconst canvasVarMap = new Map();\r\nfunction variableListFor(ctx, ctor) {\r\n    let contextMap = canvasVarMap.get(ctx);\r\n    if (!contextMap) {\r\n        contextMap = new Map();\r\n        canvasVarMap.set(ctx, contextMap);\r\n    }\r\n    if (!contextMap.has(ctor)) {\r\n        contextMap.set(ctor, []);\r\n    }\r\n    return contextMap.get(ctor);\r\n}\r\nconst saveWebGLVar = (value, win, ctx) => {\r\n    if (!value ||\r\n        !(isInstanceOfWebGLObject(value, win) || typeof value === 'object'))\r\n        return;\r\n    const name = value.constructor.name;\r\n    const list = variableListFor(ctx, name);\r\n    let index = list.indexOf(value);\r\n    if (index === -1) {\r\n        index = list.length;\r\n        list.push(value);\r\n    }\r\n    return index;\r\n};\r\nfunction serializeArg(value, win, ctx) {\r\n    if (value instanceof Array) {\r\n        return value.map((arg) => serializeArg(arg, win, ctx));\r\n    }\r\n    else if (value === null) {\r\n        return value;\r\n    }\r\n    else if (value instanceof Float32Array ||\r\n        value instanceof Float64Array ||\r\n        value instanceof Int32Array ||\r\n        value instanceof Uint32Array ||\r\n        value instanceof Uint8Array ||\r\n        value instanceof Uint16Array ||\r\n        value instanceof Int16Array ||\r\n        value instanceof Int8Array ||\r\n        value instanceof Uint8ClampedArray) {\r\n        const name = value.constructor.name;\r\n        return {\r\n            rr_type: name,\r\n            args: [Object.values(value)],\r\n        };\r\n    }\r\n    else if (value instanceof ArrayBuffer) {\r\n        const name = value.constructor.name;\r\n        const base64 = encode(value);\r\n        return {\r\n            rr_type: name,\r\n            base64,\r\n        };\r\n    }\r\n    else if (value instanceof DataView) {\r\n        const name = value.constructor.name;\r\n        return {\r\n            rr_type: name,\r\n            args: [\r\n                serializeArg(value.buffer, win, ctx),\r\n                value.byteOffset,\r\n                value.byteLength,\r\n            ],\r\n        };\r\n    }\r\n    else if (value instanceof HTMLImageElement) {\r\n        const name = value.constructor.name;\r\n        const { src } = value;\r\n        return {\r\n            rr_type: name,\r\n            src,\r\n        };\r\n    }\r\n    else if (value instanceof HTMLCanvasElement) {\r\n        const name = 'HTMLImageElement';\r\n        const src = value.toDataURL();\r\n        return {\r\n            rr_type: name,\r\n            src,\r\n        };\r\n    }\r\n    else if (value instanceof ImageData) {\r\n        const name = value.constructor.name;\r\n        return {\r\n            rr_type: name,\r\n            args: [serializeArg(value.data, win, ctx), value.width, value.height],\r\n        };\r\n    }\r\n    else if (isInstanceOfWebGLObject(value, win) || typeof value === 'object') {\r\n        const name = value.constructor.name;\r\n        const index = saveWebGLVar(value, win, ctx);\r\n        return {\r\n            rr_type: name,\r\n            index: index,\r\n        };\r\n    }\r\n    return value;\r\n}\r\nconst serializeArgs = (args, win, ctx) => {\r\n    return args.map((arg) => serializeArg(arg, win, ctx));\r\n};\r\nconst isInstanceOfWebGLObject = (value, win) => {\r\n    const webGLConstructorNames = [\r\n        'WebGLActiveInfo',\r\n        'WebGLBuffer',\r\n        'WebGLFramebuffer',\r\n        'WebGLProgram',\r\n        'WebGLRenderbuffer',\r\n        'WebGLShader',\r\n        'WebGLShaderPrecisionFormat',\r\n        'WebGLTexture',\r\n        'WebGLUniformLocation',\r\n        'WebGLVertexArrayObject',\r\n        'WebGLVertexArrayObjectOES',\r\n    ];\r\n    const supportedWebGLConstructorNames = webGLConstructorNames.filter((name) => typeof win[name] === 'function');\r\n    return Boolean(supportedWebGLConstructorNames.find((name) => value instanceof win[name]));\r\n};\n\nexport { isInstanceOfWebGLObject, saveWebGLVar, serializeArg, serializeArgs, variableListFor };\n","import { patch, isBlocked } from '../../../utils.js';\n\nfunction getNormalizedContextName(contextType) {\r\n    return contextType === 'experimental-webgl' ? 'webgl' : contextType;\r\n}\r\nfunction initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, setPreserveDrawingBufferToTrue) {\r\n    const handlers = [];\r\n    try {\r\n        const restoreHandler = patch(win.HTMLCanvasElement.prototype, 'getContext', function (original) {\r\n            return function (contextType, ...args) {\r\n                if (!isBlocked(this, blockClass, blockSelector, unblockSelector, true)) {\r\n                    const ctxName = getNormalizedContextName(contextType);\r\n                    if (!('__context' in this))\r\n                        this.__context = ctxName;\r\n                    if (setPreserveDrawingBufferToTrue &&\r\n                        ['webgl', 'webgl2'].includes(ctxName)) {\r\n                        if (args[0] && typeof args[0] === 'object') {\r\n                            const contextAttributes = args[0];\r\n                            if (!contextAttributes.preserveDrawingBuffer) {\r\n                                contextAttributes.preserveDrawingBuffer = true;\r\n                            }\r\n                        }\r\n                        else {\r\n                            args.splice(0, 1, {\r\n                                preserveDrawingBuffer: true,\r\n                            });\r\n                        }\r\n                    }\r\n                }\r\n                return original.apply(this, [contextType, ...args]);\r\n            };\r\n        });\r\n        handlers.push(restoreHandler);\r\n    }\r\n    catch {\r\n        console.error('failed to patch HTMLCanvasElement.prototype.getContext');\r\n    }\r\n    return () => {\r\n        handlers.forEach((h) => h());\r\n    };\r\n}\n\nexport { initCanvasContextObserver as default };\n","import { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { saveWebGLVar, serializeArgs } from './serialize-args.js';\n\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, unblockSelector, mirror, win) {\r\n    const handlers = [];\r\n    const props = Object.getOwnPropertyNames(prototype);\r\n    for (const prop of props) {\r\n        if ([\r\n            'isContextLost',\r\n            'canvas',\r\n            'drawingBufferWidth',\r\n            'drawingBufferHeight',\r\n        ].includes(prop)) {\r\n            continue;\r\n        }\r\n        try {\r\n            if (typeof prototype[prop] !== 'function') {\r\n                continue;\r\n            }\r\n            const restoreHandler = patch(prototype, prop, function (original) {\r\n                return function (...args) {\r\n                    const result = original.apply(this, args);\r\n                    saveWebGLVar(result, win, this);\r\n                    if ('tagName' in this.canvas &&\r\n                        !isBlocked(this.canvas, blockClass, blockSelector, unblockSelector, true)) {\r\n                        const recordArgs = serializeArgs(args, win, this);\r\n                        const mutation = {\r\n                            type,\r\n                            property: prop,\r\n                            args: recordArgs,\r\n                        };\r\n                        cb(this.canvas, mutation);\r\n                    }\r\n                    return result;\r\n                };\r\n            });\r\n            handlers.push(restoreHandler);\r\n        }\r\n        catch {\r\n            const hookHandler = hookSetter(prototype, prop, {\r\n                set(v) {\r\n                    cb(this.canvas, {\r\n                        type,\r\n                        property: prop,\r\n                        args: [v],\r\n                        setter: true,\r\n                    });\r\n                },\r\n            });\r\n            handlers.push(hookHandler);\r\n        }\r\n    }\r\n    return handlers;\r\n}\r\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector, unblockSelector, mirror) {\r\n    const handlers = [];\r\n    handlers.push(...patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, unblockSelector, mirror, win));\r\n    if (typeof win.WebGL2RenderingContext !== 'undefined') {\r\n        handlers.push(...patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, unblockSelector, mirror, win));\r\n    }\r\n    return () => {\r\n        handlers.forEach((h) => h());\r\n    };\r\n}\n\nexport { initCanvasWebGLMutationObserver as default };\n","import { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { serializeArgs } from './serialize-args.js';\n\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector, unblockSelector) {\r\n    const handlers = [];\r\n    const props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\r\n    for (const prop of props2D) {\r\n        try {\r\n            if (typeof win.CanvasRenderingContext2D.prototype[prop] !== 'function') {\r\n                continue;\r\n            }\r\n            const restoreHandler = patch(win.CanvasRenderingContext2D.prototype, prop, function (original) {\r\n                return function (...args) {\r\n                    if (!isBlocked(this.canvas, blockClass, blockSelector, unblockSelector, true)) {\r\n                        setTimeout(() => {\r\n                            const recordArgs = serializeArgs(args, win, this);\r\n                            cb(this.canvas, {\r\n                                type: CanvasContext['2D'],\r\n                                property: prop,\r\n                                args: recordArgs,\r\n                            });\r\n                        }, 0);\r\n                    }\r\n                    return original.apply(this, args);\r\n                };\r\n            });\r\n            handlers.push(restoreHandler);\r\n        }\r\n        catch {\r\n            const hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\r\n                set(v) {\r\n                    cb(this.canvas, {\r\n                        type: CanvasContext['2D'],\r\n                        property: prop,\r\n                        args: [v],\r\n                        setter: true,\r\n                    });\r\n                },\r\n            });\r\n            handlers.push(hookHandler);\r\n        }\r\n    }\r\n    return () => {\r\n        handlers.forEach((h) => h());\r\n    };\r\n}\n\nexport { initCanvas2DMutationObserver as default };\n","import r from './image-bitmap-data-url-worker.js';\n\nfunction t(){const t=new Blob([r]);return URL.createObjectURL(t)}\n\nexport { t as getImageBitmapDataUrlWorkerURL };\n","var r = `for(var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",e=\"undefined\"==typeof Uint8Array?[]:new Uint8Array(256),n=0;n<64;n++)e[t.charCodeAt(n)]=n;var a=function(e){var n,a=new Uint8Array(e),s=a.length,r=\"\";for(n=0;n<s;n+=3)r+=t[a[n]>>2],r+=t[(3&a[n])<<4|a[n+1]>>4],r+=t[(15&a[n+1])<<2|a[n+2]>>6],r+=t[63&a[n+2]];return s%3==2?r=r.substring(0,r.length-1)+\"=\":s%3==1&&(r=r.substring(0,r.length-2)+\"==\"),r};const s=new Map,r=new Map;const i=self;i.onmessage=async function(t){if(!(\"OffscreenCanvas\"in globalThis))return i.postMessage({id:t.data.id});{const{id:e,bitmap:n,width:o,height:f,dataURLOptions:c}=t.data,g=async function(t,e,n){const s=t+\"-\"+e;if(\"OffscreenCanvas\"in globalThis){if(r.has(s))return r.get(s);const i=new OffscreenCanvas(t,e);i.getContext(\"2d\");const o=await i.convertToBlob(n),f=await o.arrayBuffer(),c=a(f);return r.set(s,c),c}return\"\"}(o,f,c),d=new OffscreenCanvas(o,f);d.getContext(\"2d\").drawImage(n,0,0),n.close();const u=await d.convertToBlob(c),h=u.type,w=await u.arrayBuffer(),l=a(w);if(!s.has(e)&&await g===l)return s.set(e,l),i.postMessage({id:e});if(s.get(e)===l)return i.postMessage({id:e});i.postMessage({id:e,type:h,base64:l,width:o,height:f}),s.set(e,l)}};`;\n\nexport { r as default };\n","import { CanvasManager } from '@sentry-internal/rrweb';\nimport { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { CanvasManagerInterface, CanvasManagerOptions } from '@sentry/replay';\nimport type { Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\n\ninterface ReplayCanvasOptions {\n  enableManualSnapshot?: boolean;\n  quality: 'low' | 'medium' | 'high';\n}\n\ntype GetCanvasManager = (options: CanvasManagerOptions) => CanvasManagerInterface;\nexport interface ReplayCanvasIntegrationOptions {\n  enableManualSnapshot?: boolean;\n  recordCanvas: true;\n  getCanvasManager: GetCanvasManager;\n  sampling: {\n    canvas: number;\n  };\n  dataURLOptions: {\n    type: string;\n    quality: number;\n  };\n}\n\nconst CANVAS_QUALITY = {\n  low: {\n    sampling: {\n      canvas: 1,\n    },\n    dataURLOptions: {\n      type: 'image/webp',\n      quality: 0.25,\n    },\n  },\n  medium: {\n    sampling: {\n      canvas: 2,\n    },\n    dataURLOptions: {\n      type: 'image/webp',\n      quality: 0.4,\n    },\n  },\n  high: {\n    sampling: {\n      canvas: 4,\n    },\n    dataURLOptions: {\n      type: 'image/webp',\n      quality: 0.5,\n    },\n  },\n};\n\nconst INTEGRATION_NAME = 'ReplayCanvas';\n\n/** Exported only for type safe tests. */\nexport const _replayCanvasIntegration = ((options: Partial<ReplayCanvasOptions> = {}) => {\n  const _canvasOptions = {\n    quality: options.quality || 'medium',\n    enableManualSnapshot: options.enableManualSnapshot,\n  };\n\n  let canvasManagerResolve: (value: CanvasManager) => void;\n  const _canvasManager: Promise<CanvasManager> = new Promise(resolve => (canvasManagerResolve = resolve));\n\n  return {\n    name: INTEGRATION_NAME,\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    setupOnce() {},\n    getOptions(): ReplayCanvasIntegrationOptions {\n      const { quality, enableManualSnapshot } = _canvasOptions;\n\n      return {\n        enableManualSnapshot,\n        recordCanvas: true,\n        getCanvasManager: (options: CanvasManagerOptions) => {\n          const manager = new CanvasManager({ ...options, enableManualSnapshot });\n          canvasManagerResolve(manager);\n          return manager;\n        },\n        ...(CANVAS_QUALITY[quality || 'medium'] || CANVAS_QUALITY.medium),\n      };\n    },\n    async snapshot(canvasElement?: HTMLCanvasElement) {\n      const canvasManager = await _canvasManager;\n      canvasManager.snapshot(canvasElement);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Add this in addition to `replayIntegration()` to enable canvas recording.\n */\nexport const replayCanvasIntegration = defineIntegration(_replayCanvasIntegration);\n\n/**\n * @deprecated Use `replayCanvasIntegration()` instead\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const ReplayCanvas = convertIntegrationFnToClass(INTEGRATION_NAME, replayCanvasIntegration) as IntegrationClass<\n  Integration & {\n    getOptions: () => ReplayCanvasIntegrationOptions;\n  }\n>;\n","import { getLocationHref } from '@sentry/utils';\n\nimport { FEEDBACK_API_SOURCE } from './constants';\nimport type { SendFeedbackOptions } from './types';\nimport { sendFeedbackRequest } from './util/sendFeedbackRequest';\n\ninterface SendFeedbackParams {\n  message: string;\n  name?: string;\n  email?: string;\n  url?: string;\n  source?: string;\n}\n\n/**\n * Public API to send a Feedback item to Sentry\n */\nexport function sendFeedback(\n  { name, email, message, source = FEEDBACK_API_SOURCE, url = getLocationHref() }: SendFeedbackParams,\n  options: SendFeedbackOptions = {},\n): ReturnType<typeof sendFeedbackRequest> {\n  if (!message) {\n    throw new Error('Unable to submit feedback with empty message');\n  }\n\n  return sendFeedbackRequest(\n    {\n      feedback: {\n        name,\n        email,\n        message,\n        url,\n        source,\n      },\n    },\n    options,\n  );\n}\n","import { createEventEnvelope, getClient, withScope } from '@sentry/core';\nimport type { FeedbackEvent, TransportMakeRequestResponse } from '@sentry/types';\n\nimport { FEEDBACK_API_SOURCE, FEEDBACK_WIDGET_SOURCE } from '../constants';\nimport type { SendFeedbackData, SendFeedbackOptions } from '../types';\nimport { prepareFeedbackEvent } from './prepareFeedbackEvent';\n\n/**\n * Send feedback using transport\n */\nexport async function sendFeedbackRequest(\n  { feedback: { message, email, name, source, url } }: SendFeedbackData,\n  { includeReplay = true }: SendFeedbackOptions = {},\n): Promise<void | TransportMakeRequestResponse> {\n  const client = getClient();\n  const transport = client && client.getTransport();\n  const dsn = client && client.getDsn();\n\n  if (!client || !transport || !dsn) {\n    return;\n  }\n\n  const baseEvent: FeedbackEvent = {\n    contexts: {\n      feedback: {\n        contact_email: email,\n        name,\n        message,\n        url,\n        source,\n      },\n    },\n    type: 'feedback',\n  };\n\n  return withScope(async scope => {\n    // No use for breadcrumbs in feedback\n    scope.clearBreadcrumbs();\n\n    if ([FEEDBACK_API_SOURCE, FEEDBACK_WIDGET_SOURCE].includes(String(source))) {\n      scope.setLevel('info');\n    }\n\n    const feedbackEvent = await prepareFeedbackEvent({\n      scope,\n      client,\n      event: baseEvent,\n    });\n\n    if (!feedbackEvent) {\n      return;\n    }\n\n    if (client.emit) {\n      client.emit('beforeSendFeedback', feedbackEvent, { includeReplay: Boolean(includeReplay) });\n    }\n\n    const envelope = createEventEnvelope(feedbackEvent, dsn, client.getOptions()._metadata, client.getOptions().tunnel);\n\n    let response: void | TransportMakeRequestResponse;\n\n    try {\n      response = await transport.send(envelope);\n    } catch (err) {\n      const error = new Error('Unable to send Feedback');\n\n      try {\n        // In case browsers don't allow this property to be writable\n        // @ts-expect-error This needs lib es2022 and newer\n        error.cause = err;\n      } catch {\n        // nothing to do\n      }\n      throw error;\n    }\n\n    // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n    if (!response) {\n      return;\n    }\n\n    // Require valid status codes, otherwise can assume feedback was not sent successfully\n    if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n      throw new Error('Unable to send Feedback');\n    }\n\n    return response;\n  });\n}\n\n/*\n * For reference, the fully built event looks something like this:\n * {\n *     \"type\": \"feedback\",\n *     \"event_id\": \"d2132d31b39445f1938d7e21b6bf0ec4\",\n *     \"timestamp\": 1597977777.6189718,\n *     \"dist\": \"1.12\",\n *     \"platform\": \"javascript\",\n *     \"environment\": \"production\",\n *     \"release\": 42,\n *     \"tags\": {\"transaction\": \"/organizations/:orgId/performance/:eventSlug/\"},\n *     \"sdk\": {\"name\": \"name\", \"version\": \"version\"},\n *     \"user\": {\n *         \"id\": \"123\",\n *         \"username\": \"user\",\n *         \"email\": \"user@site.com\",\n *         \"ip_address\": \"192.168.11.12\",\n *     },\n *     \"request\": {\n *         \"url\": None,\n *         \"headers\": {\n *             \"user-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15\"\n *         },\n *     },\n *     \"contexts\": {\n *         \"feedback\": {\n *             \"message\": \"test message\",\n *             \"contact_email\": \"test@example.com\",\n *             \"type\": \"feedback\",\n *         },\n *         \"trace\": {\n *             \"trace_id\": \"4C79F60C11214EB38604F4AE0781BFB2\",\n *             \"span_id\": \"FA90FDEAD5F74052\",\n *             \"type\": \"trace\",\n *         },\n *         \"replay\": {\n *             \"replay_id\": \"e2d42047b1c5431c8cba85ee2a8ab25d\",\n *         },\n *     },\n *   }\n */\n","import type { Scope } from '@sentry/core';\nimport { getIsolationScope } from '@sentry/core';\nimport { prepareEvent } from '@sentry/core';\nimport type { Client, FeedbackEvent } from '@sentry/types';\n\ninterface PrepareFeedbackEventParams {\n  client: Client;\n  event: FeedbackEvent;\n  scope: Scope;\n}\n/**\n * Prepare a feedback event & enrich it with the SDK metadata.\n */\nexport async function prepareFeedbackEvent({\n  client,\n  scope,\n  event,\n}: PrepareFeedbackEventParams): Promise<FeedbackEvent | null> {\n  const eventHint = {};\n  if (client.emit) {\n    client.emit('preprocessEvent', event, eventHint);\n  }\n\n  const preparedEvent = (await prepareEvent(\n    client.getOptions(),\n    event,\n    eventHint,\n    scope,\n    client,\n    getIsolationScope(),\n  )) as FeedbackEvent | null;\n\n  if (preparedEvent === null) {\n    // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n    client.recordDroppedEvent('event_processor', 'feedback', event);\n    return null;\n  }\n\n  // This normally happens in browser client \"_prepareEvent\"\n  // but since we do not use this private method from the client, but rather the plain import\n  // we need to do this manually.\n  preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n  return preparedEvent;\n}\n","import type { FeedbackInternalOptions, OptionalFeedbackConfiguration } from '../types';\n\n/**\n * Quick and dirty deep merge for the Feedback integration options\n */\nexport function mergeOptions(\n  defaultOptions: FeedbackInternalOptions,\n  optionOverrides: OptionalFeedbackConfiguration,\n): FeedbackInternalOptions {\n  return {\n    ...defaultOptions,\n    ...optionOverrides,\n    themeDark: {\n      ...defaultOptions.themeDark,\n      ...optionOverrides.themeDark,\n    },\n    themeLight: {\n      ...defaultOptions.themeLight,\n      ...optionOverrides.themeLight,\n    },\n  };\n}\n","import type { FeedbackTheme, FeedbackThemes } from '../types';\n\nfunction getThemedCssVariables(theme: FeedbackTheme): string {\n  return `\n  --background: ${theme.background};\n  --background-hover: ${theme.backgroundHover};\n  --foreground: ${theme.foreground};\n  --error: ${theme.error};\n  --success: ${theme.success};\n  --border: ${theme.border};\n  --border-radius: ${theme.borderRadius};\n  --box-shadow: ${theme.boxShadow};\n\n  --submit-background: ${theme.submitBackground};\n  --submit-background-hover: ${theme.submitBackgroundHover};\n  --submit-border: ${theme.submitBorder};\n  --submit-outline-focus: ${theme.submitOutlineFocus};\n  --submit-foreground: ${theme.submitForeground};\n  --submit-foreground-hover: ${theme.submitForegroundHover};\n\n  --cancel-background: ${theme.cancelBackground};\n  --cancel-background-hover: ${theme.cancelBackgroundHover};\n  --cancel-border: ${theme.cancelBorder};\n  --cancel-outline-focus: ${theme.cancelOutlineFocus};\n  --cancel-foreground: ${theme.cancelForeground};\n  --cancel-foreground-hover: ${theme.cancelForegroundHover};\n\n  --input-background: ${theme.inputBackground};\n  --input-foreground: ${theme.inputForeground};\n  --input-border: ${theme.inputBorder};\n  --input-outline-focus: ${theme.inputOutlineFocus};\n\n  --form-border-radius: ${theme.formBorderRadius};\n  --form-content-border-radius: ${theme.formContentBorderRadius};\n  `;\n}\n\n/**\n * Creates <style> element for widget actor (button that opens the dialog)\n */\nexport function createMainStyles(\n  d: Document,\n  colorScheme: 'system' | 'dark' | 'light',\n  themes: FeedbackThemes,\n): HTMLStyleElement {\n  const style = d.createElement('style');\n  style.textContent = `\n:host {\n  --bottom: 1rem;\n  --right: 1rem;\n  --top: auto;\n  --left: auto;\n  --z-index: 100000;\n  --font-family: ${themes.light.fontFamily};\n  --font-size: ${themes.light.fontSize};\n\n  position: fixed;\n  left: var(--left);\n  right: var(--right);\n  bottom: var(--bottom);\n  top: var(--top);\n  z-index: var(--z-index);\n\n  font-family: var(--font-family);\n  font-size: var(--font-size);\n\n  ${getThemedCssVariables(colorScheme === 'dark' ? themes.dark : themes.light)}\n}\n\n${\n  colorScheme === 'system'\n    ? `\n@media (prefers-color-scheme: dark) {\n  :host {\n    ${getThemedCssVariables(themes.dark)}\n  }\n}`\n    : ''\n}\n}`;\n\n  return style;\n}\n","/**\n * Helper function to set a dict of attributes on element (w/ specified namespace)\n */\nexport function setAttributesNS<T extends SVGElement>(el: T, attributes: Record<string, string>): T {\n  Object.entries(attributes).forEach(([key, val]) => {\n    el.setAttributeNS(null, key, val);\n  });\n  return el;\n}\n","import { WINDOW } from '../../constants';\n\n/**\n * Helper function to create an element. Could be used as a JSX factory\n * (i.e. React-like syntax).\n */\nexport function createElement<K extends keyof HTMLElementTagNameMap>(\n  tagName: K,\n  attributes: { [key: string]: string | boolean | EventListenerOrEventListenerObject } | null,\n  ...children: any\n): HTMLElementTagNameMap[K] {\n  const doc = WINDOW.document;\n  const element = doc.createElement(tagName);\n\n  if (attributes) {\n    Object.entries(attributes).forEach(([attribute, attributeValue]) => {\n      if (attribute === 'className' && typeof attributeValue === 'string') {\n        // JSX does not allow class as a valid name\n        element.setAttribute('class', attributeValue);\n      } else if (typeof attributeValue === 'boolean' && attributeValue) {\n        element.setAttribute(attribute, '');\n      } else if (typeof attributeValue === 'string') {\n        element.setAttribute(attribute, attributeValue);\n      } else if (attribute.startsWith('on') && typeof attributeValue === 'function') {\n        element.addEventListener(attribute.substring(2).toLowerCase(), attributeValue);\n      }\n    });\n  }\n  for (const child of children) {\n    appendChild(element, child);\n  }\n\n  return element;\n}\n\nfunction appendChild(parent: Node, child: any): void {\n  const doc = WINDOW.document;\n  if (typeof child === 'undefined' || child === null) {\n    return;\n  }\n\n  if (Array.isArray(child)) {\n    for (const value of child) {\n      appendChild(parent, value);\n    }\n  } else if (child === false) {\n    // do nothing if child evaluated to false\n  } else if (typeof child === 'string') {\n    parent.appendChild(doc.createTextNode(child));\n  } else if (child instanceof Node) {\n    parent.appendChild(child);\n  } else {\n    parent.appendChild(doc.createTextNode(String(child)));\n  }\n}\n","import type { FeedbackComponent, FeedbackFormData, FeedbackInternalOptions, FeedbackTextConfiguration } from '../types';\nimport { SubmitButton } from './SubmitButton';\nimport { createElement } from './util/createElement';\n\nexport interface FormComponentProps\n  extends Pick<\n    FeedbackInternalOptions,\n    | 'showName'\n    | 'showEmail'\n    | 'isNameRequired'\n    | 'isEmailRequired'\n    | Exclude<keyof FeedbackTextConfiguration, 'buttonLabel' | 'formTitle' | 'successMessageText'>\n  > {\n  /**\n   * A default name value to render the input with. Empty strings are ok.\n   */\n  defaultName: string;\n  /**\n   * A default email value to render the input with. Empty strings are ok.\n   */\n  defaultEmail: string;\n  onCancel?: (e: Event) => void;\n  onSubmit?: (feedback: FeedbackFormData) => void;\n}\n\ninterface FormComponent extends FeedbackComponent<HTMLFormElement> {\n  /**\n   * Shows the error message\n   */\n  showError: (message: string) => void;\n\n  /**\n   * Hides the error message\n   */\n  hideError: () => void;\n}\n\nfunction retrieveStringValue(formData: FormData, key: string): string {\n  const value = formData.get(key);\n  if (typeof value === 'string') {\n    return value.trim();\n  }\n  return '';\n}\n\n/**\n * Creates the form element\n */\nexport function Form({\n  nameLabel,\n  namePlaceholder,\n  emailLabel,\n  emailPlaceholder,\n  messageLabel,\n  messagePlaceholder,\n  cancelButtonLabel,\n  submitButtonLabel,\n\n  showName,\n  showEmail,\n  isNameRequired,\n  isEmailRequired,\n\n  defaultName,\n  defaultEmail,\n  onCancel,\n  onSubmit,\n}: FormComponentProps): FormComponent {\n  const { el: submitEl } = SubmitButton({\n    label: submitButtonLabel,\n  });\n\n  function handleSubmit(e: Event): void {\n    e.preventDefault();\n\n    if (!(e.target instanceof HTMLFormElement)) {\n      return;\n    }\n\n    try {\n      if (onSubmit) {\n        const formData = new FormData(e.target as HTMLFormElement);\n        const feedback = {\n          name: retrieveStringValue(formData, 'name'),\n          email: retrieveStringValue(formData, 'email'),\n          message: retrieveStringValue(formData, 'message'),\n        };\n\n        onSubmit(feedback);\n      }\n    } catch {\n      // pass\n    }\n  }\n\n  const errorEl = createElement('div', {\n    className: 'form__error-container form__error-container--hidden',\n    ['aria-hidden']: 'true',\n  });\n\n  function showError(message: string): void {\n    errorEl.textContent = message;\n    errorEl.classList.remove('form__error-container--hidden');\n    errorEl.setAttribute('aria-hidden', 'false');\n  }\n\n  function hideError(): void {\n    errorEl.textContent = '';\n    errorEl.classList.add('form__error-container--hidden');\n    errorEl.setAttribute('aria-hidden', 'true');\n  }\n\n  const nameEl = createElement('input', {\n    id: 'name',\n    type: showName ? 'text' : 'hidden',\n    ['aria-hidden']: showName ? 'false' : 'true',\n    name: 'name',\n    required: isNameRequired,\n    className: 'form__input',\n    placeholder: namePlaceholder,\n    value: defaultName,\n  });\n\n  const emailEl = createElement('input', {\n    id: 'email',\n    type: showEmail ? 'text' : 'hidden',\n    ['aria-hidden']: showEmail ? 'false' : 'true',\n    name: 'email',\n    required: isEmailRequired,\n    className: 'form__input',\n    placeholder: emailPlaceholder,\n    value: defaultEmail,\n  });\n\n  const messageEl = createElement('textarea', {\n    id: 'message',\n    autoFocus: 'true',\n    rows: '5',\n    name: 'message',\n    required: true,\n    className: 'form__input form__input--textarea',\n    placeholder: messagePlaceholder,\n  });\n\n  const cancelEl = createElement(\n    'button',\n    {\n      type: 'button',\n      className: 'btn btn--default',\n      ['aria-label']: cancelButtonLabel,\n      onClick: (e: Event) => {\n        onCancel && onCancel(e);\n      },\n    },\n    cancelButtonLabel,\n  );\n\n  const formEl = createElement(\n    'form',\n    {\n      className: 'form',\n      onSubmit: handleSubmit,\n    },\n    [\n      errorEl,\n\n      showName &&\n        createElement(\n          'label',\n          {\n            htmlFor: 'name',\n            className: 'form__label',\n          },\n          [\n            createElement(\n              'span',\n              { className: 'form__label__text' },\n              nameLabel,\n              isNameRequired && createElement('span', { className: 'form__label__text--required' }, ' (required)'),\n            ),\n            nameEl,\n          ],\n        ),\n      !showName && nameEl,\n\n      showEmail &&\n        createElement(\n          'label',\n          {\n            htmlFor: 'email',\n            className: 'form__label',\n          },\n          [\n            createElement(\n              'span',\n              { className: 'form__label__text' },\n              emailLabel,\n              isEmailRequired && createElement('span', { className: 'form__label__text--required' }, ' (required)'),\n            ),\n            emailEl,\n          ],\n        ),\n      !showEmail && emailEl,\n\n      createElement(\n        'label',\n        {\n          htmlFor: 'message',\n          className: 'form__label',\n        },\n        [\n          createElement(\n            'span',\n            { className: 'form__label__text' },\n            messageLabel,\n            createElement('span', { className: 'form__label__text--required' }, ' (required)'),\n          ),\n          messageEl,\n        ],\n      ),\n\n      createElement(\n        'div',\n        {\n          className: 'btn-group',\n        },\n        [submitEl, cancelEl],\n      ),\n    ],\n  );\n\n  return {\n    get el() {\n      return formEl;\n    },\n    showError,\n    hideError,\n  };\n}\n","import { WINDOW } from '../constants';\nimport type { FeedbackInternalOptions } from '../types';\nimport { setAttributesNS } from '../util/setAttributesNS';\n\nconst XMLNS = 'http://www.w3.org/2000/svg';\n\ninterface IconReturn {\n  el: SVGElement;\n}\n\ntype Props = Pick<FeedbackInternalOptions, 'colorScheme'>;\n\n/**\n * Sentry Logo\n */\nexport function Logo({ colorScheme }: Props): IconReturn {\n  const createElementNS = <K extends keyof SVGElementTagNameMap>(tagName: K): SVGElementTagNameMap[K] =>\n    WINDOW.document.createElementNS(XMLNS, tagName);\n  const svg = setAttributesNS(createElementNS('svg'), {\n    class: 'sentry-logo',\n    width: '32',\n    height: '30',\n    viewBox: '0 0 72 66',\n    fill: 'none',\n  });\n\n  const path = setAttributesNS(createElementNS('path'), {\n    transform: 'translate(11, 11)',\n    d: 'M29,2.26a4.67,4.67,0,0,0-8,0L14.42,13.53A32.21,32.21,0,0,1,32.17,40.19H27.55A27.68,27.68,0,0,0,12.09,17.47L6,28a15.92,15.92,0,0,1,9.23,12.17H4.62A.76.76,0,0,1,4,39.06l2.94-5a10.74,10.74,0,0,0-3.36-1.9l-2.91,5a4.54,4.54,0,0,0,1.69,6.24A4.66,4.66,0,0,0,4.62,44H19.15a19.4,19.4,0,0,0-8-17.31l2.31-4A23.87,23.87,0,0,1,23.76,44H36.07a35.88,35.88,0,0,0-16.41-31.8l4.67-8a.77.77,0,0,1,1.05-.27c.53.29,20.29,34.77,20.66,35.17a.76.76,0,0,1-.68,1.13H40.6q.09,1.91,0,3.81h4.78A4.59,4.59,0,0,0,50,39.43a4.49,4.49,0,0,0-.62-2.28Z',\n  });\n  svg.append(path);\n\n  const defs = createElementNS('defs');\n  const style = createElementNS('style');\n\n  if (colorScheme === 'system') {\n    style.textContent = `\n    @media (prefers-color-scheme: dark) {\n      path: {\n        fill: '#fff';\n      }\n    }\n    `;\n  }\n\n  style.textContent = `\n    path {\n      fill: ${colorScheme === 'dark' ? '#fff' : '#362d59'};\n    }`;\n\n  defs.append(style);\n  svg.append(defs);\n\n  return {\n    get el() {\n      return svg;\n    },\n  };\n}\n","import { getCurrentScope } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport type { FeedbackFormData, FeedbackInternalOptions, FeedbackWidget } from '../types';\nimport { handleFeedbackSubmit } from '../util/handleFeedbackSubmit';\nimport type { ActorComponent } from './Actor';\nimport { Actor } from './Actor';\nimport type { DialogComponent } from './Dialog';\nimport { Dialog } from './Dialog';\nimport { SuccessMessage } from './SuccessMessage';\n\ninterface CreateWidgetParams {\n  /**\n   * Shadow DOM to append to\n   */\n  shadow: ShadowRoot;\n\n  /**\n   * Feedback integration options\n   */\n  options: FeedbackInternalOptions & { shouldCreateActor?: boolean };\n\n  /**\n   * An element to attach to, that when clicked, will open a dialog\n   */\n  attachTo?: Element;\n\n  /**\n   * If false, will not create an actor\n   */\n  shouldCreateActor?: boolean;\n}\n\n/**\n * Creates a new widget. Returns public methods that control widget behavior.\n */\nexport function createWidget({\n  shadow,\n  options: { shouldCreateActor = true, ...options },\n  attachTo,\n}: CreateWidgetParams): FeedbackWidget {\n  let actor: ActorComponent | undefined;\n  let dialog: DialogComponent | undefined;\n  let isDialogOpen: boolean = false;\n\n  /**\n   * Show the success message for 5 seconds\n   */\n  function showSuccessMessage(): void {\n    if (!shadow) {\n      return;\n    }\n\n    try {\n      const success = SuccessMessage({\n        message: options.successMessageText,\n        onRemove: () => {\n          if (timeoutId) {\n            clearTimeout(timeoutId);\n          }\n          showActor();\n        },\n      });\n\n      if (!success.el) {\n        throw new Error('Unable to show success message');\n      }\n\n      shadow.appendChild(success.el);\n\n      const timeoutId = setTimeout(() => {\n        if (success) {\n          success.remove();\n        }\n      }, 5000);\n    } catch (err) {\n      // TODO: error handling\n      logger.error(err);\n    }\n  }\n\n  /**\n   * Handler for when the feedback form is completed by the user. This will\n   * create and send the feedback message as an event.\n   */\n  async function _handleFeedbackSubmit(feedback: FeedbackFormData): Promise<void> {\n    if (!dialog) {\n      return;\n    }\n\n    // Simple validation for now, just check for non-empty required fields\n    const emptyField = [];\n    if (options.isNameRequired && !feedback.name) {\n      emptyField.push(options.nameLabel);\n    }\n    if (options.isEmailRequired && !feedback.email) {\n      emptyField.push(options.emailLabel);\n    }\n    if (!feedback.message) {\n      emptyField.push(options.messageLabel);\n    }\n    if (emptyField.length > 0) {\n      dialog.showError(`Please enter in the following required fields: ${emptyField.join(', ')}`);\n      return;\n    }\n\n    const result = await handleFeedbackSubmit(dialog, feedback);\n\n    // Error submitting feedback\n    if (!result) {\n      if (options.onSubmitError) {\n        options.onSubmitError();\n      }\n\n      return;\n    }\n\n    // Success\n    removeDialog();\n    showSuccessMessage();\n\n    if (options.onSubmitSuccess) {\n      options.onSubmitSuccess();\n    }\n  }\n\n  /**\n   * Displays the default actor\n   */\n  function showActor(): void {\n    actor && actor.show();\n  }\n\n  /**\n   * Hides the default actor\n   */\n  function hideActor(): void {\n    actor && actor.hide();\n  }\n\n  /**\n   * Removes the default actor element\n   */\n  function removeActor(): void {\n    actor && actor.el && actor.el.remove();\n  }\n\n  /**\n   *\n   */\n  function openDialog(): void {\n    try {\n      if (dialog) {\n        dialog.open();\n        isDialogOpen = true;\n        if (options.onFormOpen) {\n          options.onFormOpen();\n        }\n        return;\n      }\n\n      const userKey = options.useSentryUser;\n      const scope = getCurrentScope();\n      const user = scope && scope.getUser();\n\n      dialog = Dialog({\n        colorScheme: options.colorScheme,\n        showBranding: options.showBranding,\n        showName: options.showName || options.isNameRequired,\n        showEmail: options.showEmail || options.isEmailRequired,\n        isNameRequired: options.isNameRequired,\n        isEmailRequired: options.isEmailRequired,\n        formTitle: options.formTitle,\n        cancelButtonLabel: options.cancelButtonLabel,\n        submitButtonLabel: options.submitButtonLabel,\n        emailLabel: options.emailLabel,\n        emailPlaceholder: options.emailPlaceholder,\n        messageLabel: options.messageLabel,\n        messagePlaceholder: options.messagePlaceholder,\n        nameLabel: options.nameLabel,\n        namePlaceholder: options.namePlaceholder,\n        defaultName: (userKey && user && user[userKey.name]) || '',\n        defaultEmail: (userKey && user && user[userKey.email]) || '',\n        onClosed: () => {\n          showActor();\n          isDialogOpen = false;\n\n          if (options.onFormClose) {\n            options.onFormClose();\n          }\n        },\n        onCancel: () => {\n          closeDialog();\n          showActor();\n        },\n        onSubmit: _handleFeedbackSubmit,\n      });\n\n      if (!dialog.el) {\n        throw new Error('Unable to open Feedback dialog');\n      }\n\n      shadow.appendChild(dialog.el);\n\n      // Hides the default actor whenever dialog is opened\n      hideActor();\n\n      if (options.onFormOpen) {\n        options.onFormOpen();\n      }\n    } catch (err) {\n      // TODO: Error handling?\n      logger.error(err);\n    }\n  }\n\n  /**\n   * Closes the dialog\n   */\n  function closeDialog(): void {\n    if (dialog) {\n      dialog.close();\n      isDialogOpen = false;\n\n      if (options.onFormClose) {\n        options.onFormClose();\n      }\n    }\n  }\n\n  /**\n   * Removes the dialog element from DOM\n   */\n  function removeDialog(): void {\n    if (dialog) {\n      closeDialog();\n      const dialogEl = dialog.el;\n      dialogEl && dialogEl.remove();\n      dialog = undefined;\n    }\n  }\n\n  /**\n   *\n   */\n  function handleActorClick(): void {\n    // Open dialog\n    if (!isDialogOpen) {\n      openDialog();\n    }\n\n    // Hide actor button\n    hideActor();\n  }\n\n  if (attachTo) {\n    attachTo.addEventListener('click', handleActorClick);\n  } else if (shouldCreateActor) {\n    actor = Actor({ buttonLabel: options.buttonLabel, onClick: handleActorClick });\n    actor.el && shadow.appendChild(actor.el);\n  }\n\n  return {\n    get actor() {\n      return actor;\n    },\n    get dialog() {\n      return dialog;\n    },\n\n    showActor,\n    hideActor,\n    removeActor,\n\n    openDialog,\n    closeDialog,\n    removeDialog,\n  };\n}\n","import type { TransportMakeRequestResponse } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { FEEDBACK_WIDGET_SOURCE } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { sendFeedback } from '../sendFeedback';\nimport type { FeedbackFormData, SendFeedbackOptions } from '../types';\nimport type { DialogComponent } from '../widget/Dialog';\n\n/**\n * Handles UI behavior of dialog when feedback is submitted, calls\n * `sendFeedback` to send feedback.\n */\nexport async function handleFeedbackSubmit(\n  dialog: DialogComponent | null,\n  feedback: FeedbackFormData,\n  options?: SendFeedbackOptions,\n): Promise<TransportMakeRequestResponse | void> {\n  if (!dialog) {\n    // Not sure when this would happen\n    return;\n  }\n\n  const showFetchError = (): void => {\n    if (!dialog) {\n      return;\n    }\n    dialog.showError('There was a problem submitting feedback, please wait and try again.');\n  };\n\n  dialog.hideError();\n\n  try {\n    const resp = await sendFeedback({ ...feedback, source: FEEDBACK_WIDGET_SOURCE }, options);\n\n    // Success!\n    return resp;\n  } catch (err) {\n    DEBUG_BUILD && logger.error(err);\n    showFetchError();\n  }\n}\n","import type { FeedbackComponent } from '../types';\nimport { SuccessIcon } from './SuccessIcon';\nimport { createElement } from './util/createElement';\n\nexport interface SuccessMessageProps {\n  message: string;\n  onRemove?: () => void;\n}\n\ninterface SuccessMessageComponent extends FeedbackComponent<HTMLDivElement> {\n  /**\n   * Removes the component\n   */\n  remove: () => void;\n}\n\n/**\n * Feedback dialog component that has the form\n */\nexport function SuccessMessage({ message, onRemove }: SuccessMessageProps): SuccessMessageComponent {\n  function remove(): void {\n    if (!el) {\n      return;\n    }\n\n    el.remove();\n    onRemove && onRemove();\n  }\n\n  const el = createElement(\n    'div',\n    {\n      className: 'success-message',\n      onClick: remove,\n    },\n    SuccessIcon().el,\n    message,\n  );\n\n  return {\n    el,\n    remove,\n  };\n}\n","import { WINDOW } from '../constants';\nimport { setAttributesNS } from '../util/setAttributesNS';\n\nconst WIDTH = 16;\nconst HEIGHT = 17;\nconst XMLNS = 'http://www.w3.org/2000/svg';\n\ninterface IconReturn {\n  el: SVGElement;\n}\n\n/**\n * Success Icon (checkmark)\n */\nexport function SuccessIcon(): IconReturn {\n  const createElementNS = <K extends keyof SVGElementTagNameMap>(tagName: K): SVGElementTagNameMap[K] =>\n    WINDOW.document.createElementNS(XMLNS, tagName);\n  const svg = setAttributesNS(createElementNS('svg'), {\n    class: 'success-icon',\n    width: `${WIDTH}`,\n    height: `${HEIGHT}`,\n    viewBox: `0 0 ${WIDTH} ${HEIGHT}`,\n    fill: 'none',\n  });\n\n  const g = setAttributesNS(createElementNS('g'), {\n    clipPath: 'url(#clip0_57_156)',\n  });\n\n  const path2 = setAttributesNS(createElementNS('path'), {\n    ['fill-rule']: 'evenodd',\n    ['clip-rule']: 'evenodd',\n    d: 'M3.55544 15.1518C4.87103 16.0308 6.41775 16.5 8 16.5C10.1217 16.5 12.1566 15.6571 13.6569 14.1569C15.1571 12.6566 16 10.6217 16 8.5C16 6.91775 15.5308 5.37103 14.6518 4.05544C13.7727 2.73985 12.5233 1.71447 11.0615 1.10897C9.59966 0.503466 7.99113 0.34504 6.43928 0.653721C4.88743 0.962403 3.46197 1.72433 2.34315 2.84315C1.22433 3.96197 0.462403 5.38743 0.153721 6.93928C-0.15496 8.49113 0.00346625 10.0997 0.608967 11.5615C1.21447 13.0233 2.23985 14.2727 3.55544 15.1518ZM4.40546 3.1204C5.46945 2.40946 6.72036 2.03 8 2.03C9.71595 2.03 11.3616 2.71166 12.575 3.92502C13.7883 5.13838 14.47 6.78405 14.47 8.5C14.47 9.77965 14.0905 11.0306 13.3796 12.0945C12.6687 13.1585 11.6582 13.9878 10.476 14.4775C9.29373 14.9672 7.99283 15.0953 6.73777 14.8457C5.48271 14.596 4.32987 13.9798 3.42502 13.075C2.52018 12.1701 1.90397 11.0173 1.65432 9.76224C1.40468 8.50718 1.5328 7.20628 2.0225 6.02404C2.5122 4.8418 3.34148 3.83133 4.40546 3.1204Z',\n  });\n  const path = setAttributesNS(createElementNS('path'), {\n    d: 'M6.68775 12.4297C6.78586 12.4745 6.89218 12.4984 7 12.5C7.11275 12.4955 7.22315 12.4664 7.32337 12.4145C7.4236 12.3627 7.51121 12.2894 7.58 12.2L12 5.63999C12.0848 5.47724 12.1071 5.28902 12.0625 5.11098C12.0178 4.93294 11.9095 4.77744 11.7579 4.67392C11.6064 4.57041 11.4221 4.52608 11.24 4.54931C11.0579 4.57254 10.8907 4.66173 10.77 4.79999L6.88 10.57L5.13 8.56999C5.06508 8.49566 4.98613 8.43488 4.89768 8.39111C4.80922 8.34735 4.713 8.32148 4.61453 8.31498C4.51605 8.30847 4.41727 8.32147 4.32382 8.35322C4.23038 8.38497 4.14413 8.43484 4.07 8.49999C3.92511 8.63217 3.83692 8.81523 3.82387 9.01092C3.81083 9.2066 3.87393 9.39976 4 9.54999L6.43 12.24C6.50187 12.3204 6.58964 12.385 6.68775 12.4297Z',\n  });\n\n  svg.appendChild(g).append(path, path2);\n\n  const speakerDefs = createElementNS('defs');\n  const speakerClipPathDef = setAttributesNS(createElementNS('clipPath'), {\n    id: 'clip0_57_156',\n  });\n\n  const speakerRect = setAttributesNS(createElementNS('rect'), {\n    width: `${WIDTH}`,\n    height: `${WIDTH}`,\n    fill: 'white',\n    transform: 'translate(0 0.5)',\n  });\n\n  speakerClipPathDef.appendChild(speakerRect);\n  speakerDefs.appendChild(speakerClipPathDef);\n\n  svg.appendChild(speakerDefs).appendChild(speakerClipPathDef).appendChild(speakerRect);\n\n  return {\n    get el() {\n      return svg;\n    },\n  };\n}\n","import type { FeedbackComponent, FeedbackInternalOptions } from '../types';\nimport type { FormComponentProps } from './Form';\nimport { Form } from './Form';\nimport { Logo } from './Logo';\nimport { createElement } from './util/createElement';\n\nexport interface DialogProps\n  extends FormComponentProps,\n    Pick<FeedbackInternalOptions, 'formTitle' | 'showBranding' | 'colorScheme'> {\n  onClosed?: () => void;\n}\n\nexport interface DialogComponent extends FeedbackComponent<HTMLDialogElement> {\n  /**\n   * Shows the error message\n   */\n  showError: (message: string) => void;\n\n  /**\n   * Hides the error message\n   */\n  hideError: () => void;\n\n  /**\n   * Opens and shows the dialog and form\n   */\n  open: () => void;\n\n  /**\n   * Closes the dialog and form\n   */\n  close: () => void;\n\n  /**\n   * Check if dialog is currently opened\n   */\n  checkIsOpen: () => boolean;\n}\n\n/**\n * Feedback dialog component that has the form\n */\nexport function Dialog({\n  formTitle,\n  showBranding,\n  showName,\n  showEmail,\n  isNameRequired,\n  isEmailRequired,\n  colorScheme,\n  defaultName,\n  defaultEmail,\n  onClosed,\n  onCancel,\n  onSubmit,\n  ...textLabels\n}: DialogProps): DialogComponent {\n  let el: HTMLDialogElement | null = null;\n\n  /**\n   * Handles when the dialog is clicked. In our case, the dialog is the\n   * semi-transparent bg behind the form. We want clicks outside of the form to\n   * hide the form.\n   */\n  function handleDialogClick(): void {\n    close();\n\n    // Only this should trigger `onClose`, we don't want the `close()` method to\n    // trigger it, otherwise it can cause cycles.\n    onClosed && onClosed();\n  }\n\n  /**\n   * Close the dialog\n   */\n  function close(): void {\n    if (el) {\n      el.open = false;\n    }\n  }\n\n  /**\n   * Opens the dialog\n   */\n  function open(): void {\n    if (el) {\n      el.open = true;\n    }\n  }\n\n  /**\n   * Check if dialog is currently opened\n   */\n  function checkIsOpen(): boolean {\n    return (el && el.open === true) || false;\n  }\n\n  const {\n    el: formEl,\n    showError,\n    hideError,\n  } = Form({\n    showEmail,\n    showName,\n    isEmailRequired,\n    isNameRequired,\n\n    defaultName,\n    defaultEmail,\n    onSubmit,\n    onCancel,\n    ...textLabels,\n  });\n\n  el = createElement(\n    'dialog',\n    {\n      className: 'dialog',\n      open: true,\n      onClick: handleDialogClick,\n    },\n    createElement(\n      'div',\n      {\n        className: 'dialog__content',\n        onClick: e => {\n          // Stop event propagation so clicks on content modal do not propagate to dialog (which will close dialog)\n          e.stopPropagation();\n        },\n      },\n      createElement(\n        'h2',\n        { className: 'dialog__header' },\n        formTitle,\n        showBranding &&\n          createElement(\n            'a',\n            {\n              className: 'brand-link',\n              target: '_blank',\n              href: 'https://sentry.io/welcome/',\n              title: 'Powered by Sentry',\n              rel: 'noopener noreferrer',\n            },\n            Logo({ colorScheme }).el,\n          ),\n      ),\n      formEl,\n    ),\n  );\n\n  return {\n    get el() {\n      return el;\n    },\n    showError,\n    hideError,\n    open,\n    close,\n    checkIsOpen,\n  };\n}\n","import type { FeedbackComponent } from '../types';\nimport { createElement } from './util/createElement';\n\nexport interface SubmitButtonProps {\n  label: string;\n}\n\ntype SubmitButtonComponent = FeedbackComponent<HTMLButtonElement>;\n\n/**\n *\n */\nexport function SubmitButton({ label }: SubmitButtonProps): SubmitButtonComponent {\n  const el = createElement(\n    'button',\n    {\n      type: 'submit',\n      className: 'btn btn--primary',\n      ['aria-label']: label,\n    },\n    label,\n  );\n\n  return {\n    el,\n  };\n}\n","import type { FeedbackComponent, FeedbackInternalOptions } from '../types';\nimport { Icon } from './Icon';\nimport { createElement } from './util/createElement';\n\nexport interface ActorProps extends Pick<FeedbackInternalOptions, 'buttonLabel'> {\n  onClick?: (e: MouseEvent) => void;\n}\n\nexport interface ActorComponent extends FeedbackComponent<HTMLButtonElement> {\n  /**\n   * Shows the actor element\n   */\n  show: () => void;\n  /**\n   * Hides the actor element\n   */\n  hide: () => void;\n}\n\n/**\n *\n */\nexport function Actor({ buttonLabel, onClick }: ActorProps): ActorComponent {\n  function _handleClick(e: MouseEvent): void {\n    onClick && onClick(e);\n  }\n\n  const el = createElement(\n    'button',\n    {\n      type: 'button',\n      className: 'widget__actor',\n      ['aria-label']: buttonLabel,\n      ['aria-hidden']: 'false',\n    },\n    Icon().el,\n    buttonLabel\n      ? createElement(\n          'span',\n          {\n            className: 'widget__actor__text',\n          },\n          buttonLabel,\n        )\n      : null,\n  );\n\n  el.addEventListener('click', _handleClick);\n\n  return {\n    get el() {\n      return el;\n    },\n    show: (): void => {\n      el.classList.remove('widget__actor--hidden');\n      el.setAttribute('aria-hidden', 'false');\n    },\n    hide: (): void => {\n      el.classList.add('widget__actor--hidden');\n      el.setAttribute('aria-hidden', 'true');\n    },\n  };\n}\n","import { WINDOW } from '../constants';\nimport { setAttributesNS } from '../util/setAttributesNS';\n\nconst SIZE = 20;\nconst XMLNS = 'http://www.w3.org/2000/svg';\n\ninterface IconReturn {\n  el: SVGElement;\n}\n\n/**\n * Feedback Icon\n */\nexport function Icon(): IconReturn {\n  const createElementNS = <K extends keyof SVGElementTagNameMap>(tagName: K): SVGElementTagNameMap[K] =>\n    WINDOW.document.createElementNS(XMLNS, tagName);\n  const svg = setAttributesNS(createElementNS('svg'), {\n    class: 'feedback-icon',\n    width: `${SIZE}`,\n    height: `${SIZE}`,\n    viewBox: `0 0 ${SIZE} ${SIZE}`,\n    fill: 'none',\n  });\n\n  const g = setAttributesNS(createElementNS('g'), {\n    clipPath: 'url(#clip0_57_80)',\n  });\n\n  const path = setAttributesNS(createElementNS('path'), {\n    ['fill-rule']: 'evenodd',\n    ['clip-rule']: 'evenodd',\n    d: 'M15.6622 15H12.3997C12.2129 14.9959 12.031 14.9396 11.8747 14.8375L8.04965 12.2H7.49956V19.1C7.4875 19.3348 7.3888 19.5568 7.22256 19.723C7.05632 19.8892 6.83435 19.9879 6.59956 20H2.04956C1.80193 19.9968 1.56535 19.8969 1.39023 19.7218C1.21511 19.5467 1.1153 19.3101 1.11206 19.0625V12.2H0.949652C0.824431 12.2017 0.700142 12.1783 0.584123 12.1311C0.468104 12.084 0.362708 12.014 0.274155 11.9255C0.185602 11.8369 0.115689 11.7315 0.0685419 11.6155C0.0213952 11.4995 -0.00202913 11.3752 -0.00034808 11.25V3.75C-0.00900498 3.62067 0.0092504 3.49095 0.0532651 3.36904C0.0972798 3.24712 0.166097 3.13566 0.255372 3.04168C0.344646 2.94771 0.452437 2.87327 0.571937 2.82307C0.691437 2.77286 0.82005 2.74798 0.949652 2.75H8.04965L11.8747 0.1625C12.031 0.0603649 12.2129 0.00407221 12.3997 0H15.6622C15.9098 0.00323746 16.1464 0.103049 16.3215 0.278167C16.4966 0.453286 16.5964 0.689866 16.5997 0.9375V3.25269C17.3969 3.42959 18.1345 3.83026 18.7211 4.41679C19.5322 5.22788 19.9878 6.32796 19.9878 7.47502C19.9878 8.62209 19.5322 9.72217 18.7211 10.5333C18.1345 11.1198 17.3969 11.5205 16.5997 11.6974V14.0125C16.6047 14.1393 16.5842 14.2659 16.5395 14.3847C16.4948 14.5035 16.4268 14.6121 16.3394 14.7042C16.252 14.7962 16.147 14.8698 16.0307 14.9206C15.9144 14.9714 15.7891 14.9984 15.6622 15ZM1.89695 10.325H1.88715V4.625H8.33715C8.52423 4.62301 8.70666 4.56654 8.86215 4.4625L12.6872 1.875H14.7247V13.125H12.6872L8.86215 10.4875C8.70666 10.3835 8.52423 10.327 8.33715 10.325H2.20217C2.15205 10.3167 2.10102 10.3125 2.04956 10.3125C1.9981 10.3125 1.94708 10.3167 1.89695 10.325ZM2.98706 12.2V18.1625H5.66206V12.2H2.98706ZM16.5997 9.93612V5.01393C16.6536 5.02355 16.7072 5.03495 16.7605 5.04814C17.1202 5.13709 17.4556 5.30487 17.7425 5.53934C18.0293 5.77381 18.2605 6.06912 18.4192 6.40389C18.578 6.73866 18.6603 7.10452 18.6603 7.47502C18.6603 7.84552 18.578 8.21139 18.4192 8.54616C18.2605 8.88093 18.0293 9.17624 17.7425 9.41071C17.4556 9.64518 17.1202 9.81296 16.7605 9.90191C16.7072 9.91509 16.6536 9.9265 16.5997 9.93612Z',\n  });\n  svg.appendChild(g).appendChild(path);\n\n  const speakerDefs = createElementNS('defs');\n  const speakerClipPathDef = setAttributesNS(createElementNS('clipPath'), {\n    id: 'clip0_57_80',\n  });\n\n  const speakerRect = setAttributesNS(createElementNS('rect'), {\n    width: `${SIZE}`,\n    height: `${SIZE}`,\n    fill: 'white',\n  });\n\n  speakerClipPathDef.appendChild(speakerRect);\n  speakerDefs.appendChild(speakerClipPathDef);\n\n  svg.appendChild(speakerDefs).appendChild(speakerClipPathDef).appendChild(speakerRect);\n\n  return {\n    get el() {\n      return svg;\n    },\n  };\n}\n","/**\n * Creates <style> element for widget actor (button that opens the dialog)\n */\nexport function createActorStyles(d: Document): HTMLStyleElement {\n  const style = d.createElement('style');\n  style.textContent = `\n.widget__actor {\n  line-height: 25px;\n\n  display: flex;\n  align-items: center;\n  gap: 8px;\n\n  border-radius: var(--border-radius);\n  cursor: pointer;\n  font-size: 14px;\n  font-weight: 600;\n  padding: 12px 16px;\n  text-decoration: none;\n  z-index: 9000;\n\n  color: var(--foreground);\n  background-color: var(--background);\n  border: var(--border);\n  box-shadow: var(--box-shadow);\n  opacity: 1;\n  transition: opacity 0.1s ease-in-out;\n}\n\n.widget__actor:hover {\n  background-color: var(--background-hover);\n}\n\n.widget__actor svg {\n  width: 16px;\n  height: 16px;\n}\n\n.widget__actor--hidden {\n  opacity: 0;\n  pointer-events: none;\n  visibility: hidden;\n}\n\n.widget__actor__text {\n}\n\n.feedback-icon path {\n  fill: var(--foreground);\n}\n`;\n\n  return style;\n}\n","import { logger } from '@sentry/utils';\n\nimport { WINDOW } from '../constants';\nimport type { FeedbackInternalOptions } from '../types';\nimport { createDialogStyles } from './Dialog.css';\nimport { createMainStyles } from './Main.css';\n\ntype CreateShadowHostParams = Pick<FeedbackInternalOptions, 'id' | 'colorScheme' | 'themeDark' | 'themeLight'>;\n\n/**\n * Creates shadow host\n */\nexport function createShadowHost({ id, colorScheme, themeDark, themeLight }: CreateShadowHostParams): {\n  shadow: ShadowRoot;\n  host: HTMLDivElement;\n} {\n  try {\n    const doc = WINDOW.document;\n\n    // Create the host\n    const host = doc.createElement('div');\n    host.id = id;\n\n    // Create the shadow root\n    const shadow = host.attachShadow({ mode: 'open' });\n\n    shadow.appendChild(createMainStyles(doc, colorScheme, { dark: themeDark, light: themeLight }));\n    shadow.appendChild(createDialogStyles(doc));\n\n    return { shadow, host };\n  } catch {\n    // Shadow DOM probably not supported\n    logger.warn('[Feedback] Browser does not support shadow DOM API');\n    throw new Error('Browser does not support shadow DOM API.');\n  }\n}\n","/**\n * Creates <style> element for widget dialog\n */\nexport function createDialogStyles(d: Document): HTMLStyleElement {\n  const style = d.createElement('style');\n\n  style.textContent = `\n.dialog {\n  line-height: 25px;\n  background-color: rgba(0, 0, 0, 0.05);\n  border: none;\n  position: fixed;\n  inset: 0;\n  z-index: 10000;\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  opacity: 1;\n  transition: opacity 0.2s ease-in-out;\n}\n\n.dialog:not([open]) {\n  opacity: 0;\n  pointer-events: none;\n  visibility: hidden;\n}\n.dialog:not([open]) .dialog__content {\n  transform: translate(0, -16px) scale(0.98);\n}\n\n.dialog__content {\n  position: fixed;\n  left: var(--left);\n  right: var(--right);\n  bottom: var(--bottom);\n  top: var(--top);\n\n  border: var(--border);\n  border-radius: var(--form-border-radius);\n  background-color: var(--background);\n  color: var(--foreground);\n\n  width: 320px;\n  max-width: 100%;\n  max-height: calc(100% - 2rem);\n  display: flex;\n  flex-direction: column;\n  box-shadow: var(--box-shadow);\n  transition: transform 0.2s ease-in-out;\n  transform: translate(0, 0) scale(1);\n}\n\n.dialog__header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  font-size: 20px;\n  font-weight: 600;\n  padding: 24px 24px 0 24px;\n  margin: 0;\n  margin-bottom: 16px;\n}\n\n.brand-link {\n  display: inline-flex;\n}\n\n.error {\n  color: var(--error);\n  margin-bottom: 16px;\n}\n\n.form {\n  display: grid;\n  overflow: auto;\n  flex-direction: column;\n  gap: 16px;\n  padding: 0 24px 24px;\n}\n\n.form__error-container {\n  color: var(--error);\n}\n\n.form__error-container--hidden {\n  display: none;\n}\n\n.form__label {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  margin: 0px;\n}\n\n.form__label__text {\n  display: grid;\n  gap: 4px;\n  align-items: center;\n  grid-auto-flow: column;\n  grid-auto-columns: max-content;\n}\n\n.form__label__text--required {\n  font-size: 0.85em;\n}\n\n.form__input {\n  font-family: inherit;\n  line-height: inherit;\n  background-color: var(--input-background);\n  box-sizing: border-box;\n  border: var(--input-border);\n  border-radius: var(--form-content-border-radius);\n  color: var(--input-foreground);\n  font-size: 14px;\n  font-weight: 500;\n  padding: 6px 12px;\n}\n\n.form__input:focus-visible {\n  outline: 1px auto var(--input-outline-focus);\n}\n\n.form__input--textarea {\n  font-family: inherit;\n  resize: vertical;\n}\n\n.btn-group {\n  display: grid;\n  gap: 8px;\n  margin-top: 8px;\n}\n\n.btn {\n  line-height: inherit;\n  border: var(--cancel-border);\n  border-radius: var(--form-content-border-radius);\n  cursor: pointer;\n  font-size: 14px;\n  font-weight: 600;\n  padding: 6px 16px;\n}\n.btn[disabled] {\n  opacity: 0.6;\n  pointer-events: none;\n}\n\n.btn--primary {\n  background-color: var(--submit-background);\n  border-color: var(--submit-border);\n  color: var(--submit-foreground);\n}\n.btn--primary:hover {\n  background-color: var(--submit-background-hover);\n  color: var(--submit-foreground-hover);\n}\n.btn--primary:focus-visible {\n  outline: 1px auto var(--submit-outline-focus);\n}\n\n.btn--default {\n  background-color: var(--cancel-background);\n  color: var(--cancel-foreground);\n  font-weight: 500;\n}\n.btn--default:hover {\n  background-color: var(--cancel-background-hover);\n  color: var(--cancel-foreground-hover);\n}\n.btn--default:focus-visible {\n  outline: 1px auto var(--cancel-outline-focus);\n}\n\n.success-message {\n  background-color: var(--background);\n  border: var(--border);\n  border-radius: var(--border-radius);\n  box-shadow: var(--box-shadow);\n  font-weight: 600;\n  color: var(--success);\n  padding: 12px 24px;\n  line-height: 25px;\n  display: grid;\n  align-items: center;\n  grid-auto-flow: column;\n  gap: 6px;\n  cursor: default;\n}\n\n.success-icon path {\n  fill: var(--success);\n}\n`;\n\n  return style;\n}\n","/*\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\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { CLSMetric, ReportCallback, StopListening } from './types';\n\n/**\n * Calculates the [CLS](https://web.dev/cls/) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/cls/#layout-shift-score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (onReport: ReportCallback): StopListening | undefined => {\n  const metric = initMetric('CLS', 0);\n  let report: ReturnType<typeof bindReporter>;\n\n  let sessionValue = 0;\n  let sessionEntries: PerformanceEntry[] = [];\n\n  // const handleEntries = (entries: Metric['entries']) => {\n  const handleEntries = (entries: LayoutShift[]): void => {\n    entries.forEach(entry => {\n      // Only count layout shifts without recent user input.\n      if (!entry.hadRecentInput) {\n        const firstSessionEntry = sessionEntries[0];\n        const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\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 (\n          sessionValue &&\n          sessionEntries.length !== 0 &&\n          entry.startTime - lastSessionEntry.startTime < 1000 &&\n          entry.startTime - firstSessionEntry.startTime < 5000\n        ) {\n          sessionValue += entry.value;\n          sessionEntries.push(entry);\n        } else {\n          sessionValue = entry.value;\n          sessionEntries = [entry];\n        }\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  };\n\n  const po = observe('layout-shift', handleEntries);\n  if (po) {\n    report = bindReporter(onReport, metric);\n\n    const stopListening = (): void => {\n      handleEntries(po.takeRecords() as CLSMetric['entries']);\n      report(true);\n    };\n\n    onHidden(stopListening);\n\n    return stopListening;\n  }\n\n  return;\n};\n","/*\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\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';\nimport type { FIDMetric, PerformanceEventTiming, ReportCallback } from './types';\n\n/**\n * Calculates the [FID](https://web.dev/fid/) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nexport const onFID = (onReport: ReportCallback): void => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('FID');\n  // eslint-disable-next-line prefer-const\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntry = (entry: PerformanceEventTiming): void => {\n    // Only report if the page wasn't hidden prior to the first input.\n    if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n      metric.value = entry.processingStart - entry.startTime;\n      metric.entries.push(entry);\n      report(true);\n    }\n  };\n\n  const handleEntries = (entries: FIDMetric['entries']): void => {\n    (entries as PerformanceEventTiming[]).forEach(handleEntry);\n  };\n\n  const po = observe('first-input', handleEntries);\n  report = bindReporter(onReport, metric);\n\n  if (po) {\n    onHidden(() => {\n      handleEntries(po.takeRecords() as FIDMetric['entries']);\n      po.disconnect();\n    }, true);\n  }\n};\n","import type { Transaction } from '@sentry/core';\nimport type { Span, SpanContext } from '@sentry/types';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nexport function isMeasurementValue(value: unknown): value is number {\n  return typeof value === 'number' && isFinite(value);\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 *\n * Note: this will not be possible anymore in v8,\n * unless we do some special handling for browser here...\n */\nexport function _startChild(transaction: Transaction, { startTimestamp, ...ctx }: SpanContext): Span {\n  // eslint-disable-next-line deprecation/deprecation\n  if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.startTimestamp = startTimestamp;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return transaction.startChild({\n    startTimestamp,\n    ...ctx,\n  });\n}\n","/* eslint-disable max-lines */\nimport type { IdleTransaction, Transaction } from '@sentry/core';\nimport { getActiveTransaction, setMeasurement } from '@sentry/core';\nimport type { Measurements, SpanContext } from '@sentry/types';\nimport { browserPerformanceTimeOrigin, getComponentName, htmlTreeAsString, logger, parseUrl } from '@sentry/utils';\n\nimport { spanToJSON } from '@sentry/core';\nimport { DEBUG_BUILD } from '../../common/debug-build';\nimport {\n  addClsInstrumentationHandler,\n  addFidInstrumentationHandler,\n  addLcpInstrumentationHandler,\n  addPerformanceInstrumentationHandler,\n} from '../instrument';\nimport { WINDOW } from '../types';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher';\nimport type { NavigatorDeviceMemory, NavigatorNetworkInformation } from '../web-vitals/types';\nimport { _startChild, isMeasurementValue } from './utils';\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time: number): number {\n  return time / 1000;\n}\n\nfunction getBrowserPerformanceAPI(): Performance | undefined {\n  // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n  return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\nlet _performanceCursor: number = 0;\n\nlet _measurements: Measurements = {};\nlet _lcpEntry: LargestContentfulPaint | undefined;\nlet _clsEntry: LayoutShift | undefined;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nexport function startTrackingWebVitals(): () => void {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n    if (performance.mark) {\n      WINDOW.performance.mark('sentry-tracing-init');\n    }\n    const fidCallback = _trackFID();\n    const clsCallback = _trackCLS();\n    const lcpCallback = _trackLCP();\n\n    return (): void => {\n      fidCallback();\n      clsCallback();\n      lcpCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nexport function startTrackingLongTasks(): void {\n  addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n    for (const entry of entries) {\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = getActiveTransaction() as IdleTransaction | undefined;\n      if (!transaction) {\n        return;\n      }\n      const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n      const duration = msToSec(entry.duration);\n\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.startChild({\n        description: 'Main UI thread blocked',\n        op: 'ui.long-task',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: startTime,\n        endTimestamp: startTime + duration,\n      });\n    }\n  });\n}\n\n/**\n * Start tracking interaction events.\n */\nexport function startTrackingInteractions(): void {\n  addPerformanceInstrumentationHandler('event', ({ entries }) => {\n    for (const entry of entries) {\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = getActiveTransaction() as IdleTransaction | undefined;\n      if (!transaction) {\n        return;\n      }\n\n      if (entry.name === 'click') {\n        const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n        const duration = msToSec(entry.duration);\n\n        const span: SpanContext = {\n          description: htmlTreeAsString(entry.target),\n          op: `ui.interaction.${entry.name}`,\n          origin: 'auto.ui.browser.metrics',\n          startTimestamp: startTime,\n          endTimestamp: startTime + duration,\n        };\n\n        const componentName = getComponentName(entry.target);\n        if (componentName) {\n          span.attributes = { 'ui.component_name': componentName };\n        }\n\n        // eslint-disable-next-line deprecation/deprecation\n        transaction.startChild(span);\n      }\n    }\n  });\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS(): () => void {\n  return addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding CLS');\n    _measurements['cls'] = { value: metric.value, unit: '' };\n    _clsEntry = entry as LayoutShift;\n  }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(): () => void {\n  return addLcpInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding LCP');\n    _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n    _lcpEntry = entry as LargestContentfulPaint;\n  }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID(): () => void {\n  return addFidInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    const timeOrigin = msToSec(browserPerformanceTimeOrigin as number);\n    const startTime = msToSec(entry.startTime);\n    DEBUG_BUILD && logger.log('[Measurements] Adding FID');\n    _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n    _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n  });\n}\n\n/** Add performance related spans to a transaction */\nexport function addPerformanceEntries(transaction: Transaction): void {\n  const performance = getBrowserPerformanceAPI();\n  if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n    // Gatekeeper if performance API not available\n    return;\n  }\n\n  DEBUG_BUILD && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n  const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n  const performanceEntries = performance.getEntries();\n\n  let responseStartTimestamp: number | undefined;\n  let requestStartTimestamp: number | undefined;\n\n  const { op, start_timestamp: transactionStartTime } = spanToJSON(transaction);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  performanceEntries.slice(_performanceCursor).forEach((entry: Record<string, any>) => {\n    const startTime = msToSec(entry.startTime);\n    const duration = msToSec(entry.duration);\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (transaction.op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n      return;\n    }\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        _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n        // capture web vitals\n        const firstHidden = getVisibilityWatcher();\n        // Only report if the page wasn't hidden prior to the web vital.\n        const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n        if (entry.name === 'first-paint' && shouldRecord) {\n          DEBUG_BUILD && logger.log('[Measurements] Adding FP');\n          _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        if (entry.name === 'first-contentful-paint' && shouldRecord) {\n          DEBUG_BUILD && logger.log('[Measurements] Adding FCP');\n          _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        break;\n      }\n      case 'resource': {\n        _addResourceSpans(transaction, entry, entry.name as string, startTime, duration, timeOrigin);\n        break;\n      }\n      default:\n      // Ignore other entry types.\n    }\n  });\n\n  _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n  _trackNavigator(transaction);\n\n  // Measurements are only available for pageload transactions\n  if (op === 'pageload') {\n    _addTtfbToMeasurements(_measurements, responseStartTimestamp, requestStartTimestamp, transactionStartTime);\n\n    ['fcp', 'fp', 'lcp'].forEach(name => {\n      if (!_measurements[name] || !transactionStartTime || timeOrigin >= transactionStartTime) {\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      const oldValue = _measurements[name].value;\n      const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n      // normalizedValue should be in milliseconds\n      const normalizedValue = Math.abs((measurementTimestamp - transactionStartTime) * 1000);\n      const delta = normalizedValue - oldValue;\n\n      DEBUG_BUILD && logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n      _measurements[name].value = normalizedValue;\n    });\n\n    const fidMark = _measurements['mark.fid'];\n    if (fidMark && _measurements['fid']) {\n      // create span for FID\n      _startChild(transaction, {\n        description: 'first input delay',\n        endTimestamp: fidMark.value + msToSec(_measurements['fid'].value),\n        op: 'ui.action',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: fidMark.value,\n      });\n\n      // Delete mark.fid as we don't want it to be part of final payload\n      delete _measurements['mark.fid'];\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 _measurements)) {\n      delete _measurements.cls;\n    }\n\n    Object.keys(_measurements).forEach(measurementName => {\n      setMeasurement(measurementName, _measurements[measurementName].value, _measurements[measurementName].unit);\n    });\n\n    _tagMetricInfo(transaction);\n  }\n\n  _lcpEntry = undefined;\n  _clsEntry = undefined;\n  _measurements = {};\n}\n\n/** Create measure related spans */\nexport function _addMeasureSpans(\n  transaction: Transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry: Record<string, any>,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): number {\n  const measureStartTimestamp = timeOrigin + startTime;\n  const measureEndTimestamp = measureStartTimestamp + duration;\n\n  _startChild(transaction, {\n    description: entry.name as string,\n    endTimestamp: measureEndTimestamp,\n    op: entry.entryType as string,\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp: measureStartTimestamp,\n  });\n\n  return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n  ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(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\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n  transaction: Transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry: Record<string, any>,\n  event: string,\n  timeOrigin: number,\n  description?: string,\n  eventEnd?: string,\n): void {\n  const end = eventEnd ? (entry[eventEnd] as number | undefined) : (entry[`${event}End`] as number | undefined);\n  const start = entry[`${event}Start`] as number | undefined;\n  if (!start || !end) {\n    return;\n  }\n  _startChild(transaction, {\n    op: 'browser',\n    origin: 'auto.browser.browser.metrics',\n    description: description || event,\n    startTimestamp: timeOrigin + msToSec(start),\n    endTimestamp: timeOrigin + msToSec(end),\n  });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n  if (entry.responseEnd) {\n    // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n    // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n    // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n    // these spans when the responseEnd value is available. The backend (Relay) would drop the entire transaction if it contained faulty spans.\n    _startChild(transaction, {\n      op: 'browser',\n      origin: 'auto.browser.browser.metrics',\n      description: 'request',\n      startTimestamp: timeOrigin + msToSec(entry.requestStart as number),\n      endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n    });\n\n    _startChild(transaction, {\n      op: 'browser',\n      origin: 'auto.browser.browser.metrics',\n      description: 'response',\n      startTimestamp: timeOrigin + msToSec(entry.responseStart as number),\n      endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n    });\n  }\n}\n\nexport interface ResourceEntry extends Record<string, unknown> {\n  initiatorType?: string;\n  transferSize?: number;\n  encodedBodySize?: number;\n  decodedBodySize?: number;\n  renderBlockingStatus?: string;\n}\n\n/** Create resource-related spans */\nexport function _addResourceSpans(\n  transaction: Transaction,\n  entry: ResourceEntry,\n  resourceUrl: string,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): void {\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\n  const parsedUrl = parseUrl(resourceUrl);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const data: Record<string, any> = {};\n  setResourceEntrySizeData(data, entry, 'transferSize', 'http.response_transfer_size');\n  setResourceEntrySizeData(data, entry, 'encodedBodySize', 'http.response_content_length');\n  setResourceEntrySizeData(data, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n  if ('renderBlockingStatus' in entry) {\n    data['resource.render_blocking_status'] = entry.renderBlockingStatus;\n  }\n  if (parsedUrl.protocol) {\n    data['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n  }\n\n  if (parsedUrl.host) {\n    data['server.address'] = parsedUrl.host;\n  }\n\n  data['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n  const startTimestamp = timeOrigin + startTime;\n  const endTimestamp = startTimestamp + duration;\n\n  _startChild(transaction, {\n    description: resourceUrl.replace(WINDOW.location.origin, ''),\n    endTimestamp,\n    op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp,\n    data,\n  });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(transaction: Transaction): void {\n  const navigator = WINDOW.navigator as null | (Navigator & NavigatorNetworkInformation & NavigatorDeviceMemory);\n  if (!navigator) {\n    return;\n  }\n\n  // track network connectivity\n  const connection = navigator.connection;\n  if (connection) {\n    if (connection.effectiveType) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('effectiveConnectionType', connection.effectiveType);\n    }\n\n    if (connection.type) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('connectionType', connection.type);\n    }\n\n    if (isMeasurementValue(connection.rtt)) {\n      _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n    }\n  }\n\n  if (isMeasurementValue(navigator.deviceMemory)) {\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n  }\n\n  if (isMeasurementValue(navigator.hardwareConcurrency)) {\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n  }\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction _tagMetricInfo(transaction: Transaction): void {\n  if (_lcpEntry) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding LCP Data');\n\n    // Capture Properties of the LCP element that contributes to the LCP.\n\n    if (_lcpEntry.element) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n    }\n\n    if (_lcpEntry.id) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.id', _lcpEntry.id);\n    }\n\n    if (_lcpEntry.url) {\n      // Trim URL to the first 200 characters.\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n    }\n\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('lcp.size', _lcpEntry.size);\n  }\n\n  // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n  if (_clsEntry && _clsEntry.sources) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding CLS Data');\n    _clsEntry.sources.forEach((source, index) =>\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n    );\n  }\n}\n\nfunction setResourceEntrySizeData(\n  data: Record<string, unknown>,\n  entry: ResourceEntry,\n  key: keyof Pick<ResourceEntry, 'transferSize' | 'encodedBodySize' | 'decodedBodySize'>,\n  dataKey: 'http.response_transfer_size' | 'http.response_content_length' | 'http.decoded_response_content_length',\n): void {\n  const entryVal = entry[key];\n  if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n    data[dataKey] = entryVal;\n  }\n}\n\n/**\n * Add ttfb information to measurements\n *\n * Exported for tests\n */\nexport function _addTtfbToMeasurements(\n  _measurements: Measurements,\n  responseStartTimestamp: number | undefined,\n  requestStartTimestamp: number | undefined,\n  transactionStartTime: number | undefined,\n): void {\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' && transactionStartTime) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n    _measurements['ttfb'] = {\n      // As per https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStart,\n      // responseStart can be 0 if the request is coming straight from the cache.\n      // This might lead us to calculate a negative ttfb if we don't use Math.max here.\n      //\n      // This logic is the same as what is in the web-vitals library to calculate ttfb\n      // https://github.com/GoogleChrome/web-vitals/blob/2301de5015e82b09925238a228a0893635854587/src/onTTFB.ts#L92\n      // TODO(abhi): We should use the web-vitals library instead of this custom calculation.\n      value: Math.max(responseStartTimestamp - transactionStartTime, 0) * 1000,\n      unit: 'millisecond',\n    };\n\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      _measurements['ttfb.requestTime'] = {\n        value: (responseStartTimestamp - requestStartTimestamp) * 1000,\n        unit: 'millisecond',\n      };\n    }\n  }\n}\n","/* eslint-disable max-lines */\nimport {\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n  getRootSpan,\n  hasTracingEnabled,\n  spanToJSON,\n  spanToTraceHeader,\n  startInactiveSpan,\n} from '@sentry/core';\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, Span } from '@sentry/types';\nimport {\n  BAGGAGE_HEADER_NAME,\n  SENTRY_XHR_DATA_KEY,\n  addFetchInstrumentationHandler,\n  addXhrInstrumentationHandler,\n  browserPerformanceTimeOrigin,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  stringMatchesSomePattern,\n} from '@sentry/utils';\n\nimport { instrumentFetchRequest } from '../common/fetch';\nimport { addPerformanceInstrumentationHandler } from './instrument';\n\nexport const DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^\\/(?!\\/)/];\n\n/** Options for Request Instrumentation */\nexport interface RequestInstrumentationOptions {\n  /**\n   * @deprecated Will be removed in v8.\n   * Use `shouldCreateSpanForRequest` to control span creation and `tracePropagationTargets` to control\n   * trace header attachment.\n   */\n  tracingOrigins: Array<string | RegExp>;\n\n  /**\n   * List of strings and/or regexes used to determine which outgoing requests will have `sentry-trace` and `baggage`\n   * headers attached.\n   *\n   * @deprecated Use the top-level `tracePropagationTargets` option in `Sentry.init` instead.\n   * This option will be removed in v8.\n   *\n   * Default: ['localhost', /^\\//] @see {DEFAULT_TRACE_PROPAGATION_TARGETS}\n   */\n  tracePropagationTargets: Array<string | RegExp>;\n\n  /**\n   * Flag to disable patching all together for fetch requests.\n   *\n   * Default: true\n   */\n  traceFetch: boolean;\n\n  /**\n   * Flag to disable patching all together for xhr requests.\n   *\n   * Default: true\n   */\n  traceXHR: boolean;\n\n  /**\n   * If true, Sentry will capture http timings and add them to the corresponding http spans.\n   *\n   * Default: true\n   */\n  enableHTTPTimings: boolean;\n\n  /**\n   * This function will be called before creating a span for a request with the given url.\n   * Return false if you don't want a span for the given url.\n   *\n   * Default: (url: string) => true\n   */\n  shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\nexport const defaultRequestInstrumentationOptions: RequestInstrumentationOptions = {\n  traceFetch: true,\n  traceXHR: true,\n  enableHTTPTimings: true,\n  // TODO (v8): Remove this property\n  tracingOrigins: DEFAULT_TRACE_PROPAGATION_TARGETS,\n  tracePropagationTargets: DEFAULT_TRACE_PROPAGATION_TARGETS,\n};\n\n/** Registers span creators for xhr and fetch requests  */\nexport function instrumentOutgoingRequests(_options?: Partial<RequestInstrumentationOptions>): void {\n  const {\n    traceFetch,\n    traceXHR,\n    // eslint-disable-next-line deprecation/deprecation\n    tracePropagationTargets,\n    // eslint-disable-next-line deprecation/deprecation\n    tracingOrigins,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n  } = {\n    traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n    traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n    ..._options,\n  };\n\n  const shouldCreateSpan =\n    typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_: string) => true;\n\n  // TODO(v8) Remove tracingOrigins here\n  // The only reason we're passing it in here is because this instrumentOutgoingRequests function is publicly exported\n  // and we don't want to break the API. We can remove it in v8.\n  const shouldAttachHeadersWithTargets = (url: string): boolean =>\n    shouldAttachHeaders(url, tracePropagationTargets || tracingOrigins);\n\n  const spans: Record<string, Span> = {};\n\n  if (traceFetch) {\n    addFetchInstrumentationHandler(handlerData => {\n      const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n\n  if (traceXHR) {\n    addXhrInstrumentationHandler(handlerData => {\n      const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n}\n\nfunction isPerformanceResourceTiming(entry: PerformanceEntry): entry is PerformanceResourceTiming {\n  return (\n    entry.entryType === 'resource' &&\n    'initiatorType' in entry &&\n    typeof (entry as PerformanceResourceTiming).nextHopProtocol === 'string' &&\n    (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n  );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span: Span): void {\n  const { url } = spanToJSON(span).data || {};\n\n  if (!url || typeof url !== 'string') {\n    return;\n  }\n\n  const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n    entries.forEach(entry => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        const spanData = resourceTimingEntryToSpanData(entry);\n        spanData.forEach(data => span.setAttribute(...data));\n        // In the next tick, clean this handler up\n        // We have to wait here because otherwise this cleans itself up before it is fully done\n        setTimeout(cleanup);\n      }\n    });\n  });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nexport function extractNetworkProtocol(nextHopProtocol: string): { name: string; version: string } {\n  let name = 'unknown';\n  let version = 'unknown';\n  let _name = '';\n  for (const char of nextHopProtocol) {\n    // http/1.1 etc.\n    if (char === '/') {\n      [name, version] = nextHopProtocol.split('/');\n      break;\n    }\n    // h2, h3 etc.\n    if (!isNaN(Number(char))) {\n      name = _name === 'h' ? 'http' : _name;\n      version = nextHopProtocol.split(_name)[1];\n      break;\n    }\n    _name += char;\n  }\n  if (_name === nextHopProtocol) {\n    // webrtc, ftp, etc.\n    name = _name;\n  }\n  return { name, version };\n}\n\nfunction getAbsoluteTime(time: number = 0): number {\n  return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming: PerformanceResourceTiming): [string, string | number][] {\n  const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n  const timingSpanData: [string, string | number][] = [];\n\n  timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n  if (!browserPerformanceTimeOrigin) {\n    return timingSpanData;\n  }\n  return [\n    ...timingSpanData,\n    ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n    ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n    ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n    ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n    ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n    ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n    ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n    ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n    ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n    ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n  ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * This was extracted from `instrumentOutgoingRequests` to make it easier to test shouldAttachHeaders.\n * We only export this fuction for testing purposes.\n */\nexport function shouldAttachHeaders(url: string, tracePropagationTargets: (string | RegExp)[] | undefined): boolean {\n  return stringMatchesSomePattern(url, tracePropagationTargets || DEFAULT_TRACE_PROPAGATION_TARGETS);\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\n// eslint-disable-next-line complexity\nexport function xhrCallback(\n  handlerData: HandlerDataXhr,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n): Span | undefined {\n  const xhr = handlerData.xhr;\n  const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!hasTracingEnabled() || !xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url);\n\n  // check first if the request has finished and is tracked by an existing span which should now end\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = xhr.__sentry_xhr_span_id__;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span && sentryXhrData.status_code !== undefined) {\n      span.setHttpStatus(sentryXhrData.status_code);\n      span.end();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const scope = getCurrentScope();\n\n  const span = shouldCreateSpanResult\n    ? startInactiveSpan({\n        attributes: {\n          type: 'xhr',\n          'http.method': sentryXhrData.method,\n          url: sentryXhrData.url,\n        },\n        name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n        op: 'http.client',\n        origin: 'auto.http.browser',\n      })\n    : undefined;\n\n  if (span) {\n    xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n    spans[xhr.__sentry_xhr_span_id__] = span;\n  }\n\n  if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url)) {\n    if (span) {\n      const transaction = span && getRootSpan(span);\n      const dynamicSamplingContext = transaction && getDynamicSamplingContextFromSpan(transaction);\n      const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n      setHeaderOnXhr(xhr, spanToTraceHeader(span), sentryBaggageHeader);\n    } else {\n      const client = getClient();\n      const { traceId, sampled, dsc } = scope.getPropagationContext();\n      const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled);\n      const dynamicSamplingContext =\n        dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined);\n      const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n      setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n    }\n  }\n\n  return span;\n}\n\nfunction setHeaderOnXhr(\n  xhr: SentryWrappedXMLHttpRequest,\n  sentryTraceHeader: string,\n  sentryBaggageHeader: string | undefined,\n): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    xhr.setRequestHeader!('sentry-trace', sentryTraceHeader);\n    if (sentryBaggageHeader) {\n      // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n      // We can therefore simply set a baggage header without checking what was there before\n      // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      xhr.setRequestHeader!(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n  } catch (_) {\n    // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n  }\n}\n","import {\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n  getRootSpan,\n  hasTracingEnabled,\n  spanToTraceHeader,\n  startInactiveSpan,\n} from '@sentry/core';\nimport type { Client, HandlerDataFetch, Scope, Span, SpanOrigin } from '@sentry/types';\nimport {\n  BAGGAGE_HEADER_NAME,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  isInstanceOf,\n} from '@sentry/utils';\n\ntype PolymorphicRequestHeaders =\n  | Record<string, string | undefined>\n  | Array<[string, string]>\n  // the below is not preicsely the Header type used in Request, but it'll pass duck-typing\n  | {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      [key: string]: any;\n      append: (key: string, value: string) => void;\n      get: (key: string) => string | null | undefined;\n    };\n\n/**\n * Create and track fetch request spans for usage in combination with `addInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function instrumentFetchRequest(\n  handlerData: HandlerDataFetch,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n  spanOrigin: SpanOrigin = 'auto.http.browser',\n): Span | undefined {\n  if (!hasTracingEnabled() || !handlerData.fetchData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url);\n\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = handlerData.fetchData.__span;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      if (handlerData.response) {\n        span.setHttpStatus(handlerData.response.status);\n\n        const contentLength =\n          handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n        if (contentLength) {\n          const contentLengthNum = parseInt(contentLength);\n          if (contentLengthNum > 0) {\n            span.setAttribute('http.response_content_length', contentLengthNum);\n          }\n        }\n      } else if (handlerData.error) {\n        span.setStatus('internal_error');\n      }\n      span.end();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const scope = getCurrentScope();\n  const client = getClient();\n\n  const { method, url } = handlerData.fetchData;\n\n  const span = shouldCreateSpanResult\n    ? startInactiveSpan({\n        attributes: {\n          url,\n          type: 'fetch',\n          'http.method': method,\n        },\n        name: `${method} ${url}`,\n        op: 'http.client',\n        origin: spanOrigin,\n      })\n    : undefined;\n\n  if (span) {\n    handlerData.fetchData.__span = span.spanContext().spanId;\n    spans[span.spanContext().spanId] = span;\n  }\n\n  if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n    const request: string | Request = handlerData.args[0];\n\n    // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n    handlerData.args[1] = handlerData.args[1] || {};\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const options: { [key: string]: any } = handlerData.args[1];\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n    options.headers = addTracingHeadersToFetchRequest(request, client, scope, options, span);\n  }\n\n  return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nexport function addTracingHeadersToFetchRequest(\n  request: string | unknown, // unknown is actually type Request but we can't export DOM types from this package,\n  client: Client,\n  scope: Scope,\n  options: {\n    headers?:\n      | {\n          [key: string]: string[] | string | undefined;\n        }\n      | PolymorphicRequestHeaders;\n  },\n  requestSpan?: Span,\n): PolymorphicRequestHeaders | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  const span = requestSpan || scope.getSpan();\n\n  const transaction = span && getRootSpan(span);\n\n  const { traceId, sampled, dsc } = scope.getPropagationContext();\n\n  const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, undefined, sampled);\n  const dynamicSamplingContext = transaction\n    ? getDynamicSamplingContextFromSpan(transaction)\n    : dsc\n      ? dsc\n      : getDynamicSamplingContextFromClient(traceId, client, scope);\n\n  const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n\n  const headers =\n    options.headers ||\n    (typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : undefined);\n\n  if (!headers) {\n    return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n  } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n    const newHeaders = new Headers(headers as Headers);\n\n    newHeaders.append('sentry-trace', sentryTraceHeader);\n\n    if (sentryBaggageHeader) {\n      // If the same header is appended multiple times the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n\n    return newHeaders as PolymorphicRequestHeaders;\n  } else if (Array.isArray(headers)) {\n    const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n    if (sentryBaggageHeader) {\n      // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n    }\n\n    return newHeaders as PolymorphicRequestHeaders;\n  } else {\n    const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n    const newBaggageHeaders: string[] = [];\n\n    if (Array.isArray(existingBaggageHeader)) {\n      newBaggageHeaders.push(...existingBaggageHeader);\n    } else if (existingBaggageHeader) {\n      newBaggageHeaders.push(existingBaggageHeader);\n    }\n\n    if (sentryBaggageHeader) {\n      newBaggageHeaders.push(sentryBaggageHeader);\n    }\n\n    return {\n      ...(headers as Exclude<typeof headers, Headers>),\n      'sentry-trace': sentryTraceHeader,\n      baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n    };\n  }\n}\n","/* eslint-disable max-lines */\nimport type { Hub, IdleTransaction } from '@sentry/core';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  TRACING_DEFAULTS,\n  addTracingExtensions,\n  getActiveTransaction,\n  spanIsSampled,\n  spanToJSON,\n  startIdleTransaction,\n} from '@sentry/core';\nimport type { EventProcessor, Integration, Transaction, TransactionContext, TransactionSource } from '@sentry/types';\nimport { getDomElement, logger, tracingContextFromHeaders } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport {\n  addPerformanceEntries,\n  startTrackingInteractions,\n  startTrackingLongTasks,\n  startTrackingWebVitals,\n} from './metrics';\nimport type { RequestInstrumentationOptions } from './request';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';\nimport { instrumentRoutingWithDefaults } from './router';\nimport { WINDOW } from './types';\n\nexport const BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\nexport interface BrowserTracingOptions extends RequestInstrumentationOptions {\n  /**\n   * The time to wait in ms until the transaction will be finished during an idle state. An idle state is defined\n   * by a moment where there are no in-progress spans.\n   *\n   * The transaction will use the end timestamp of the last finished span as the endtime for the transaction.\n   * If there are still active spans when this the `idleTimeout` is set, the `idleTimeout` will get reset.\n   * Time is in ms.\n   *\n   * Default: 1000\n   */\n  idleTimeout: number;\n\n  /**\n   * The max duration for a transaction. If a transaction duration hits the `finalTimeout` value, it\n   * will be finished.\n   * Time is in ms.\n   *\n   * Default: 30000\n   */\n  finalTimeout: number;\n\n  /**\n   * The heartbeat interval. If no new spans are started or open spans are finished within 3 heartbeats,\n   * the transaction will be finished.\n   * Time is in ms.\n   *\n   * Default: 5000\n   */\n  heartbeatInterval: number;\n\n  /**\n   * Flag to enable/disable creation of `navigation` transaction on history changes.\n   *\n   * Default: true\n   */\n  startTransactionOnLocationChange: boolean;\n\n  /**\n   * Flag to enable/disable creation of `pageload` transaction on first pageload.\n   *\n   * Default: true\n   */\n  startTransactionOnPageLoad: boolean;\n\n  /**\n   * Flag Transactions where tabs moved to background with \"cancelled\". Browser background tab timing is\n   * not suited towards doing precise measurements of operations. By default, we recommend that this option\n   * be enabled as background transactions can mess up your statistics in nondeterministic ways.\n   *\n   * Default: true\n   */\n  markBackgroundTransactions: boolean;\n\n  /**\n   * If true, Sentry will capture long tasks and add them to the corresponding transaction.\n   *\n   * Default: true\n   */\n  enableLongTask: boolean;\n\n  /**\n   * _metricOptions allows the user to send options to change how metrics are collected.\n   *\n   * _metricOptions is currently experimental.\n   *\n   * Default: undefined\n   */\n  _metricOptions?: Partial<{\n    /**\n     * @deprecated This property no longer has any effect and will be removed in v8.\n     */\n    _reportAllChanges: boolean;\n  }>;\n\n  /**\n   * _experiments allows the user to send options to define how this integration works.\n   * Note that the `enableLongTask` options is deprecated in favor of the option at the top level, and will be removed in v8.\n   *\n   * TODO (v8): Remove enableLongTask\n   *\n   * Default: undefined\n   */\n  _experiments: Partial<{\n    enableLongTask: boolean;\n    enableInteractions: boolean;\n    onStartRouteTransaction: (t: Transaction | undefined, ctx: TransactionContext, getCurrentHub: () => Hub) => void;\n  }>;\n\n  /**\n   * beforeNavigate is called before a pageload/navigation transaction is created and allows users to modify transaction\n   * context data, or drop the transaction entirely (by setting `sampled = false` in the context).\n   *\n   * Note: For legacy reasons, transactions can also be dropped by returning `undefined`.\n   *\n   * @param context: The context data which will be passed to `startTransaction` by default\n   *\n   * @returns A (potentially) modified context object, with `sampled = false` if the transaction should be dropped.\n   */\n  beforeNavigate?(this: void, context: TransactionContext): TransactionContext | undefined;\n\n  /**\n   * Instrumentation that creates routing change transactions. By default creates\n   * pageload and navigation transactions.\n   */\n  routingInstrumentation<T extends Transaction>(\n    this: void,\n    customStartTransaction: (context: TransactionContext) => T | undefined,\n    startTransactionOnPageLoad?: boolean,\n    startTransactionOnLocationChange?: boolean,\n  ): void;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS: BrowserTracingOptions = {\n  ...TRACING_DEFAULTS,\n  markBackgroundTransactions: true,\n  routingInstrumentation: instrumentRoutingWithDefaults,\n  startTransactionOnLocationChange: true,\n  startTransactionOnPageLoad: true,\n  enableLongTask: true,\n  _experiments: {},\n  ...defaultRequestInstrumentationOptions,\n};\n\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 */\nexport class BrowserTracing implements Integration {\n  // This class currently doesn't have a static `id` field like the other integration classes, because it prevented\n  // @sentry/tracing from being treeshaken. Tree shakers do not like static fields, because they behave like side effects.\n  // TODO: Come up with a better plan, than using static fields on integration classes, and use that plan on all\n  // integrations.\n\n  /** Browser Tracing integration options */\n  public options: BrowserTracingOptions;\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private _getCurrentHub?: () => Hub;\n\n  private _latestRouteName?: string;\n  private _latestRouteSource?: TransactionSource;\n\n  private _collectWebVitals: () => void;\n\n  private _hasSetTracePropagationTargets: boolean;\n\n  public constructor(_options?: Partial<BrowserTracingOptions>) {\n    this.name = BROWSER_TRACING_INTEGRATION_ID;\n    this._hasSetTracePropagationTargets = false;\n\n    addTracingExtensions();\n\n    if (DEBUG_BUILD) {\n      this._hasSetTracePropagationTargets = !!(\n        _options &&\n        // eslint-disable-next-line deprecation/deprecation\n        (_options.tracePropagationTargets || _options.tracingOrigins)\n      );\n    }\n\n    this.options = {\n      ...DEFAULT_BROWSER_TRACING_OPTIONS,\n      ..._options,\n    };\n\n    // Special case: enableLongTask can be set in _experiments\n    // TODO (v8): Remove this in v8\n    if (this.options._experiments.enableLongTask !== undefined) {\n      this.options.enableLongTask = this.options._experiments.enableLongTask;\n    }\n\n    // TODO (v8): remove this block after tracingOrigins is removed\n    // Set tracePropagationTargets to tracingOrigins if specified by the user\n    // In case both are specified, tracePropagationTargets takes precedence\n    // eslint-disable-next-line deprecation/deprecation\n    if (_options && !_options.tracePropagationTargets && _options.tracingOrigins) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.options.tracePropagationTargets = _options.tracingOrigins;\n    }\n\n    this._collectWebVitals = startTrackingWebVitals();\n    if (this.options.enableLongTask) {\n      startTrackingLongTasks();\n    }\n    if (this.options._experiments.enableInteractions) {\n      startTrackingInteractions();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    this._getCurrentHub = getCurrentHub;\n    const hub = getCurrentHub();\n    // eslint-disable-next-line deprecation/deprecation\n    const client = hub.getClient();\n    const clientOptions = client && client.getOptions();\n\n    const {\n      routingInstrumentation: instrumentRouting,\n      startTransactionOnLocationChange,\n      startTransactionOnPageLoad,\n      markBackgroundTransactions,\n      traceFetch,\n      traceXHR,\n      shouldCreateSpanForRequest,\n      enableHTTPTimings,\n      _experiments,\n    } = this.options;\n\n    const clientOptionsTracePropagationTargets = clientOptions && clientOptions.tracePropagationTargets;\n    // There are three ways to configure tracePropagationTargets:\n    // 1. via top level client option `tracePropagationTargets`\n    // 2. via BrowserTracing option `tracePropagationTargets`\n    // 3. via BrowserTracing option `tracingOrigins` (deprecated)\n    //\n    // To avoid confusion, favour top level client option `tracePropagationTargets`, and fallback to\n    // BrowserTracing option `tracePropagationTargets` and then `tracingOrigins` (deprecated).\n    // This is done as it minimizes bundle size (we don't have to have undefined checks).\n    //\n    // If both 1 and either one of 2 or 3 are set (from above), we log out a warning.\n    // eslint-disable-next-line deprecation/deprecation\n    const tracePropagationTargets = clientOptionsTracePropagationTargets || this.options.tracePropagationTargets;\n    if (DEBUG_BUILD && this._hasSetTracePropagationTargets && clientOptionsTracePropagationTargets) {\n      logger.warn(\n        '[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',\n      );\n    }\n\n    instrumentRouting(\n      (context: TransactionContext) => {\n        const transaction = this._createRouteTransaction(context);\n\n        this.options._experiments.onStartRouteTransaction &&\n          this.options._experiments.onStartRouteTransaction(transaction, context, getCurrentHub);\n\n        return transaction;\n      },\n      startTransactionOnPageLoad,\n      startTransactionOnLocationChange,\n    );\n\n    if (markBackgroundTransactions) {\n      registerBackgroundTabDetection();\n    }\n\n    if (_experiments.enableInteractions) {\n      this._registerInteractionListener();\n    }\n\n    instrumentOutgoingRequests({\n      traceFetch,\n      traceXHR,\n      tracePropagationTargets,\n      shouldCreateSpanForRequest,\n      enableHTTPTimings,\n    });\n  }\n\n  /** Create routing idle transaction. */\n  private _createRouteTransaction(context: TransactionContext): Transaction | undefined {\n    if (!this._getCurrentHub) {\n      DEBUG_BUILD &&\n        logger.warn(`[Tracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`);\n      return undefined;\n    }\n\n    const hub = this._getCurrentHub();\n\n    const { beforeNavigate, idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n\n    const isPageloadTransaction = context.op === 'pageload';\n\n    const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n    const baggage = isPageloadTransaction ? getMetaContent('baggage') : '';\n    const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n      sentryTrace,\n      baggage,\n    );\n\n    const expandedContext: TransactionContext = {\n      ...context,\n      ...traceparentData,\n      metadata: {\n        // eslint-disable-next-line deprecation/deprecation\n        ...context.metadata,\n        dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,\n      },\n      trimEnd: true,\n    };\n\n    const modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n\n    // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n    // from being sent to Sentry).\n    const finalContext = modifiedContext === undefined ? { ...expandedContext, sampled: false } : modifiedContext;\n\n    // If `beforeNavigate` set a custom name, record that fact\n    // eslint-disable-next-line deprecation/deprecation\n    finalContext.metadata =\n      finalContext.name !== expandedContext.name\n        ? // eslint-disable-next-line deprecation/deprecation\n          { ...finalContext.metadata, source: 'custom' }\n        : // eslint-disable-next-line deprecation/deprecation\n          finalContext.metadata;\n\n    this._latestRouteName = finalContext.name;\n\n    // eslint-disable-next-line deprecation/deprecation\n    const sourceFromData = context.data && context.data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n    // eslint-disable-next-line deprecation/deprecation\n    const sourceFromMetadata = finalContext.metadata && finalContext.metadata.source;\n\n    this._latestRouteSource = sourceFromData || sourceFromMetadata;\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (finalContext.sampled === false) {\n      DEBUG_BUILD && logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n    }\n\n    DEBUG_BUILD && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n    const { location } = WINDOW;\n\n    const idleTransaction = startIdleTransaction(\n      hub,\n      finalContext,\n      idleTimeout,\n      finalTimeout,\n      true,\n      { location }, // for use in the tracesSampler\n      heartbeatInterval,\n      isPageloadTransaction, // should wait for finish signal if it's a pageload transaction\n    );\n\n    if (isPageloadTransaction) {\n      WINDOW.document.addEventListener('readystatechange', () => {\n        if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n          idleTransaction.sendAutoFinishSignal();\n        }\n      });\n\n      if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n        idleTransaction.sendAutoFinishSignal();\n      }\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = hub.getScope();\n\n    // If it's a pageload and there is a meta tag set\n    // use the traceparentData as the propagation context\n    if (isPageloadTransaction && traceparentData) {\n      scope.setPropagationContext(propagationContext);\n    } else {\n      // Navigation transactions should set a new propagation context based on the\n      // created idle transaction.\n      scope.setPropagationContext({\n        traceId: idleTransaction.spanContext().traceId,\n        spanId: idleTransaction.spanContext().spanId,\n        parentSpanId: spanToJSON(idleTransaction).parent_span_id,\n        sampled: spanIsSampled(idleTransaction),\n      });\n    }\n\n    idleTransaction.registerBeforeFinishCallback(transaction => {\n      this._collectWebVitals();\n      addPerformanceEntries(transaction);\n    });\n\n    return idleTransaction as Transaction;\n  }\n\n  /** Start listener for interaction transactions */\n  private _registerInteractionListener(): void {\n    let inflightInteractionTransaction: IdleTransaction | undefined;\n    const registerInteractionTransaction = (): void => {\n      const { idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n      const op = 'ui.action.click';\n\n      // eslint-disable-next-line deprecation/deprecation\n      const currentTransaction = getActiveTransaction();\n      if (currentTransaction && currentTransaction.op && ['navigation', 'pageload'].includes(currentTransaction.op)) {\n        DEBUG_BUILD &&\n          logger.warn(\n            `[Tracing] Did not create ${op} transaction because a pageload or navigation transaction is in progress.`,\n          );\n        return undefined;\n      }\n\n      if (inflightInteractionTransaction) {\n        inflightInteractionTransaction.setFinishReason('interactionInterrupted');\n        inflightInteractionTransaction.end();\n        inflightInteractionTransaction = undefined;\n      }\n\n      if (!this._getCurrentHub) {\n        DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _getCurrentHub is invalid.`);\n        return undefined;\n      }\n\n      if (!this._latestRouteName) {\n        DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n        return undefined;\n      }\n\n      const hub = this._getCurrentHub();\n      const { location } = WINDOW;\n\n      const context: TransactionContext = {\n        name: this._latestRouteName,\n        op,\n        trimEnd: true,\n        data: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRouteSource || 'url',\n        },\n      };\n\n      inflightInteractionTransaction = startIdleTransaction(\n        hub,\n        context,\n        idleTimeout,\n        finalTimeout,\n        true,\n        { location }, // for use in the tracesSampler\n        heartbeatInterval,\n      );\n    };\n\n    ['click'].forEach(type => {\n      addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n    });\n  }\n}\n\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName: string): string | undefined {\n  // Can't specify generic to `getDomElement` because tracing can be used\n  // in a variety of environments, have to disable `no-unsafe-member-access`\n  // as a result.\n  const metaTag = getDomElement(`meta[name=${metaName}]`);\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n","import type { Transaction, TransactionContext } from '@sentry/types';\nimport { addHistoryInstrumentationHandler, browserPerformanceTimeOrigin, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { WINDOW } from './types';\n\n/**\n * Default function implementing pageload and navigation transactions\n */\nexport function instrumentRoutingWithDefaults<T extends Transaction>(\n  customStartTransaction: (context: TransactionContext) => T | undefined,\n  startTransactionOnPageLoad: boolean = true,\n  startTransactionOnLocationChange: boolean = true,\n): void {\n  if (!WINDOW || !WINDOW.location) {\n    DEBUG_BUILD && logger.warn('Could not initialize routing instrumentation due to invalid location');\n    return;\n  }\n\n  let startingUrl: string | undefined = WINDOW.location.href;\n\n  let activeTransaction: T | undefined;\n  if (startTransactionOnPageLoad) {\n    activeTransaction = customStartTransaction({\n      name: WINDOW.location.pathname,\n      // pageload should always start at timeOrigin (and needs to be in s, not ms)\n      startTimestamp: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n      op: 'pageload',\n      origin: 'auto.pageload.browser',\n      metadata: { source: 'url' },\n    });\n  }\n\n  if (startTransactionOnLocationChange) {\n    addHistoryInstrumentationHandler(({ to, 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\n      if (from !== to) {\n        startingUrl = undefined;\n        if (activeTransaction) {\n          DEBUG_BUILD && 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.end();\n        }\n        activeTransaction = customStartTransaction({\n          name: WINDOW.location.pathname,\n          op: 'navigation',\n          origin: 'auto.navigation.browser',\n          metadata: { source: 'url' },\n        });\n      }\n    });\n  }\n}\n","import type { IdleTransaction, SpanStatusType } from '@sentry/core';\nimport { getActiveTransaction, spanToJSON } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { WINDOW } from './types';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n  if (WINDOW && WINDOW.document) {\n    WINDOW.document.addEventListener('visibilitychange', () => {\n      // eslint-disable-next-line deprecation/deprecation\n      const activeTransaction = getActiveTransaction() as IdleTransaction;\n      if (WINDOW.document.hidden && activeTransaction) {\n        const statusType: SpanStatusType = 'cancelled';\n\n        const { op, status } = spanToJSON(activeTransaction);\n\n        DEBUG_BUILD &&\n          logger.log(`[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${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 (!status) {\n          activeTransaction.setStatus(statusType);\n        }\n        // TODO: Can we rewrite this to an attribute?\n        // eslint-disable-next-line deprecation/deprecation\n        activeTransaction.setTag('visibilitychange', 'document.hidden');\n        activeTransaction.end();\n      }\n    });\n  } else {\n    DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n  }\n}\n","import type { OfflineStore, OfflineTransportOptions } from '@sentry/core';\nimport { makeOfflineTransport } from '@sentry/core';\nimport type { Envelope, InternalBaseTransportOptions, Transport } from '@sentry/types';\nimport type { TextDecoderInternal } from '@sentry/utils';\nimport { parseEnvelope, serializeEnvelope } from '@sentry/utils';\n\n// 'Store', 'promisifyRequest' and 'createStore' were originally copied from the 'idb-keyval' package before being\n// modified and simplified: https://github.com/jakearchibald/idb-keyval\n//\n// At commit: 0420a704fd6cbb4225429c536b1f61112d012fca\n// Original licence:\n\n// Copyright 2016, Jake Archibald\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ntype Store = <T>(callback: (store: IDBObjectStore) => T | PromiseLike<T>) => Promise<T>;\n\nfunction promisifyRequest<T = undefined>(request: IDBRequest<T> | IDBTransaction): Promise<T> {\n  return new Promise<T>((resolve, reject) => {\n    // @ts-expect-error - file size hacks\n    request.oncomplete = request.onsuccess = () => resolve(request.result);\n    // @ts-expect-error - file size hacks\n    request.onabort = request.onerror = () => reject(request.error);\n  });\n}\n\n/** Create or open an IndexedDb store */\nexport function createStore(dbName: string, storeName: string): Store {\n  const request = indexedDB.open(dbName);\n  request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n  const dbp = promisifyRequest(request);\n\n  return callback => dbp.then(db => callback(db.transaction(storeName, 'readwrite').objectStore(storeName)));\n}\n\nfunction keys(store: IDBObjectStore): Promise<number[]> {\n  return promisifyRequest(store.getAllKeys() as IDBRequest<number[]>);\n}\n\n/** Insert into the store */\nexport function insert(store: Store, value: Uint8Array | string, maxQueueSize: number): Promise<void> {\n  return store(store => {\n    return keys(store).then(keys => {\n      if (keys.length >= maxQueueSize) {\n        return;\n      }\n\n      // We insert with an incremented key so that the entries are popped in order\n      store.put(value, Math.max(...keys, 0) + 1);\n      return promisifyRequest(store.transaction);\n    });\n  });\n}\n\n/** Pop the oldest value from the store */\nexport function pop(store: Store): Promise<Uint8Array | string | undefined> {\n  return store(store => {\n    return keys(store).then(keys => {\n      if (keys.length === 0) {\n        return undefined;\n      }\n\n      return promisifyRequest(store.get(keys[0])).then(value => {\n        store.delete(keys[0]);\n        return promisifyRequest(store.transaction).then(() => value);\n      });\n    });\n  });\n}\n\nexport interface BrowserOfflineTransportOptions extends OfflineTransportOptions {\n  /**\n   * Name of indexedDb database to store envelopes in\n   * Default: 'sentry-offline'\n   */\n  dbName?: string;\n  /**\n   * Name of indexedDb object store to store envelopes in\n   * Default: 'queue'\n   */\n  storeName?: string;\n  /**\n   * Maximum number of envelopes to store\n   * Default: 30\n   */\n  maxQueueSize?: number;\n  /**\n   * Only required for testing on node.js\n   * @ignore\n   */\n  textDecoder?: TextDecoderInternal;\n}\n\nfunction createIndexedDbStore(options: BrowserOfflineTransportOptions): OfflineStore {\n  let store: Store | undefined;\n\n  // Lazily create the store only when it's needed\n  function getStore(): Store {\n    if (store == undefined) {\n      store = createStore(options.dbName || 'sentry-offline', options.storeName || 'queue');\n    }\n\n    return store;\n  }\n\n  return {\n    insert: async (env: Envelope) => {\n      try {\n        const serialized = await serializeEnvelope(env, options.textEncoder);\n        await insert(getStore(), serialized, options.maxQueueSize || 30);\n      } catch (_) {\n        //\n      }\n    },\n    pop: async () => {\n      try {\n        const deserialized = await pop(getStore());\n        if (deserialized) {\n          return parseEnvelope(\n            deserialized,\n            options.textEncoder || new TextEncoder(),\n            options.textDecoder || new TextDecoder(),\n          );\n        }\n      } catch (_) {\n        //\n      }\n\n      return undefined;\n    },\n  };\n}\n\nfunction makeIndexedDbOfflineTransport<T>(\n  createTransport: (options: T) => Transport,\n): (options: T & BrowserOfflineTransportOptions) => Transport {\n  return options => createTransport({ ...options, createStore: createIndexedDbStore });\n}\n\n/**\n * Creates a transport that uses IndexedDb to store events when offline.\n */\nexport function makeBrowserOfflineTransport<T extends InternalBaseTransportOptions>(\n  createTransport: (options: T) => Transport,\n): (options: T & BrowserOfflineTransportOptions) => Transport {\n  return makeIndexedDbOfflineTransport<T>(makeOfflineTransport(createTransport));\n}\n","/* eslint-disable max-lines */\n\nimport { DEFAULT_ENVIRONMENT, getClient } from '@sentry/core';\nimport type { DebugImage, Envelope, Event, EventEnvelope, StackFrame, StackParser, Transaction } from '@sentry/types';\nimport type { Profile, ThreadCpuProfile } from '@sentry/types/src/profiling';\nimport { GLOBAL_OBJ, browserPerformanceTimeOrigin, forEachEnvelopeItem, logger, uuid4 } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\nimport type { JSSelfProfile, JSSelfProfileStack, JSSelfProfiler, JSSelfProfilerConstructor } from './jsSelfProfiling';\n\nconst MS_TO_NS = 1e6;\n// Use 0 as main thread id which is identical to threadId in node:worker_threads\n// where main logs 0 and workers seem to log in increments of 1\nconst THREAD_ID_STRING = String(0);\nconst THREAD_NAME = 'main';\n\n// Machine properties (eval only once)\nlet OS_PLATFORM = '';\nlet OS_PLATFORM_VERSION = '';\nlet OS_ARCH = '';\nlet OS_BROWSER = (WINDOW.navigator && WINDOW.navigator.userAgent) || '';\nlet OS_MODEL = '';\nconst OS_LOCALE =\n  (WINDOW.navigator && WINDOW.navigator.language) ||\n  (WINDOW.navigator && WINDOW.navigator.languages && WINDOW.navigator.languages[0]) ||\n  '';\n\ntype UAData = {\n  platform?: string;\n  architecture?: string;\n  model?: string;\n  platformVersion?: string;\n  fullVersionList?: {\n    brand: string;\n    version: string;\n  }[];\n};\n\ninterface UserAgentData {\n  getHighEntropyValues: (keys: string[]) => Promise<UAData>;\n}\n\nfunction isUserAgentData(data: unknown): data is UserAgentData {\n  return typeof data === 'object' && data !== null && 'getHighEntropyValues' in data;\n}\n\n// @ts-expect-error userAgentData is not part of the navigator interface yet\nconst userAgentData = WINDOW.navigator && WINDOW.navigator.userAgentData;\n\nif (isUserAgentData(userAgentData)) {\n  userAgentData\n    .getHighEntropyValues(['architecture', 'model', 'platform', 'platformVersion', 'fullVersionList'])\n    .then((ua: UAData) => {\n      OS_PLATFORM = ua.platform || '';\n      OS_ARCH = ua.architecture || '';\n      OS_MODEL = ua.model || '';\n      OS_PLATFORM_VERSION = ua.platformVersion || '';\n\n      if (ua.fullVersionList && ua.fullVersionList.length > 0) {\n        const firstUa = ua.fullVersionList[ua.fullVersionList.length - 1];\n        OS_BROWSER = `${firstUa.brand} ${firstUa.version}`;\n      }\n    })\n    .catch(e => void e);\n}\n\nfunction isProcessedJSSelfProfile(profile: ThreadCpuProfile | JSSelfProfile): profile is JSSelfProfile {\n  return !('thread_metadata' in profile);\n}\n\n// Enriches the profile with threadId of the current thread.\n// This is done in node as we seem to not be able to get the info from C native code.\n/**\n *\n */\nexport function enrichWithThreadInformation(profile: ThreadCpuProfile | JSSelfProfile): ThreadCpuProfile {\n  if (!isProcessedJSSelfProfile(profile)) {\n    return profile;\n  }\n\n  return convertJSSelfProfileToSampledFormat(profile);\n}\n\n// Profile is marked as optional because it is deleted from the metadata\n// by the integration before the event is processed by other integrations.\nexport interface ProfiledEvent extends Event {\n  sdkProcessingMetadata: {\n    profile?: JSSelfProfile;\n  };\n}\n\nfunction getTraceId(event: Event): string {\n  const traceId: unknown = event && event.contexts && event.contexts['trace'] && event.contexts['trace']['trace_id'];\n  // Log a warning if the profile has an invalid traceId (should be uuidv4).\n  // All profiles and transactions are rejected if this is the case and we want to\n  // warn users that this is happening if they enable debug flag\n  if (typeof traceId === 'string' && traceId.length !== 32) {\n    if (DEBUG_BUILD) {\n      logger.log(`[Profiling] Invalid traceId: ${traceId} on profiled event`);\n    }\n  }\n  if (typeof traceId !== 'string') {\n    return '';\n  }\n\n  return traceId;\n}\n/**\n * Creates a profiling event envelope from a Sentry event. If profile does not pass\n * validation, returns null.\n * @param event\n * @param dsn\n * @param metadata\n * @param tunnel\n * @returns {EventEnvelope | null}\n */\n\n/**\n * Creates a profiling event envelope from a Sentry event.\n */\nexport function createProfilePayload(\n  profile_id: string,\n  start_timestamp: number | undefined,\n  processed_profile: JSSelfProfile,\n  event: ProfiledEvent,\n): Profile {\n  if (event.type !== 'transaction') {\n    // createProfilingEventEnvelope should only be called for transactions,\n    // we type guard this behavior with isProfiledTransactionEvent.\n    throw new TypeError('Profiling events may only be attached to transactions, this should never occur.');\n  }\n\n  if (processed_profile === undefined || processed_profile === null) {\n    throw new TypeError(\n      `Cannot construct profiling event envelope without a valid profile. Got ${processed_profile} instead.`,\n    );\n  }\n\n  const traceId = getTraceId(event);\n  const enrichedThreadProfile = enrichWithThreadInformation(processed_profile);\n  const transactionStartMs = start_timestamp\n    ? start_timestamp\n    : typeof event.start_timestamp === 'number'\n      ? event.start_timestamp * 1000\n      : Date.now();\n  const transactionEndMs = typeof event.timestamp === 'number' ? event.timestamp * 1000 : Date.now();\n\n  const profile: Profile = {\n    event_id: profile_id,\n    timestamp: new Date(transactionStartMs).toISOString(),\n    platform: 'javascript',\n    version: '1',\n    release: event.release || '',\n    environment: event.environment || DEFAULT_ENVIRONMENT,\n    runtime: {\n      name: 'javascript',\n      version: WINDOW.navigator.userAgent,\n    },\n    os: {\n      name: OS_PLATFORM,\n      version: OS_PLATFORM_VERSION,\n      build_number: OS_BROWSER,\n    },\n    device: {\n      locale: OS_LOCALE,\n      model: OS_MODEL,\n      manufacturer: OS_BROWSER,\n      architecture: OS_ARCH,\n      is_emulator: false,\n    },\n    debug_meta: {\n      images: applyDebugMetadata(processed_profile.resources),\n    },\n    profile: enrichedThreadProfile,\n    transactions: [\n      {\n        name: event.transaction || '',\n        id: event.event_id || uuid4(),\n        trace_id: traceId,\n        active_thread_id: THREAD_ID_STRING,\n        relative_start_ns: '0',\n        relative_end_ns: ((transactionEndMs - transactionStartMs) * 1e6).toFixed(0),\n      },\n    ],\n  };\n\n  return profile;\n}\n\n/**\n *\n */\nexport function isProfiledTransactionEvent(event: Event): event is ProfiledEvent {\n  return !!(event.sdkProcessingMetadata && event.sdkProcessingMetadata['profile']);\n}\n\n/*\n  See packages/tracing-internal/src/browser/router.ts\n*/\n/**\n *\n */\nexport function isAutomatedPageLoadTransaction(transaction: Transaction): boolean {\n  return transaction.op === 'pageload';\n}\n\n/**\n * Converts a JSSelfProfile to a our sampled format.\n * Does not currently perform stack indexing.\n */\nexport function convertJSSelfProfileToSampledFormat(input: JSSelfProfile): Profile['profile'] {\n  let EMPTY_STACK_ID: undefined | number = undefined;\n  let STACK_ID = 0;\n\n  // Initialize the profile that we will fill with data\n  const profile: Profile['profile'] = {\n    samples: [],\n    stacks: [],\n    frames: [],\n    thread_metadata: {\n      [THREAD_ID_STRING]: { name: THREAD_NAME },\n    },\n  };\n\n  if (!input.samples.length) {\n    return profile;\n  }\n\n  // We assert samples.length > 0 above and timestamp should always be present\n  const start = input.samples[0].timestamp;\n  // The JS SDK might change it's time origin based on some heuristic (see See packages/utils/src/time.ts)\n  // when that happens, we need to ensure we are correcting the profile timings so the two timelines stay in sync.\n  // Since JS self profiling time origin is always initialized to performance.timeOrigin, we need to adjust for\n  // the drift between the SDK selected value and our profile time origin.\n  const origin =\n    typeof performance.timeOrigin === 'number' ? performance.timeOrigin : browserPerformanceTimeOrigin || 0;\n  const adjustForOriginChange = origin - (browserPerformanceTimeOrigin || origin);\n\n  for (let i = 0; i < input.samples.length; i++) {\n    const jsSample = input.samples[i];\n\n    // If sample has no stack, add an empty sample\n    if (jsSample.stackId === undefined) {\n      if (EMPTY_STACK_ID === undefined) {\n        EMPTY_STACK_ID = STACK_ID;\n        profile.stacks[EMPTY_STACK_ID] = [];\n        STACK_ID++;\n      }\n\n      profile['samples'][i] = {\n        // convert ms timestamp to ns\n        elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n        stack_id: EMPTY_STACK_ID,\n        thread_id: THREAD_ID_STRING,\n      };\n      continue;\n    }\n\n    let stackTop: JSSelfProfileStack | undefined = input.stacks[jsSample.stackId];\n\n    // Functions in top->down order (root is last)\n    // We follow the stackTop.parentId trail and collect each visited frameId\n    const stack: number[] = [];\n\n    while (stackTop) {\n      stack.push(stackTop.frameId);\n\n      const frame = input.frames[stackTop.frameId];\n\n      // If our frame has not been indexed yet, index it\n      if (profile.frames[stackTop.frameId] === undefined) {\n        profile.frames[stackTop.frameId] = {\n          function: frame.name,\n          abs_path: typeof frame.resourceId === 'number' ? input.resources[frame.resourceId] : undefined,\n          lineno: frame.line,\n          colno: frame.column,\n        };\n      }\n\n      stackTop = stackTop.parentId === undefined ? undefined : input.stacks[stackTop.parentId];\n    }\n\n    const sample: Profile['profile']['samples'][0] = {\n      // convert ms timestamp to ns\n      elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n      stack_id: STACK_ID,\n      thread_id: THREAD_ID_STRING,\n    };\n\n    profile['stacks'][STACK_ID] = stack;\n    profile['samples'][i] = sample;\n    STACK_ID++;\n  }\n\n  return profile;\n}\n\n/**\n * Adds items to envelope if they are not already present - mutates the envelope.\n * @param envelope\n */\nexport function addProfilesToEnvelope(envelope: EventEnvelope, profiles: Profile[]): Envelope {\n  if (!profiles.length) {\n    return envelope;\n  }\n\n  for (const profile of profiles) {\n    envelope[1].push([{ type: 'profile' }, profile]);\n  }\n  return envelope;\n}\n\n/**\n * Finds transactions with profile_id context in the envelope\n * @param envelope\n * @returns\n */\nexport function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[] {\n  const events: Event[] = [];\n\n  forEachEnvelopeItem(envelope, (item, type) => {\n    if (type !== 'transaction') {\n      return;\n    }\n\n    for (let j = 1; j < item.length; j++) {\n      const event = item[j] as Event;\n\n      if (event && event.contexts && event.contexts['profile'] && event.contexts['profile']['profile_id']) {\n        events.push(item[j] as Event);\n      }\n    }\n  });\n\n  return events;\n}\n\nconst debugIdStackParserCache = new WeakMap<StackParser, Map<string, StackFrame[]>>();\n/**\n * Applies debug meta data to an event from a list of paths to resources (sourcemaps)\n */\nexport function applyDebugMetadata(resource_paths: ReadonlyArray<string>): DebugImage[] {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n  if (!debugIdMap) {\n    return [];\n  }\n\n  const client = getClient();\n  const options = client && client.getOptions();\n  const stackParser = options && options.stackParser;\n\n  if (!stackParser) {\n    return [];\n  }\n\n  let debugIdStackFramesCache: Map<string, StackFrame[]>;\n  const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n  if (cachedDebugIdStackFrameCache) {\n    debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n  } else {\n    debugIdStackFramesCache = new Map<string, StackFrame[]>();\n    debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n  }\n\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = Object.keys(debugIdMap).reduce<Record<string, string>>((acc, debugIdStackTrace) => {\n    let parsedStack: StackFrame[];\n\n    const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n    if (cachedParsedStack) {\n      parsedStack = cachedParsedStack;\n    } else {\n      parsedStack = stackParser(debugIdStackTrace);\n      debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n    }\n\n    for (let i = parsedStack.length - 1; i >= 0; i--) {\n      const stackFrame = parsedStack[i];\n      const file = stackFrame && stackFrame.filename;\n\n      if (stackFrame && file) {\n        acc[file] = debugIdMap[debugIdStackTrace] as string;\n        break;\n      }\n    }\n    return acc;\n  }, {});\n\n  const images: DebugImage[] = [];\n  for (const path of resource_paths) {\n    if (path && filenameDebugIdMap[path]) {\n      images.push({\n        type: 'sourcemap',\n        code_file: path,\n        debug_id: filenameDebugIdMap[path] as string,\n      });\n    }\n  }\n\n  return images;\n}\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 */\nexport function isValidSampleRate(rate: unknown): boolean {\n  // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n  if ((typeof rate !== 'number' && typeof rate !== 'boolean') || (typeof rate === 'number' && isNaN(rate))) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          rate,\n        )} of type ${JSON.stringify(typeof rate)}.`,\n      );\n    return false;\n  }\n\n  // Boolean sample rates are always valid\n  if (rate === true || rate === false) {\n    return true;\n  }\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    DEBUG_BUILD && logger.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${rate}.`);\n    return false;\n  }\n  return true;\n}\n\nfunction isValidProfile(profile: JSSelfProfile): profile is JSSelfProfile & { profile_id: string } {\n  if (profile.samples.length < 2) {\n    if (DEBUG_BUILD) {\n      // Log a warning if the profile has less than 2 samples so users can know why\n      // they are not seeing any profiling data and we cant avoid the back and forth\n      // of asking them to provide us with a dump of the profile data.\n      logger.log('[Profiling] Discarding profile because it contains less than 2 samples');\n    }\n    return false;\n  }\n\n  if (!profile.frames.length) {\n    if (DEBUG_BUILD) {\n      logger.log('[Profiling] Discarding profile because it contains no frames');\n    }\n    return false;\n  }\n\n  return true;\n}\n\n// Keep a flag value to avoid re-initializing the profiler constructor. If it fails\n// once, it will always fail and this allows us to early return.\nlet PROFILING_CONSTRUCTOR_FAILED: boolean = false;\nexport const MAX_PROFILE_DURATION_MS = 30_000;\n\n/**\n * Check if profiler constructor is available.\n * @param maybeProfiler\n */\nfunction isJSProfilerSupported(maybeProfiler: unknown): maybeProfiler is typeof JSSelfProfilerConstructor {\n  return typeof maybeProfiler === 'function';\n}\n\n/**\n * Starts the profiler and returns the profiler instance.\n */\nexport function startJSSelfProfile(): JSSelfProfiler | undefined {\n  // Feature support check first\n  const JSProfilerConstructor = WINDOW.Profiler;\n\n  if (!isJSProfilerSupported(JSProfilerConstructor)) {\n    if (DEBUG_BUILD) {\n      logger.log(\n        '[Profiling] Profiling is not supported by this browser, Profiler interface missing on window object.',\n      );\n    }\n    return;\n  }\n\n  // From initial testing, it seems that the minimum value for sampleInterval is 10ms.\n  const samplingIntervalMS = 10;\n  // Start the profiler\n  const maxSamples = Math.floor(MAX_PROFILE_DURATION_MS / samplingIntervalMS);\n\n  // Attempt to initialize the profiler constructor, if it fails, we disable profiling for the current user session.\n  // This is likely due to a missing 'Document-Policy': 'js-profiling' header. We do not want to throw an error if this happens\n  // as we risk breaking the user's application, so just disable profiling and log an error.\n  try {\n    return new JSProfilerConstructor({ sampleInterval: samplingIntervalMS, maxBufferSize: maxSamples });\n  } catch (e) {\n    if (DEBUG_BUILD) {\n      logger.log(\n        \"[Profiling] Failed to initialize the Profiling constructor, this is likely due to a missing 'Document-Policy': 'js-profiling' header.\",\n      );\n      logger.log('[Profiling] Disabling profiling for current user session.');\n    }\n    PROFILING_CONSTRUCTOR_FAILED = true;\n  }\n\n  return;\n}\n\n/**\n * Determine if a profile should be profiled.\n */\nexport function shouldProfileTransaction(transaction: Transaction): boolean {\n  // If constructor failed once, it will always fail, so we can early return.\n  if (PROFILING_CONSTRUCTOR_FAILED) {\n    if (DEBUG_BUILD) {\n      logger.log('[Profiling] Profiling has been disabled for the duration of the current user session.');\n    }\n    return false;\n  }\n\n  if (!transaction.isRecording()) {\n    if (DEBUG_BUILD) {\n      logger.log('[Profiling] Discarding profile because transaction was not sampled.');\n    }\n    return false;\n  }\n\n  const client = getClient();\n  const options = client && client.getOptions();\n  if (!options) {\n    DEBUG_BUILD && logger.log('[Profiling] Profiling disabled, no options found.');\n    return false;\n  }\n\n  // @ts-expect-error profilesSampleRate is not part of the browser options yet\n  const profilesSampleRate: number | boolean | undefined = options.profilesSampleRate;\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(profilesSampleRate)) {\n    DEBUG_BUILD && logger.warn('[Profiling] Discarding profile because of invalid sample rate.');\n    return false;\n  }\n\n  // if the function returned 0 (or false), or if `profileSampleRate` is 0, it's a sign the profile should be dropped\n  if (!profilesSampleRate) {\n    DEBUG_BUILD &&\n      logger.log(\n        '[Profiling] Discarding profile because a negative sampling decision was inherited or profileSampleRate is set to 0',\n      );\n    return false;\n  }\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  const sampled = profilesSampleRate === true ? true : Math.random() < profilesSampleRate;\n  // Check if we should sample this profile\n  if (!sampled) {\n    DEBUG_BUILD &&\n      logger.log(\n        `[Profiling] Discarding profile because it's not included in the random sample (sampling rate = ${Number(\n          profilesSampleRate,\n        )})`,\n      );\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a profiling envelope item, if the profile does not pass validation, returns null.\n * @param event\n * @returns {Profile | null}\n */\nexport function createProfilingEvent(\n  profile_id: string,\n  start_timestamp: number | undefined,\n  profile: JSSelfProfile,\n  event: ProfiledEvent,\n): Profile | null {\n  if (!isValidProfile(profile)) {\n    return null;\n  }\n\n  return createProfilePayload(profile_id, start_timestamp, profile, event);\n}\n\nconst PROFILE_MAP: Map<string, JSSelfProfile> = new Map();\n/**\n *\n */\nexport function getActiveProfilesCount(): number {\n  return PROFILE_MAP.size;\n}\n\n/**\n * Retrieves profile from global cache and removes it.\n */\nexport function takeProfileFromGlobalCache(profile_id: string): JSSelfProfile | undefined {\n  const profile = PROFILE_MAP.get(profile_id);\n  if (profile) {\n    PROFILE_MAP.delete(profile_id);\n  }\n  return profile;\n}\n/**\n * Adds profile to global cache and evicts the oldest profile if the cache is full.\n */\nexport function addProfileToGlobalCache(profile_id: string, profile: JSSelfProfile): void {\n  PROFILE_MAP.set(profile_id, profile);\n\n  if (PROFILE_MAP.size > 30) {\n    const last: string = PROFILE_MAP.keys().next().value;\n    PROFILE_MAP.delete(last);\n  }\n}\n","/* eslint-disable complexity */\nimport { spanToJSON } from '@sentry/core';\nimport type { Transaction } from '@sentry/types';\nimport { logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\nimport type { JSSelfProfile } from './jsSelfProfiling';\nimport {\n  MAX_PROFILE_DURATION_MS,\n  addProfileToGlobalCache,\n  isAutomatedPageLoadTransaction,\n  shouldProfileTransaction,\n  startJSSelfProfile,\n} from './utils';\n\n/**\n * Safety wrapper for startTransaction for the unlikely case that transaction starts before tracing is imported -\n * if that happens we want to avoid throwing an error from profiling code.\n * see https://github.com/getsentry/sentry-javascript/issues/4731.\n *\n * @experimental\n */\nexport function onProfilingStartRouteTransaction(transaction: Transaction | undefined): Transaction | undefined {\n  if (!transaction) {\n    if (DEBUG_BUILD) {\n      logger.log('[Profiling] Transaction is undefined, skipping profiling');\n    }\n    return transaction;\n  }\n\n  if (shouldProfileTransaction(transaction)) {\n    return startProfileForTransaction(transaction);\n  }\n\n  return transaction;\n}\n\n/**\n * Wraps startTransaction and stopTransaction with profiling related logic.\n * startProfileForTransaction is called after the call to startTransaction in order to avoid our own code from\n * being profiled. Because of that same reason, stopProfiling is called before the call to stopTransaction.\n */\nexport function startProfileForTransaction(transaction: Transaction): Transaction {\n  // Start the profiler and get the profiler instance.\n  let startTimestamp: number | undefined;\n  if (isAutomatedPageLoadTransaction(transaction)) {\n    startTimestamp = timestampInSeconds() * 1000;\n  }\n\n  const profiler = startJSSelfProfile();\n\n  // We failed to construct the profiler, fallback to original transaction.\n  // No need to log anything as this has already been logged in startProfile.\n  if (!profiler) {\n    return transaction;\n  }\n\n  if (DEBUG_BUILD) {\n    logger.log(`[Profiling] started profiling transaction: ${spanToJSON(transaction).description}`);\n  }\n\n  // We create \"unique\" transaction names to avoid concurrent transactions with same names\n  // from being ignored by the profiler. From here on, only this transaction name should be used when\n  // calling the profiler methods. Note: we log the original name to the user to avoid confusion.\n  const profileId = uuid4();\n\n  // A couple of important things to note here:\n  // `CpuProfilerBindings.stopProfiling` will be scheduled to run in 30seconds in order to exceed max profile duration.\n  // Whichever of the two (transaction.finish/timeout) is first to run, the profiling will be stopped and the gathered profile\n  // will be processed when the original transaction is finished. Since onProfileHandler can be invoked multiple times in the\n  // event of an error or user mistake (calling transaction.finish multiple times), it is important that the behavior of onProfileHandler\n  // is idempotent as we do not want any timings or profiles to be overriden by the last call to onProfileHandler.\n  // After the original finish method is called, the event will be reported through the integration and delegated to transport.\n  const processedProfile: JSSelfProfile | null = null;\n\n  /**\n   * Idempotent handler for profile stop\n   */\n  async function onProfileHandler(): Promise<null> {\n    // Check if the profile exists and return it the behavior has to be idempotent as users may call transaction.finish multiple times.\n    if (!transaction) {\n      return null;\n    }\n    // Satisfy the type checker, but profiler will always be defined here.\n    if (!profiler) {\n      return null;\n    }\n    if (processedProfile) {\n      if (DEBUG_BUILD) {\n        logger.log('[Profiling] profile for:', spanToJSON(transaction).description, 'already exists, returning early');\n      }\n      return null;\n    }\n\n    return profiler\n      .stop()\n      .then((profile: JSSelfProfile): null => {\n        if (maxDurationTimeoutID) {\n          WINDOW.clearTimeout(maxDurationTimeoutID);\n          maxDurationTimeoutID = undefined;\n        }\n\n        if (DEBUG_BUILD) {\n          logger.log(`[Profiling] stopped profiling of transaction: ${spanToJSON(transaction).description}`);\n        }\n\n        // In case of an overlapping transaction, stopProfiling may return null and silently ignore the overlapping profile.\n        if (!profile) {\n          if (DEBUG_BUILD) {\n            logger.log(\n              `[Profiling] profiler returned null profile for: ${spanToJSON(transaction).description}`,\n              'this may indicate an overlapping transaction or a call to stopProfiling with a profile title that was never started',\n            );\n          }\n          return null;\n        }\n\n        addProfileToGlobalCache(profileId, profile);\n        return null;\n      })\n      .catch(error => {\n        if (DEBUG_BUILD) {\n          logger.log('[Profiling] error while stopping profiler:', error);\n        }\n        return null;\n      });\n  }\n\n  // Enqueue a timeout to prevent profiles from running over max duration.\n  let maxDurationTimeoutID: number | undefined = WINDOW.setTimeout(() => {\n    if (DEBUG_BUILD) {\n      logger.log(\n        '[Profiling] max profile duration elapsed, stopping profiling for:',\n        spanToJSON(transaction).description,\n      );\n    }\n    // If the timeout exceeds, we want to stop profiling, but not finish the transaction\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    onProfileHandler();\n  }, MAX_PROFILE_DURATION_MS);\n\n  // We need to reference the original end call to avoid creating an infinite loop\n  const originalEnd = transaction.end.bind(transaction);\n\n  /**\n   * Wraps startTransaction and stopTransaction with profiling related logic.\n   * startProfiling is called after the call to startTransaction in order to avoid our own code from\n   * being profiled. Because of that same reason, stopProfiling is called before the call to stopTransaction.\n   */\n  function profilingWrappedTransactionEnd(): Transaction {\n    if (!transaction) {\n      return originalEnd();\n    }\n    // onProfileHandler should always return the same profile even if this is called multiple times.\n    // Always call onProfileHandler to ensure stopProfiling is called and the timeout is cleared.\n    void onProfileHandler().then(\n      () => {\n        // TODO: Can we rewrite this to use attributes?\n        // eslint-disable-next-line deprecation/deprecation\n        transaction.setContext('profile', { profile_id: profileId, start_timestamp: startTimestamp });\n        originalEnd();\n      },\n      () => {\n        // If onProfileHandler fails, we still want to call the original finish method.\n        originalEnd();\n      },\n    );\n\n    return transaction;\n  }\n\n  transaction.end = profilingWrappedTransactionEnd;\n  return transaction;\n}\n","import { convertIntegrationFnToClass, getCurrentScope } from '@sentry/core';\nimport type { Client, EventEnvelope, Integration, IntegrationClass, IntegrationFn, Transaction } from '@sentry/types';\nimport type { Profile } from '@sentry/types/src/profiling';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { startProfileForTransaction } from './hubextensions';\nimport type { ProfiledEvent } from './utils';\nimport {\n  addProfilesToEnvelope,\n  createProfilingEvent,\n  findProfiledTransactionsFromEnvelope,\n  getActiveProfilesCount,\n  isAutomatedPageLoadTransaction,\n  shouldProfileTransaction,\n  takeProfileFromGlobalCache,\n} from './utils';\n\nconst INTEGRATION_NAME = 'BrowserProfiling';\n\nconst browserProfilingIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      const scope = getCurrentScope();\n\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = scope.getTransaction();\n\n      if (transaction && isAutomatedPageLoadTransaction(transaction)) {\n        if (shouldProfileTransaction(transaction)) {\n          startProfileForTransaction(transaction);\n        }\n      }\n\n      if (typeof client.on !== 'function') {\n        logger.warn('[Profiling] Client does not support hooks, profiling will be disabled');\n        return;\n      }\n\n      client.on('startTransaction', (transaction: Transaction) => {\n        if (shouldProfileTransaction(transaction)) {\n          startProfileForTransaction(transaction);\n        }\n      });\n\n      client.on('beforeEnvelope', (envelope): void => {\n        // if not profiles are in queue, there is nothing to add to the envelope.\n        if (!getActiveProfilesCount()) {\n          return;\n        }\n\n        const profiledTransactionEvents = findProfiledTransactionsFromEnvelope(envelope);\n        if (!profiledTransactionEvents.length) {\n          return;\n        }\n\n        const profilesToAddToEnvelope: Profile[] = [];\n\n        for (const profiledTransaction of profiledTransactionEvents) {\n          const context = profiledTransaction && profiledTransaction.contexts;\n          const profile_id = context && context['profile'] && context['profile']['profile_id'];\n          const start_timestamp = context && context['profile'] && context['profile']['start_timestamp'];\n\n          if (typeof profile_id !== 'string') {\n            DEBUG_BUILD && logger.log('[Profiling] cannot find profile for a transaction without a profile context');\n            continue;\n          }\n\n          if (!profile_id) {\n            DEBUG_BUILD && logger.log('[Profiling] cannot find profile for a transaction without a profile context');\n            continue;\n          }\n\n          // Remove the profile from the transaction context before sending, relay will take care of the rest.\n          if (context && context['profile']) {\n            delete context.profile;\n          }\n\n          const profile = takeProfileFromGlobalCache(profile_id);\n          if (!profile) {\n            DEBUG_BUILD && logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`);\n            continue;\n          }\n\n          const profileEvent = createProfilingEvent(\n            profile_id,\n            start_timestamp as number | undefined,\n            profile,\n            profiledTransaction as ProfiledEvent,\n          );\n          if (profileEvent) {\n            profilesToAddToEnvelope.push(profileEvent);\n          }\n        }\n\n        addProfilesToEnvelope(envelope as EventEnvelope, profilesToAddToEnvelope);\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Browser profiling integration. Stores any event that has contexts[\"profile\"][\"profile_id\"]\n * This exists because we do not want to await async profiler.stop calls as transaction.finish is called\n * in a synchronous context. Instead, we handle sending the profile async from the promise callback and\n * rely on being able to pull the event from the cache when we need to construct the envelope. This makes the\n * integration less reliable as we might be dropping profiles when the cache is full.\n *\n * @experimental\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const BrowserProfilingIntegration = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  browserProfilingIntegration,\n) as IntegrationClass<Integration & { setup: (client: Client) => void }>;\n","export * from './exports';\n\nimport { Integrations as CoreIntegrations } from '@sentry/core';\n\nimport { WINDOW } from './helpers';\nimport * as BrowserIntegrations from './integrations';\n\nlet windowIntegrations = {};\n\n// This block is needed to add compatibility with the integrations packages when used with a CDN\nif (WINDOW.Sentry && WINDOW.Sentry.Integrations) {\n  windowIntegrations = WINDOW.Sentry.Integrations;\n}\n\n/** @deprecated Import the integration function directly, e.g. `inboundFiltersIntegration()` instead of `new Integrations.InboundFilter(). */\nconst INTEGRATIONS = {\n  ...windowIntegrations,\n  // eslint-disable-next-line deprecation/deprecation\n  ...CoreIntegrations,\n  ...BrowserIntegrations,\n};\n\n// eslint-disable-next-line deprecation/deprecation\nexport { INTEGRATIONS as Integrations };\n\nexport {\n  // eslint-disable-next-line deprecation/deprecation\n  Replay,\n  replayIntegration,\n} from '@sentry/replay';\nexport type {\n  ReplayEventType,\n  ReplayEventWithTime,\n  ReplayBreadcrumbFrame,\n  ReplayBreadcrumbFrameEvent,\n  ReplayOptionFrameEvent,\n  ReplayFrame,\n  ReplayFrameEvent,\n  ReplaySpanFrame,\n  ReplaySpanFrameEvent,\n} from '@sentry/replay';\n\nexport {\n  // eslint-disable-next-line deprecation/deprecation\n  ReplayCanvas,\n  replayCanvasIntegration,\n} from '@sentry-internal/replay-canvas';\n\nexport {\n  // eslint-disable-next-line deprecation/deprecation\n  Feedback,\n  feedbackIntegration,\n  sendFeedback,\n} from '@sentry-internal/feedback';\n\nexport {\n  BrowserTracing,\n  defaultRequestInstrumentationOptions,\n  instrumentOutgoingRequests,\n} from '@sentry-internal/tracing';\nexport type { RequestInstrumentationOptions } from '@sentry-internal/tracing';\nexport {\n  addTracingExtensions,\n  setMeasurement,\n  // eslint-disable-next-line deprecation/deprecation\n  extractTraceparentData,\n  // eslint-disable-next-line deprecation/deprecation\n  getActiveTransaction,\n  spanStatusfromHttpCode,\n  // eslint-disable-next-line deprecation/deprecation\n  trace,\n  makeMultiplexedTransport,\n  // eslint-disable-next-line deprecation/deprecation\n  ModuleMetadata,\n  moduleMetadataIntegration,\n} from '@sentry/core';\nexport type { SpanStatusType } from '@sentry/core';\nexport type { Span } from '@sentry/types';\nexport { makeBrowserOfflineTransport } from './transports/offline';\nexport { onProfilingStartRouteTransaction } from './profiling/hubextensions';\nexport { BrowserProfilingIntegration } from './profiling/integration';\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Base from './base';\n\nconst LOCAL_STORAGE_TEST_KEY = '_ember_simple_auth_test_key';\n\nconst proxyToInternalStore = function () {\n  return computed({\n    get(key) {\n      return this.get(`_${key}`);\n    },\n    set(key, value) {\n      this.set(`_${key}`, value);\n      let _store = this.get('_store');\n      if (_store) {\n        _store.set(key, value);\n      }\n      return value;\n    },\n  });\n};\n\n/**\n  Session store that persists data in the browser's `localStorage` (see\n  {@linkplain LocalStorageStore}) if that is available or in\n  a cookie (see {@linkplain CookieStore}) if it is not.\n\n  __This is the default store that Ember Simple Auth will use when the\n  application doesn't define a custom store.__\n\n  __This session store does not work with FastBoot. In order to use Ember\n  Simple Auth with FastBoot, configure the\n  {@linkplain CookieStore} as the application's session\n  store.__\n\n  @class AdaptiveStore\n  @extends BaseStore\n  @public\n*/\nexport default Base.extend({\n  /**\n    The `localStorage` key the store persists data in if `localStorage` is\n    available.\n\n    @memberof AdaptiveStore\n    @property localStorageKey\n    @type String\n    @default 'ember_simple_auth-session'\n    @public\n  */\n  localStorageKey: 'ember_simple_auth-session',\n\n  /**\n    The domain to use for the cookie if `localStorage` is not available, e.g.,\n    \"example.com\", \".example.com\" (which includes all subdomains) or\n    \"subdomain.example.com\". If not explicitly set, the cookie domain defaults\n    to the domain the session was authenticated on.\n\n    @memberof AdaptiveStore\n    @property cookieDomain\n    @type String\n    @default null\n    @public\n  */\n  _cookieDomain: null,\n  cookieDomain: proxyToInternalStore(),\n\n  /**\n    Allows servers to assert that a cookie ought not to be sent along with\n    cross-site requests, which provides some protection against cross-site\n    request forgery attacks (CSRF).\n\n    Available options:\n    - \"Strict\"\n    - \"Lax\"\n\n    @memberof AdaptiveStore\n    @property sameSite\n    @type String\n    @default null\n    @public\n  */\n  _sameSite: null,\n  sameSite: proxyToInternalStore(),\n\n  /**\n    The name of the cookie to use if `localStorage` is not available.\n\n    @memberof AdaptiveStore\n    @property cookieName\n    @type String\n    @default ember_simple_auth-session\n    @public\n  */\n  _cookieName: 'ember_simple_auth-session',\n  cookieName: proxyToInternalStore(),\n\n  /**\n    The path to use for the cookie, e.g., \"/\", \"/something\".\n\n    @memberof AdaptiveStore\n    @property cookiePath\n    @type String\n    @default '/'\n    @public\n  */\n  _cookiePath: '/',\n  cookiePath: proxyToInternalStore(),\n\n  /**\n    The expiration time for the cookie in seconds if `localStorage` is not\n    available. A value of `null` will make the cookie a session cookie that\n    expires and gets deleted when the browser is closed.\n\n    @memberof AdaptiveStore\n    @property cookieExpirationTime\n    @default null\n    @type Integer\n    @public\n  */\n  _cookieExpirationTime: null,\n  cookieExpirationTime: proxyToInternalStore(),\n\n  _cookies: service('cookies'),\n\n  _isLocalStorageAvailable: computed({\n    get() {\n      return testLocalStorageAvailable();\n    },\n\n    set(key, value) {\n      return value;\n    },\n  }),\n\n  init() {\n    this._super(...arguments);\n\n    let owner = getOwner(this);\n    if (owner && !this.hasOwnProperty('_fastboot')) {\n      this._fastboot = owner.lookup('service:fastboot');\n    }\n\n    let store;\n    if (this.get('_isLocalStorageAvailable')) {\n      const localStorage = owner.lookup('session-store:local-storage');\n      const options = { key: this.get('localStorageKey') };\n\n      options._isFastBoot = false;\n      localStorage.setProperties(options);\n\n      store = localStorage;\n    } else {\n      const cookieStorage = owner.lookup('session-store:cookie');\n      const options = this.getProperties(\n        'cookieDomain',\n        'cookieName',\n        'cookieExpirationTime',\n        'cookiePath',\n        'sameSite'\n      );\n\n      cookieStorage.setProperties(options);\n      this.set('cookieExpirationTime', cookieStorage.get('cookieExpirationTime'));\n\n      store = cookieStorage;\n    }\n\n    this.set('_store', store);\n    this._setupStoreEvents(store);\n  },\n\n  _setupStoreEvents(store) {\n    store.on('sessionDataUpdated', data => {\n      this.trigger('sessionDataUpdated', data);\n    });\n    return store;\n  },\n\n  /**\n    Persists the `data` in the `localStorage` if it is available or in a cookie\n    if it is not.\n\n    @memberof AdaptiveStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {Ember.RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist() {\n    return this.get('_store').persist(...arguments);\n  },\n\n  /**\n    Returns all data currently stored in the `localStorage` if that is\n    available - or if it is not, in the cookie - as a plain object.\n\n    @memberof AdaptiveStore\n    @method restore\n    @return {Ember.RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    return this.get('_store').restore();\n  },\n\n  /**\n    Clears the store by deleting the\n    {@linkplain LocalStorageStore.key} from\n    `localStorage` if that is available or by deleting the cookie if it is not.\n\n    @memberof AdaptiveStore\n    @method clear\n    @return {Ember.RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    return this.get('_store').clear();\n  },\n});\n\nfunction testLocalStorageAvailable() {\n  try {\n    localStorage.setItem(LOCAL_STORAGE_TEST_KEY, true);\n    localStorage.removeItem(LOCAL_STORAGE_TEST_KEY);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n","import type { Operation, GraphQLRequest, NextLink } from \"../core/index.js\";\nimport { ApolloLink } from \"../core/index.js\";\nimport type { ObservableSubscription } from \"../../utilities/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport type { DefaultContext } from \"../../core/index.js\";\n\nexport type ContextSetter = (\n  operation: GraphQLRequest,\n  prevContext: DefaultContext\n) => Promise<DefaultContext> | DefaultContext;\n\nexport function setContext(setter: ContextSetter): ApolloLink {\n  return new ApolloLink((operation: Operation, forward: NextLink) => {\n    const { ...request } = operation;\n\n    return new Observable((observer) => {\n      let handle: ObservableSubscription;\n      let closed = false;\n      Promise.resolve(request)\n        .then((req) => setter(req, operation.getContext()))\n        .then(operation.setContext)\n        .then(() => {\n          // if the observer is already closed, no need to subscribe.\n          if (closed) return;\n          handle = forward(operation).subscribe({\n            next: observer.next.bind(observer),\n            error: observer.error.bind(observer),\n            complete: observer.complete.bind(observer),\n          });\n        })\n        .catch(observer.error.bind(observer));\n\n      return () => {\n        closed = true;\n        if (handle) handle.unsubscribe();\n      };\n    });\n  });\n}\n","import \"../utilities/globals/index.js\";\n\nimport type {\n  GraphQLError,\n  GraphQLErrorExtensions,\n  GraphQLFormattedError,\n} from \"graphql\";\n\nimport { isNonNullObject } from \"../utilities/index.js\";\nimport type { ServerParseError } from \"../link/http/index.js\";\nimport type { ServerError } from \"../link/utils/index.js\";\nimport type { FetchResult } from \"../link/core/index.js\";\n\n// This Symbol allows us to pass transport-specific errors from the link chain\n// into QueryManager/client internals without risking a naming collision within\n// extensions (which implementers can use as they see fit).\nexport const PROTOCOL_ERRORS_SYMBOL: unique symbol = Symbol();\n\ntype FetchResultWithSymbolExtensions<T> = FetchResult<T> & {\n  extensions: Record<string | symbol, any>;\n};\n\nexport interface ApolloErrorOptions {\n  graphQLErrors?: ReadonlyArray<GraphQLFormattedError>;\n  protocolErrors?: ReadonlyArray<GraphQLFormattedError>;\n  clientErrors?: ReadonlyArray<Error>;\n  networkError?: Error | ServerParseError | ServerError | null;\n  errorMessage?: string;\n  extraInfo?: any;\n}\n\nexport function graphQLResultHasProtocolErrors<T>(\n  result: FetchResult<T>\n): result is FetchResultWithSymbolExtensions<T> {\n  if (result.extensions) {\n    return Array.isArray(\n      (result as FetchResultWithSymbolExtensions<T>).extensions[\n        PROTOCOL_ERRORS_SYMBOL\n      ]\n    );\n  }\n  return false;\n}\n\nexport function isApolloError(err: Error): err is ApolloError {\n  return err.hasOwnProperty(\"graphQLErrors\");\n}\n\n// Sets the error message on this error according to the\n// the GraphQL and network errors that are present.\n// If the error message has already been set through the\n// constructor or otherwise, this function is a nop.\nconst generateErrorMessage = (err: ApolloError) => {\n  const errors = [\n    ...err.graphQLErrors,\n    ...err.clientErrors,\n    ...err.protocolErrors,\n  ];\n  if (err.networkError) errors.push(err.networkError);\n  return (\n    errors\n      // The rest of the code sometimes unsafely types non-Error objects as GraphQLErrors\n      .map(\n        (err) =>\n          (isNonNullObject(err) && err.message) || \"Error message not found.\"\n      )\n      .join(\"\\n\")\n  );\n};\n\n/**\n * @deprecated This type is deprecated and will be removed in the next major version of Apollo Client.\n * It mistakenly referenced `GraqhQLError` instead of `GraphQLFormattedError`.\n *\n * Use `ReadonlyArray<GraphQLFormattedError>` instead.\n */\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport type GraphQLErrors = ReadonlyArray<GraphQLError>;\n\nexport type NetworkError = Error | ServerParseError | ServerError | null;\n\nexport class ApolloError extends Error {\n  public name: string;\n  public message: string;\n  public graphQLErrors: ReadonlyArray<GraphQLFormattedError>;\n  public protocolErrors: ReadonlyArray<GraphQLFormattedError>;\n  public clientErrors: ReadonlyArray<Error>;\n  public networkError: Error | ServerParseError | ServerError | null;\n  /**\n   * Indicates the specific original cause of the error.\n   *\n   * This field contains the first available `networkError`, `graphQLError`, `protocolError`, `clientError`, or `null` if none are available.\n   */\n  public cause:\n    | ({\n        readonly message: string;\n        extensions?:\n          | GraphQLErrorExtensions[]\n          | GraphQLFormattedError[\"extensions\"];\n      } & Omit<Partial<Error> & Partial<GraphQLFormattedError>, \"extensions\">)\n    | null;\n\n  // An object that can be used to provide some additional information\n  // about an error, e.g. specifying the type of error this is. Used\n  // internally within Apollo Client.\n  public extraInfo: any;\n\n  // Constructs an instance of ApolloError given serialized GraphQL errors,\n  // client errors, protocol errors or network errors.\n  // Note that one of these has to be a valid\n  // value or the constructed error will be meaningless.\n  constructor({\n    graphQLErrors,\n    protocolErrors,\n    clientErrors,\n    networkError,\n    errorMessage,\n    extraInfo,\n  }: ApolloErrorOptions) {\n    super(errorMessage);\n    this.name = \"ApolloError\";\n    this.graphQLErrors = graphQLErrors || [];\n    this.protocolErrors = protocolErrors || [];\n    this.clientErrors = clientErrors || [];\n    this.networkError = networkError || null;\n    this.message = errorMessage || generateErrorMessage(this);\n    this.extraInfo = extraInfo;\n    this.cause =\n      [\n        networkError,\n        ...(graphQLErrors || []),\n        ...(protocolErrors || []),\n        ...(clientErrors || []),\n      ].find((e) => !!e) || null;\n\n    // We're not using `Object.setPrototypeOf` here as it isn't fully\n    // supported on Android (see issue #3236).\n    (this as any).__proto__ = ApolloError.prototype;\n  }\n}\n","export function isNonNullObject(obj: any): obj is Record<string | number, any> {\n  return obj !== null && typeof obj === \"object\";\n}\n\nexport function isPlainObject(obj: any): obj is Record<string | number, any> {\n  return (\n    obj !== null &&\n    typeof obj === \"object\" &&\n    (Object.getPrototypeOf(obj) === Object.prototype ||\n      Object.getPrototypeOf(obj) === null)\n  );\n}\n","import type { FormattedExecutionResult, GraphQLFormattedError } from \"graphql\";\n\nimport {\n  graphQLResultHasProtocolErrors,\n  PROTOCOL_ERRORS_SYMBOL,\n} from \"../../errors/index.js\";\nimport type { NetworkError } from \"../../errors/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport type { Operation, FetchResult, NextLink } from \"../core/index.js\";\nimport { ApolloLink } from \"../core/index.js\";\n\nexport interface ErrorResponse {\n  /**\n   * Errors returned in the `errors` property of the GraphQL response.\n   */\n  graphQLErrors?: ReadonlyArray<GraphQLFormattedError>;\n  /**\n   * Errors thrown during a network request. This is usually an error thrown\n   * during a `fetch` call or an error while parsing the response from the\n   * network.\n   */\n  networkError?: NetworkError;\n  /**\n   * Fatal transport-level errors from multipart subscriptions.\n   * See the [multipart subscription protocol](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) for more information.\n   */\n  protocolErrors?: ReadonlyArray<GraphQLFormattedError>;\n  response?: FormattedExecutionResult;\n  operation: Operation;\n  forward: NextLink;\n}\n\nexport namespace ErrorLink {\n  /**\n   * Callback to be triggered when an error occurs within the link stack.\n   */\n  export interface ErrorHandler {\n    (error: ErrorResponse): Observable<FetchResult> | void;\n  }\n}\n\n// For backwards compatibility.\nexport import ErrorHandler = ErrorLink.ErrorHandler;\n\nexport function onError(errorHandler: ErrorHandler): ApolloLink {\n  return new ApolloLink((operation, forward) => {\n    return new Observable((observer) => {\n      let sub: any;\n      let retriedSub: any;\n      let retriedResult: any;\n\n      try {\n        sub = forward(operation).subscribe({\n          next: (result) => {\n            if (result.errors) {\n              retriedResult = errorHandler({\n                graphQLErrors: result.errors,\n                response: result,\n                operation,\n                forward,\n              });\n            } else if (graphQLResultHasProtocolErrors(result)) {\n              retriedResult = errorHandler({\n                protocolErrors: result.extensions[PROTOCOL_ERRORS_SYMBOL],\n                response: result,\n                operation,\n                forward,\n              });\n            }\n\n            if (retriedResult) {\n              retriedSub = retriedResult.subscribe({\n                next: observer.next.bind(observer),\n                error: observer.error.bind(observer),\n                complete: observer.complete.bind(observer),\n              });\n              return;\n            }\n\n            observer.next(result);\n          },\n          error: (networkError) => {\n            retriedResult = errorHandler({\n              operation,\n              networkError,\n              //Network errors can return GraphQL errors on for example a 403\n              graphQLErrors:\n                (networkError &&\n                  networkError.result &&\n                  networkError.result.errors) ||\n                void 0,\n              forward,\n            });\n            if (retriedResult) {\n              retriedSub = retriedResult.subscribe({\n                next: observer.next.bind(observer),\n                error: observer.error.bind(observer),\n                complete: observer.complete.bind(observer),\n              });\n              return;\n            }\n            observer.error(networkError);\n          },\n          complete: () => {\n            // disable the previous sub from calling complete on observable\n            // if retry is in flight.\n            if (!retriedResult) {\n              observer.complete.bind(observer)();\n            }\n          },\n        });\n      } catch (e) {\n        errorHandler({ networkError: e as Error, operation, forward });\n        observer.error(e);\n      }\n\n      return () => {\n        if (sub) sub.unsubscribe();\n        if (retriedSub) sub.unsubscribe();\n      };\n    });\n  });\n}\n\nexport class ErrorLink extends ApolloLink {\n  private link: ApolloLink;\n  constructor(errorHandler: ErrorLink.ErrorHandler) {\n    super();\n    this.link = onError(errorHandler);\n  }\n\n  public request(\n    operation: Operation,\n    forward: NextLink\n  ): Observable<FetchResult> | null {\n    return this.link.request(operation, forward);\n  }\n}\n","/** The status of an Span.\n *\n * @deprecated Use string literals - if you require type casting, cast to SpanStatusType type\n */\nexport enum SpanStatus {\n  /** The operation completed successfully. */\n  Ok = 'ok',\n  /** Deadline expired before operation could complete. */\n  DeadlineExceeded = 'deadline_exceeded',\n  /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n  Unauthenticated = 'unauthenticated',\n  /** 403 Forbidden */\n  PermissionDenied = 'permission_denied',\n  /** 404 Not Found. Some requested entity (file or directory) was not found. */\n  NotFound = 'not_found',\n  /** 429 Too Many Requests */\n  ResourceExhausted = 'resource_exhausted',\n  /** Client specified an invalid argument. 4xx. */\n  InvalidArgument = 'invalid_argument',\n  /** 501 Not Implemented */\n  Unimplemented = 'unimplemented',\n  /** 503 Service Unavailable */\n  Unavailable = 'unavailable',\n  /** Other/generic 5xx. */\n  InternalError = 'internal_error',\n  /** Unknown. Any non-standard HTTP status code. */\n  UnknownError = 'unknown_error',\n  /** The operation was cancelled (typically by the user). */\n  Cancelled = 'cancelled',\n  /** Already exists (409) */\n  AlreadyExists = 'already_exists',\n  /** Operation was rejected because the system is not in a state required for the operation's */\n  FailedPrecondition = 'failed_precondition',\n  /** The operation was aborted, typically due to a concurrency issue. */\n  Aborted = 'aborted',\n  /** Operation was attempted past the valid range. */\n  OutOfRange = 'out_of_range',\n  /** Unrecoverable data loss or corruption */\n  DataLoss = 'data_loss',\n}\n","import type {\n  AggregationCounts,\n  Client,\n  RequestSessionStatus,\n  SessionAggregates,\n  SessionFlusherLike,\n} from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport { getCurrentScope } from './exports';\n\ntype ReleaseHealthAttributes = {\n  environment?: string;\n  release: string;\n};\n\n/**\n * @inheritdoc\n */\nexport class SessionFlusher implements SessionFlusherLike {\n  public readonly flushTimeout: number;\n  private _pendingAggregates: Record<number, AggregationCounts>;\n  private _sessionAttrs: ReleaseHealthAttributes;\n  private _intervalId: ReturnType<typeof setInterval>;\n  private _isEnabled: boolean;\n  private _client: Client;\n\n  public constructor(client: Client, attrs: ReleaseHealthAttributes) {\n    this._client = client;\n    this.flushTimeout = 60;\n    this._pendingAggregates = {};\n    this._isEnabled = true;\n\n    // Call to setInterval, so that flush is called every 60 seconds\n    this._intervalId = setInterval(() => this.flush(), this.flushTimeout * 1000);\n    this._sessionAttrs = attrs;\n  }\n\n  /** Checks if `pendingAggregates` has entries, and if it does flushes them by calling `sendSession` */\n  public flush(): void {\n    const sessionAggregates = this.getSessionAggregates();\n    if (sessionAggregates.aggregates.length === 0) {\n      return;\n    }\n    this._pendingAggregates = {};\n    this._client.sendSession(sessionAggregates);\n  }\n\n  /** Massages the entries in `pendingAggregates` and returns aggregated sessions */\n  public getSessionAggregates(): SessionAggregates {\n    const aggregates: AggregationCounts[] = Object.keys(this._pendingAggregates).map((key: string) => {\n      return this._pendingAggregates[parseInt(key)];\n    });\n\n    const sessionAggregates: SessionAggregates = {\n      attrs: this._sessionAttrs,\n      aggregates,\n    };\n    return dropUndefinedKeys(sessionAggregates);\n  }\n\n  /** JSDoc */\n  public close(): void {\n    clearInterval(this._intervalId);\n    this._isEnabled = false;\n    this.flush();\n  }\n\n  /**\n   * Wrapper function for _incrementSessionStatusCount that checks if the instance of SessionFlusher is enabled then\n   * fetches the session status of the request from `Scope.getRequestSession().status` on the scope and passes them to\n   * `_incrementSessionStatusCount` along with the start date\n   */\n  public incrementSessionStatusCount(): void {\n    if (!this._isEnabled) {\n      return;\n    }\n    const scope = getCurrentScope();\n    const requestSession = scope.getRequestSession();\n\n    if (requestSession && requestSession.status) {\n      this._incrementSessionStatusCount(requestSession.status, new Date());\n      // This is not entirely necessarily but is added as a safe guard to indicate the bounds of a request and so in\n      // case captureRequestSession is called more than once to prevent double count\n      scope.setRequestSession(undefined);\n      /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n    }\n  }\n\n  /**\n   * Increments status bucket in pendingAggregates buffer (internal state) corresponding to status of\n   * the session received\n   */\n  private _incrementSessionStatusCount(status: RequestSessionStatus, date: Date): number {\n    // Truncate minutes and seconds on Session Started attribute to have one minute bucket keys\n    const sessionStartedTrunc = new Date(date).setSeconds(0, 0);\n    this._pendingAggregates[sessionStartedTrunc] = this._pendingAggregates[sessionStartedTrunc] || {};\n\n    // corresponds to aggregated sessions in one specific minute bucket\n    // for example, {\"started\":\"2021-03-16T08:00:00.000Z\",\"exited\":4, \"errored\": 1}\n    const aggregationCounts: AggregationCounts = this._pendingAggregates[sessionStartedTrunc];\n    if (!aggregationCounts.started) {\n      aggregationCounts.started = new Date(sessionStartedTrunc).toISOString();\n    }\n\n    switch (status) {\n      case 'errored':\n        aggregationCounts.errored = (aggregationCounts.errored || 0) + 1;\n        return aggregationCounts.errored;\n      case 'ok':\n        aggregationCounts.exited = (aggregationCounts.exited || 0) + 1;\n        return aggregationCounts.exited;\n      default:\n        aggregationCounts.crashed = (aggregationCounts.crashed || 0) + 1;\n        return aggregationCounts.crashed;\n    }\n  }\n}\n","import type {\n  CheckInEnvelope,\n  CheckInItem,\n  DsnComponents,\n  DynamicSamplingContext,\n  SdkMetadata,\n  SerializedCheckIn,\n} from '@sentry/types';\nimport { createEnvelope, dropUndefinedKeys, dsnToString } from '@sentry/utils';\n\n/**\n * Create envelope from check in item.\n */\nexport function createCheckInEnvelope(\n  checkIn: SerializedCheckIn,\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n  dsn?: DsnComponents,\n): CheckInEnvelope {\n  const headers: CheckInEnvelope[0] = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (metadata && metadata.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  if (dynamicSamplingContext) {\n    headers.trace = dropUndefinedKeys(dynamicSamplingContext) as DynamicSamplingContext;\n  }\n\n  const item = createCheckInEnvelopeItem(checkIn);\n  return createEnvelope<CheckInEnvelope>(headers, [item]);\n}\n\nfunction createCheckInEnvelopeItem(checkIn: SerializedCheckIn): CheckInItem {\n  const checkInHeaders: CheckInItem[0] = {\n    type: 'check_in',\n  };\n  return [checkInHeaders, checkIn];\n}\n","import type {\n  Client,\n  ClientOptions,\n  MeasurementUnit,\n  MetricsAggregator as MetricsAggregatorBase,\n  Primitive,\n} from '@sentry/types';\nimport { timestampInSeconds } from '@sentry/utils';\nimport { DEFAULT_FLUSH_INTERVAL, MAX_WEIGHT, NAME_AND_TAG_KEY_NORMALIZATION_REGEX } from './constants';\nimport { METRIC_MAP } from './instance';\nimport type { MetricBucket, MetricType } from './types';\nimport { getBucketKey, sanitizeTags } from './utils';\n\n/**\n * A metrics aggregator that aggregates metrics in memory and flushes them periodically.\n */\nexport class MetricsAggregator implements MetricsAggregatorBase {\n  // TODO(@anonrig): Use FinalizationRegistry to have a proper way of flushing the buckets\n  // when the aggregator is garbage collected.\n  // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n  private _buckets: MetricBucket;\n\n  // Different metrics have different weights. We use this to limit the number of metrics\n  // that we store in memory.\n  private _bucketsTotalWeight;\n\n  private readonly _interval: ReturnType<typeof setInterval>;\n\n  // SDKs are required to shift the flush interval by random() * rollup_in_seconds.\n  // That shift is determined once per startup to create jittering.\n  private readonly _flushShift: number;\n\n  // An SDK is required to perform force flushing ahead of scheduled time if the memory\n  // pressure is too high. There is no rule for this other than that SDKs should be tracking\n  // abstract aggregation complexity (eg: a counter only carries a single float, whereas a\n  // distribution is a float per emission).\n  //\n  // Force flush is used on either shutdown, flush() or when we exceed the max weight.\n  private _forceFlush: boolean;\n\n  public constructor(private readonly _client: Client<ClientOptions>) {\n    this._buckets = new Map();\n    this._bucketsTotalWeight = 0;\n    this._interval = setInterval(() => this._flush(), DEFAULT_FLUSH_INTERVAL);\n    this._flushShift = Math.floor((Math.random() * DEFAULT_FLUSH_INTERVAL) / 1000);\n    this._forceFlush = false;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public add(\n    metricType: MetricType,\n    unsanitizedName: string,\n    value: number | string,\n    unit: MeasurementUnit = 'none',\n    unsanitizedTags: Record<string, Primitive> = {},\n    maybeFloatTimestamp = timestampInSeconds(),\n  ): void {\n    const timestamp = Math.floor(maybeFloatTimestamp);\n    const name = unsanitizedName.replace(NAME_AND_TAG_KEY_NORMALIZATION_REGEX, '_');\n    const tags = sanitizeTags(unsanitizedTags);\n\n    const bucketKey = getBucketKey(metricType, name, unit, tags);\n    let bucketItem = this._buckets.get(bucketKey);\n    if (bucketItem) {\n      bucketItem.metric.add(value);\n      // TODO(abhi): Do we need this check?\n      if (bucketItem.timestamp < timestamp) {\n        bucketItem.timestamp = timestamp;\n      }\n    } else {\n      bucketItem = {\n        // @ts-expect-error we don't need to narrow down the type of value here, saves bundle size.\n        metric: new METRIC_MAP[metricType](value),\n        timestamp,\n        metricType,\n        name,\n        unit,\n        tags,\n      };\n      this._buckets.set(bucketKey, bucketItem);\n    }\n\n    // We need to keep track of the total weight of the buckets so that we can\n    // flush them when we exceed the max weight.\n    this._bucketsTotalWeight += bucketItem.metric.weight;\n\n    if (this._bucketsTotalWeight >= MAX_WEIGHT) {\n      this.flush();\n    }\n  }\n\n  /**\n   * Flushes the current metrics to the transport via the transport.\n   */\n  public flush(): void {\n    this._forceFlush = true;\n    this._flush();\n  }\n\n  /**\n   * Shuts down metrics aggregator and clears all metrics.\n   */\n  public close(): void {\n    this._forceFlush = true;\n    clearInterval(this._interval);\n    this._flush();\n  }\n\n  /**\n   * Flushes the buckets according to the internal state of the aggregator.\n   * If it is a force flush, which happens on shutdown, it will flush all buckets.\n   * Otherwise, it will only flush buckets that are older than the flush interval,\n   * and according to the flush shift.\n   *\n   * This function mutates `_forceFlush` and `_bucketsTotalWeight` properties.\n   */\n  private _flush(): void {\n    // TODO(@anonrig): Add Atomics for locking to avoid having force flush and regular flush\n    // running at the same time.\n    // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics\n\n    // This path eliminates the need for checking for timestamps since we're forcing a flush.\n    // Remember to reset the flag, or it will always flush all metrics.\n    if (this._forceFlush) {\n      this._forceFlush = false;\n      this._bucketsTotalWeight = 0;\n      this._captureMetrics(this._buckets);\n      this._buckets.clear();\n      return;\n    }\n    const cutoffSeconds = Math.floor(timestampInSeconds()) - DEFAULT_FLUSH_INTERVAL / 1000 - this._flushShift;\n    // TODO(@anonrig): Optimization opportunity.\n    // Convert this map to an array and store key in the bucketItem.\n    const flushedBuckets: MetricBucket = new Map();\n    for (const [key, bucket] of this._buckets) {\n      if (bucket.timestamp <= cutoffSeconds) {\n        flushedBuckets.set(key, bucket);\n        this._bucketsTotalWeight -= bucket.metric.weight;\n      }\n    }\n\n    for (const [key] of flushedBuckets) {\n      this._buckets.delete(key);\n    }\n\n    this._captureMetrics(flushedBuckets);\n  }\n\n  /**\n   * Only captures a subset of the buckets passed to this function.\n   * @param flushedBuckets\n   */\n  private _captureMetrics(flushedBuckets: MetricBucket): void {\n    if (flushedBuckets.size > 0 && this._client.captureAggregateMetrics) {\n      // TODO(@anonrig): Optimization opportunity.\n      // This copy operation can be avoided if we store the key in the bucketItem.\n      const buckets = Array.from(flushedBuckets).map(([, bucketItem]) => bucketItem);\n      this._client.captureAggregateMetrics(buckets);\n    }\n  }\n}\n","import type {\n  BaseTransportOptions,\n  CheckIn,\n  ClientOptions,\n  DynamicSamplingContext,\n  Event,\n  EventHint,\n  MonitorConfig,\n  ParameterizedString,\n  SerializedCheckIn,\n  Severity,\n  SeverityLevel,\n  TraceContext,\n} from '@sentry/types';\nimport { eventFromMessage, eventFromUnknownInput, logger, resolvedSyncPromise, uuid4 } from '@sentry/utils';\n\nimport { BaseClient } from './baseclient';\nimport { createCheckInEnvelope } from './checkin';\nimport { DEBUG_BUILD } from './debug-build';\nimport { getClient } from './exports';\nimport { MetricsAggregator } from './metrics/aggregator';\nimport type { Scope } from './scope';\nimport { SessionFlusher } from './sessionflusher';\nimport {\n  addTracingExtensions,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n} from './tracing';\nimport { getRootSpan } from './utils/getRootSpan';\nimport { spanToTraceContext } from './utils/spanUtils';\n\nexport interface ServerRuntimeClientOptions extends ClientOptions<BaseTransportOptions> {\n  platform?: string;\n  runtime?: { name: string; version?: string };\n  serverName?: string;\n}\n\n/**\n * The Sentry Server Runtime Client SDK.\n */\nexport class ServerRuntimeClient<\n  O extends ClientOptions & ServerRuntimeClientOptions = ServerRuntimeClientOptions,\n> extends BaseClient<O> {\n  protected _sessionFlusher: SessionFlusher | undefined;\n\n  /**\n   * Creates a new Edge SDK instance.\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: O) {\n    // Server clients always support tracing\n    addTracingExtensions();\n\n    super(options);\n\n    if (options._experiments && options._experiments['metricsAggregator']) {\n      this.metricsAggregator = new MetricsAggregator(this);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n    return resolvedSyncPromise(eventFromUnknownInput(getClient(), this._options.stackParser, exception, hint));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(\n    message: ParameterizedString,\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel = 'info',\n    hint?: EventHint,\n  ): PromiseLike<Event> {\n    return resolvedSyncPromise(\n      eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace),\n    );\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined {\n    // Check if the flag `autoSessionTracking` is enabled, and if `_sessionFlusher` exists because it is initialised only\n    // when the `requestHandler` middleware is used, and hence the expectation is to have SessionAggregates payload\n    // sent to the Server only when the `requestHandler` middleware is used\n    if (this._options.autoSessionTracking && this._sessionFlusher && scope) {\n      const requestSession = scope.getRequestSession();\n\n      // Necessary checks to ensure this is code block is executed only within a request\n      // Should override the status only if `requestSession.status` is `Ok`, which is its initial stage\n      if (requestSession && requestSession.status === 'ok') {\n        requestSession.status = 'errored';\n      }\n    }\n\n    return super.captureException(exception, hint, scope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n    // Check if the flag `autoSessionTracking` is enabled, and if `_sessionFlusher` exists because it is initialised only\n    // when the `requestHandler` middleware is used, and hence the expectation is to have SessionAggregates payload\n    // sent to the Server only when the `requestHandler` middleware is used\n    if (this._options.autoSessionTracking && this._sessionFlusher && scope) {\n      const eventType = event.type || 'exception';\n      const isException =\n        eventType === 'exception' && event.exception && event.exception.values && event.exception.values.length > 0;\n\n      // If the event is of type Exception, then a request session should be captured\n      if (isException) {\n        const requestSession = scope.getRequestSession();\n\n        // Ensure that this is happening within the bounds of a request, and make sure not to override\n        // Session Status if Errored / Crashed\n        if (requestSession && requestSession.status === 'ok') {\n          requestSession.status = 'errored';\n        }\n      }\n    }\n\n    return super.captureEvent(event, hint, scope);\n  }\n\n  /**\n   *\n   * @inheritdoc\n   */\n  public close(timeout?: number): PromiseLike<boolean> {\n    if (this._sessionFlusher) {\n      this._sessionFlusher.close();\n    }\n    return super.close(timeout);\n  }\n\n  /** Method that initialises an instance of SessionFlusher on Client */\n  public initSessionFlusher(): void {\n    const { release, environment } = this._options;\n    if (!release) {\n      DEBUG_BUILD && logger.warn('Cannot initialise an instance of SessionFlusher if no release is provided!');\n    } else {\n      this._sessionFlusher = new SessionFlusher(this, {\n        release,\n        environment,\n      });\n    }\n  }\n\n  /**\n   * Create a cron monitor check in and send it to Sentry.\n   *\n   * @param checkIn An object that describes a check in.\n   * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n   * to create a monitor automatically when sending a check in.\n   */\n  public captureCheckIn(checkIn: CheckIn, monitorConfig?: MonitorConfig, scope?: Scope): string {\n    const id = 'checkInId' in checkIn && checkIn.checkInId ? checkIn.checkInId : uuid4();\n    if (!this._isEnabled()) {\n      DEBUG_BUILD && logger.warn('SDK not enabled, will not capture checkin.');\n      return id;\n    }\n\n    const options = this.getOptions();\n    const { release, environment, tunnel } = options;\n\n    const serializedCheckIn: SerializedCheckIn = {\n      check_in_id: id,\n      monitor_slug: checkIn.monitorSlug,\n      status: checkIn.status,\n      release,\n      environment,\n    };\n\n    if ('duration' in checkIn) {\n      serializedCheckIn.duration = checkIn.duration;\n    }\n\n    if (monitorConfig) {\n      serializedCheckIn.monitor_config = {\n        schedule: monitorConfig.schedule,\n        checkin_margin: monitorConfig.checkinMargin,\n        max_runtime: monitorConfig.maxRuntime,\n        timezone: monitorConfig.timezone,\n      };\n    }\n\n    const [dynamicSamplingContext, traceContext] = this._getTraceInfoFromScope(scope);\n    if (traceContext) {\n      serializedCheckIn.contexts = {\n        trace: traceContext,\n      };\n    }\n\n    const envelope = createCheckInEnvelope(\n      serializedCheckIn,\n      dynamicSamplingContext,\n      this.getSdkMetadata(),\n      tunnel,\n      this.getDsn(),\n    );\n\n    DEBUG_BUILD && logger.info('Sending checkin:', checkIn.monitorSlug, checkIn.status);\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n\n    return id;\n  }\n\n  /**\n   * Method responsible for capturing/ending a request session by calling `incrementSessionStatusCount` to increment\n   * appropriate session aggregates bucket\n   */\n  protected _captureRequestSession(): void {\n    if (!this._sessionFlusher) {\n      DEBUG_BUILD && logger.warn('Discarded request mode session because autoSessionTracking option was disabled');\n    } else {\n      this._sessionFlusher.incrementSessionStatusCount();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(\n    event: Event,\n    hint: EventHint,\n    scope?: Scope,\n    isolationScope?: Scope,\n  ): PromiseLike<Event | null> {\n    if (this._options.platform) {\n      event.platform = event.platform || this._options.platform;\n    }\n\n    if (this._options.runtime) {\n      event.contexts = {\n        ...event.contexts,\n        runtime: (event.contexts || {}).runtime || this._options.runtime,\n      };\n    }\n\n    if (this._options.serverName) {\n      event.server_name = event.server_name || this._options.serverName;\n    }\n\n    return super._prepareEvent(event, hint, scope, isolationScope);\n  }\n\n  /** Extract trace information from scope */\n  private _getTraceInfoFromScope(\n    scope: Scope | undefined,\n  ): [dynamicSamplingContext: Partial<DynamicSamplingContext> | undefined, traceContext: TraceContext | undefined] {\n    if (!scope) {\n      return [undefined, undefined];\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    const span = scope.getSpan();\n    if (span) {\n      const samplingContext = getRootSpan(span) ? getDynamicSamplingContextFromSpan(span) : undefined;\n      return [samplingContext, spanToTraceContext(span)];\n    }\n\n    const { traceId, spanId, parentSpanId, dsc } = scope.getPropagationContext();\n    const traceContext: TraceContext = {\n      trace_id: traceId,\n      span_id: spanId,\n      parent_span_id: parentSpanId,\n    };\n    if (dsc) {\n      return [dsc, traceContext];\n    }\n\n    return [getDynamicSamplingContextFromClient(traceId, this, scope), traceContext];\n  }\n}\n","import type {\n  Client,\n  Event,\n  EventHint,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  Transaction,\n} from '@sentry/types';\nimport type { AddRequestDataToEventOptions, TransactionNamingScheme } from '@sentry/utils';\nimport { addRequestDataToEvent, extractPathForTransaction } from '@sentry/utils';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\nimport { spanToJSON } from '../utils/spanUtils';\n\nexport type RequestDataIntegrationOptions = {\n  /**\n   * Controls what data is pulled from the request and added to the event\n   */\n  include?: {\n    cookies?: boolean;\n    data?: boolean;\n    headers?: boolean;\n    ip?: boolean;\n    query_string?: boolean;\n    url?: boolean;\n    user?:\n      | boolean\n      | {\n          id?: boolean;\n          username?: boolean;\n          email?: boolean;\n        };\n  };\n\n  /** Whether to identify transactions by parameterized path, parameterized path with method, or handler name */\n  transactionNamingScheme?: TransactionNamingScheme;\n};\n\nconst DEFAULT_OPTIONS = {\n  include: {\n    cookies: true,\n    data: true,\n    headers: true,\n    ip: false,\n    query_string: true,\n    url: true,\n    user: {\n      id: true,\n      username: true,\n      email: true,\n    },\n  },\n  transactionNamingScheme: 'methodPath',\n};\n\nconst INTEGRATION_NAME = 'RequestData';\n\nconst _requestDataIntegration = ((options: RequestDataIntegrationOptions = {}) => {\n  const _addRequestData = addRequestDataToEvent;\n  const _options: Required<RequestDataIntegrationOptions> = {\n    ...DEFAULT_OPTIONS,\n    ...options,\n    include: {\n      // @ts-expect-error It's mad because `method` isn't a known `include` key. (It's only here and not set by default in\n      // `addRequestDataToEvent` for legacy reasons. TODO (v8): Change that.)\n      method: true,\n      ...DEFAULT_OPTIONS.include,\n      ...options.include,\n      user:\n        options.include && typeof options.include.user === 'boolean'\n          ? options.include.user\n          : {\n              ...DEFAULT_OPTIONS.include.user,\n              // Unclear why TS still thinks `options.include.user` could be a boolean at this point\n              ...((options.include || {}).user as Record<string, boolean>),\n            },\n    },\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event, _hint, client) {\n      // Note: In the long run, most of the logic here should probably move into the request data utility functions. For\n      // the moment it lives here, though, until https://github.com/getsentry/sentry-javascript/issues/5718 is addressed.\n      // (TL;DR: Those functions touch many parts of the repo in many different ways, and need to be clened up. Once\n      // that's happened, it will be easier to add this logic in without worrying about unexpected side effects.)\n      const { transactionNamingScheme } = _options;\n\n      const { sdkProcessingMetadata = {} } = event;\n      const req = sdkProcessingMetadata.request;\n\n      if (!req) {\n        return event;\n      }\n\n      // The Express request handler takes a similar `include` option to that which can be passed to this integration.\n      // If passed there, we store it in `sdkProcessingMetadata`. TODO(v8): Force express and GCP people to use this\n      // integration, so that all of this passing and conversion isn't necessary\n      const addRequestDataOptions =\n        sdkProcessingMetadata.requestDataOptionsFromExpressHandler ||\n        sdkProcessingMetadata.requestDataOptionsFromGCPWrapper ||\n        convertReqDataIntegrationOptsToAddReqDataOpts(_options);\n\n      const processedEvent = _addRequestData(event, req, addRequestDataOptions);\n\n      // Transaction events already have the right `transaction` value\n      if (event.type === 'transaction' || transactionNamingScheme === 'handler') {\n        return processedEvent;\n      }\n\n      // In all other cases, use the request's associated transaction (if any) to overwrite the event's `transaction`\n      // value with a high-quality one\n      const reqWithTransaction = req as { _sentryTransaction?: Transaction };\n      const transaction = reqWithTransaction._sentryTransaction;\n      if (transaction) {\n        const name = spanToJSON(transaction).description || '';\n\n        // TODO (v8): Remove the nextjs check and just base it on `transactionNamingScheme` for all SDKs. (We have to\n        // keep it the way it is for the moment, because changing the names of transactions in Sentry has the potential\n        // to break things like alert rules.)\n        const shouldIncludeMethodInTransactionName =\n          getSDKName(client) === 'sentry.javascript.nextjs'\n            ? name.startsWith('/api')\n            : transactionNamingScheme !== 'path';\n\n        const [transactionValue] = extractPathForTransaction(req, {\n          path: true,\n          method: shouldIncludeMethodInTransactionName,\n          customRoute: name,\n        });\n\n        processedEvent.transaction = transactionValue;\n      }\n\n      return processedEvent;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const requestDataIntegration = defineIntegration(_requestDataIntegration);\n\n/**\n * Add data about a request to an event. Primarily for use in Node-based SDKs, but included in `@sentry/integrations`\n * so it can be used in cross-platform SDKs like `@sentry/nextjs`.\n * @deprecated Use `requestDataIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const RequestData = convertIntegrationFnToClass(INTEGRATION_NAME, requestDataIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event, hint: EventHint, client: Client) => Event }\n> & {\n  new (options?: {\n    /**\n     * Controls what data is pulled from the request and added to the event\n     */\n    include?: {\n      cookies?: boolean;\n      data?: boolean;\n      headers?: boolean;\n      ip?: boolean;\n      query_string?: boolean;\n      url?: boolean;\n      user?:\n        | boolean\n        | {\n            id?: boolean;\n            username?: boolean;\n            email?: boolean;\n          };\n    };\n\n    /** Whether to identify transactions by parameterized path, parameterized path with method, or handler name */\n    transactionNamingScheme?: TransactionNamingScheme;\n  }): Integration;\n};\n\n/** Convert this integration's options to match what `addRequestDataToEvent` expects */\n/** TODO: Can possibly be deleted once https://github.com/getsentry/sentry-javascript/issues/5718 is fixed */\nfunction convertReqDataIntegrationOptsToAddReqDataOpts(\n  integrationOptions: Required<RequestDataIntegrationOptions>,\n): AddRequestDataToEventOptions {\n  const {\n    transactionNamingScheme,\n    include: { ip, user, ...requestOptions },\n  } = integrationOptions;\n\n  const requestIncludeKeys: string[] = [];\n  for (const [key, value] of Object.entries(requestOptions)) {\n    if (value) {\n      requestIncludeKeys.push(key);\n    }\n  }\n\n  let addReqDataUserOpt;\n  if (user === undefined) {\n    addReqDataUserOpt = true;\n  } else if (typeof user === 'boolean') {\n    addReqDataUserOpt = user;\n  } else {\n    const userIncludeKeys: string[] = [];\n    for (const [key, value] of Object.entries(user)) {\n      if (value) {\n        userIncludeKeys.push(key);\n      }\n    }\n    addReqDataUserOpt = userIncludeKeys;\n  }\n\n  return {\n    include: {\n      ip,\n      user: addReqDataUserOpt,\n      request: requestIncludeKeys.length !== 0 ? requestIncludeKeys : undefined,\n      transaction: transactionNamingScheme,\n    },\n  };\n}\n\nfunction getSDKName(client: Client): string | undefined {\n  try {\n    // For a long chain like this, it's fewer bytes to combine a try-catch with assuming everything is there than to\n    // write out a long chain of `a && a.b && a.b.c && ...`\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return client.getOptions()._metadata!.sdk!.name;\n  } catch (err) {\n    // In theory we should never get here\n    return undefined;\n  }\n}\n","// TODO(v8): Consider moving this file (or at least parts of it) into the browser package. The registered handlers are mostly non-generic and we risk leaking runtime specific code into generic packages.\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { logger } from './../logger';\nimport type {\n  InstrumentHandlerCallback as _InstrumentHandlerCallback,\n  InstrumentHandlerType as _InstrumentHandlerType,\n} from './_handlers';\nimport { resetInstrumentationHandlers } from './_handlers';\nimport { addConsoleInstrumentationHandler } from './console';\nimport { addClickKeypressInstrumentationHandler } from './dom';\nimport { addFetchInstrumentationHandler } from './fetch';\nimport { addGlobalErrorInstrumentationHandler } from './globalError';\nimport { addGlobalUnhandledRejectionInstrumentationHandler } from './globalUnhandledRejection';\nimport { addHistoryInstrumentationHandler } from './history';\nimport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler } from './xhr';\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 * @deprecated Use the proper function per instrumentation type instead!\n */\nexport function addInstrumentationHandler(type: _InstrumentHandlerType, callback: _InstrumentHandlerCallback): void {\n  switch (type) {\n    case 'console':\n      return addConsoleInstrumentationHandler(callback);\n    case 'dom':\n      return addClickKeypressInstrumentationHandler(callback);\n    case 'xhr':\n      return addXhrInstrumentationHandler(callback);\n    case 'fetch':\n      return addFetchInstrumentationHandler(callback);\n    case 'history':\n      return addHistoryInstrumentationHandler(callback);\n    case 'error':\n      return addGlobalErrorInstrumentationHandler(callback);\n    case 'unhandledrejection':\n      return addGlobalUnhandledRejectionInstrumentationHandler(callback);\n    default:\n      DEBUG_BUILD && logger.warn('unknown instrumentation type:', type);\n  }\n}\n\n/**\n * @deprecated Use the specific handler data types from @sentry/types instead, e.g. HandlerDataFetch, HandlerDataConsole, ...\n */\ntype InstrumentHandlerCallback = _InstrumentHandlerCallback;\n\n/**\n * @deprecated Use the specific handler functions instead, e.g. addConsoleInstrumentationHandler, ...\n */\ntype InstrumentHandlerType = _InstrumentHandlerType;\n\n// eslint-disable-next-line deprecation/deprecation\nexport type { InstrumentHandlerCallback, InstrumentHandlerType };\n\nexport {\n  addConsoleInstrumentationHandler,\n  addClickKeypressInstrumentationHandler,\n  addXhrInstrumentationHandler,\n  addFetchInstrumentationHandler,\n  addHistoryInstrumentationHandler,\n  addGlobalErrorInstrumentationHandler,\n  addGlobalUnhandledRejectionInstrumentationHandler,\n  SENTRY_XHR_DATA_KEY,\n  // Only exported for tests\n  resetInstrumentationHandlers,\n};\n","// Slightly modified (no IE8 support, ES6) and transcribed to TypeScript\n// https://github.com/calvinmetcalf/rollup-plugin-node-builtins/blob/63ab8aacd013767445ca299e468d9a60a95328d7/src/es6/path.js\n//\n// Copyright Joyent, Inc.and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/** JSDoc */\nfunction normalizeArray(parts: string[], allowAboveRoot?: boolean): string[] {\n  // if the path tries to go above the root, `up` ends up > 0\n  let up = 0;\n  for (let i = parts.length - 1; i >= 0; i--) {\n    const last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nconst splitPathRe = /^(\\S+:\\\\|\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^/\\\\]+?|)(\\.[^./\\\\]*|))(?:[/\\\\]*)$/;\n/** JSDoc */\nfunction splitPath(filename: string): string[] {\n  // Truncate files names greater than 1024 characters to avoid regex dos\n  // https://github.com/getsentry/sentry-javascript/pull/8737#discussion_r1285719172\n  const truncated = filename.length > 1024 ? `<truncated>${filename.slice(-1024)}` : filename;\n  const parts = splitPathRe.exec(truncated);\n  return parts ? parts.slice(1) : [];\n}\n\n// path.resolve([from ...], to)\n// posix version\n/** JSDoc */\nexport function resolve(...args: string[]): string {\n  let resolvedPath = '';\n  let resolvedAbsolute = false;\n\n  for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    const path = i >= 0 ? args[i] : '/';\n\n    // Skip empty entries\n    if (!path) {\n      continue;\n    }\n\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(\n    resolvedPath.split('/').filter(p => !!p),\n    !resolvedAbsolute,\n  ).join('/');\n\n  return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}\n\n/** JSDoc */\nfunction trim(arr: string[]): string[] {\n  let start = 0;\n  for (; start < arr.length; start++) {\n    if (arr[start] !== '') {\n      break;\n    }\n  }\n\n  let end = arr.length - 1;\n  for (; end >= 0; end--) {\n    if (arr[end] !== '') {\n      break;\n    }\n  }\n\n  if (start > end) {\n    return [];\n  }\n  return arr.slice(start, end - start + 1);\n}\n\n// path.relative(from, to)\n// posix version\n/** JSDoc */\nexport function relative(from: string, to: string): string {\n  /* eslint-disable no-param-reassign */\n  from = resolve(from).slice(1);\n  to = resolve(to).slice(1);\n  /* eslint-enable no-param-reassign */\n\n  const fromParts = trim(from.split('/'));\n  const toParts = trim(to.split('/'));\n\n  const length = Math.min(fromParts.length, toParts.length);\n  let samePartsLength = length;\n  for (let i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  let outputParts = [];\n  for (let i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n}\n\n// path.normalize(path)\n// posix version\n/** JSDoc */\nexport function normalizePath(path: string): string {\n  const isPathAbsolute = isAbsolute(path);\n  const trailingSlash = path.slice(-1) === '/';\n\n  // Normalize the path\n  let normalizedPath = normalizeArray(\n    path.split('/').filter(p => !!p),\n    !isPathAbsolute,\n  ).join('/');\n\n  if (!normalizedPath && !isPathAbsolute) {\n    normalizedPath = '.';\n  }\n  if (normalizedPath && trailingSlash) {\n    normalizedPath += '/';\n  }\n\n  return (isPathAbsolute ? '/' : '') + normalizedPath;\n}\n\n// posix version\n/** JSDoc */\nexport function isAbsolute(path: string): boolean {\n  return path.charAt(0) === '/';\n}\n\n// posix version\n/** JSDoc */\nexport function join(...args: string[]): string {\n  return normalizePath(args.join('/'));\n}\n\n/** JSDoc */\nexport function dirname(path: string): string {\n  const result = splitPath(path);\n  const root = result[0];\n  let dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.slice(0, dir.length - 1);\n  }\n\n  return root + dir;\n}\n\n/** JSDoc */\nexport function basename(path: string, ext?: string): string {\n  let f = splitPath(path)[2];\n  if (ext && f.slice(ext.length * -1) === ext) {\n    f = f.slice(0, f.length - ext.length);\n  }\n  return f;\n}\n","import type { Integration } from '@sentry/types';\n\nexport type UserIntegrationsFunction = (integrations: Integration[]) => Integration[];\nexport type UserIntegrations = Integration[] | UserIntegrationsFunction;\nexport type IntegrationWithExclusionOption = Integration & {\n  /**\n   * Allow the user to exclude this integration by not returning it from a function provided as the `integrations` option\n   * in `Sentry.init()`. Meant to be used with default integrations, the idea being that if a user has actively filtered\n   * an integration out, we should be able to respect that choice if we wish.\n   */\n  allowExclusionByUser?: boolean;\n};\n\ntype ForcedIntegrationOptions = {\n  [keyPath: string]: unknown;\n};\n\n/**\n * Recursively traverses an object to update an existing nested key.\n * Note: The provided key path must include existing properties,\n * the function will not create objects while traversing.\n *\n * @param obj An object to update\n * @param value The value to update the nested key with\n * @param keyPath The path to the key to update ex. fizz.buzz.foo\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setNestedKey(obj: Record<string, any>, keyPath: string, value: unknown): void {\n  // Ex. foo.bar.zoop will extract foo and bar.zoop\n  const match = keyPath.match(/([a-z_]+)\\.(.*)/i);\n  // The match will be null when there's no more recursing to do, i.e., when we've reached the right level of the object\n  if (match === null) {\n    obj[keyPath] = value;\n  } else {\n    // `match[1]` is the initial segment of the path, and `match[2]` is the remainder of the path\n    const innerObj = obj[match[1]];\n    setNestedKey(innerObj, match[2], value);\n  }\n}\n\n/**\n * Enforces inclusion of a given integration with specified options in an integration array originally determined by the\n * user, by either including the given default instance or by patching an existing user instance with the given options.\n *\n * Ideally this would happen when integrations are set up, but there isn't currently a mechanism there for merging\n * options from a default integration instance with those from a user-provided instance of the same integration, only\n * for allowing the user to override a default instance entirely. (TODO: Fix that.)\n *\n * @param defaultIntegrationInstance An instance of the integration with the correct options already set\n * @param userIntegrations Integrations defined by the user.\n * @param forcedOptions Options with which to patch an existing user-derived instance on the integration.\n * @returns A final integrations array.\n *\n * @deprecated This will be removed in v8.\n */\nexport function addOrUpdateIntegration<T extends UserIntegrations>(\n  defaultIntegrationInstance: Integration,\n  userIntegrations: T,\n  forcedOptions: ForcedIntegrationOptions = {},\n): T {\n  return (\n    Array.isArray(userIntegrations)\n      ? addOrUpdateIntegrationInArray(defaultIntegrationInstance, userIntegrations, forcedOptions)\n      : addOrUpdateIntegrationInFunction(\n          defaultIntegrationInstance,\n          // Somehow TS can't figure out that not being an array makes this necessarily a function\n          userIntegrations as UserIntegrationsFunction,\n          forcedOptions,\n        )\n  ) as T;\n}\n\nfunction addOrUpdateIntegrationInArray(\n  defaultIntegrationInstance: Integration,\n  userIntegrations: Integration[],\n  forcedOptions: ForcedIntegrationOptions,\n): Integration[] {\n  const userInstance = userIntegrations.find(integration => integration.name === defaultIntegrationInstance.name);\n\n  if (userInstance) {\n    for (const [keyPath, value] of Object.entries(forcedOptions)) {\n      setNestedKey(userInstance, keyPath, value);\n    }\n\n    return userIntegrations;\n  }\n\n  return [...userIntegrations, defaultIntegrationInstance];\n}\n\nfunction addOrUpdateIntegrationInFunction(\n  defaultIntegrationInstance: IntegrationWithExclusionOption,\n  userIntegrationsFunc: UserIntegrationsFunction,\n  forcedOptions: ForcedIntegrationOptions,\n): UserIntegrationsFunction {\n  const wrapper: UserIntegrationsFunction = defaultIntegrations => {\n    const userFinalIntegrations = userIntegrationsFunc(defaultIntegrations);\n\n    // There are instances where we want the user to be able to prevent an integration from appearing at all, which they\n    // would do by providing a function which filters out the integration in question. If that's happened in one of\n    // those cases, don't add our default back in.\n    if (defaultIntegrationInstance.allowExclusionByUser) {\n      const userFinalInstance = userFinalIntegrations.find(\n        integration => integration.name === defaultIntegrationInstance.name,\n      );\n      if (!userFinalInstance) {\n        return userFinalIntegrations;\n      }\n    }\n\n    return addOrUpdateIntegrationInArray(defaultIntegrationInstance, userFinalIntegrations, forcedOptions);\n  };\n\n  return wrapper;\n}\n","/**\n * Creates a cache that evicts keys in fifo order\n * @param size {Number}\n */\nexport function makeFifoCache<Key extends string, Value>(\n  size: number,\n): {\n  get: (key: Key) => Value | undefined;\n  add: (key: Key, value: Value) => void;\n  delete: (key: Key) => boolean;\n  clear: () => void;\n  size: () => number;\n} {\n  // Maintain a fifo queue of keys, we cannot rely on Object.keys as the browser may not support it.\n  let evictionOrder: Key[] = [];\n  let cache: Record<string, Value> = {};\n\n  return {\n    add(key: Key, value: Value) {\n      while (evictionOrder.length >= size) {\n        // shift is O(n) but this is small size and only happens if we are\n        // exceeding the cache size so it should be fine.\n        const evictCandidate = evictionOrder.shift();\n\n        if (evictCandidate !== undefined) {\n          // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n          delete cache[evictCandidate];\n        }\n      }\n\n      // in case we have a collision, delete the old key.\n      if (cache[key]) {\n        this.delete(key);\n      }\n\n      evictionOrder.push(key);\n      cache[key] = value;\n    },\n    clear() {\n      cache = {};\n      evictionOrder = [];\n    },\n    get(key: Key): Value | undefined {\n      return cache[key];\n    },\n    size() {\n      return evictionOrder.length;\n    },\n    // Delete cache key and return true if it existed, false otherwise.\n    delete(key: Key): boolean {\n      if (!cache[key]) {\n        return false;\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete cache[key];\n\n      for (let i = 0; i < evictionOrder.length; i++) {\n        if (evictionOrder[i] === key) {\n          evictionOrder.splice(i, 1);\n          break;\n        }\n      }\n\n      return true;\n    },\n  };\n}\n","import type { StackFrame } from '@sentry/types';\n\nimport { dropUndefinedKeys } from './object';\nimport { filenameIsInApp } from './stacktrace';\n\ntype WatchdogReturn = {\n  /** Resets the watchdog timer */\n  poll: () => void;\n  /** Enables or disables the watchdog timer */\n  enabled: (state: boolean) => void;\n};\n\ntype CreateTimerImpl = () => { getTimeMs: () => number; reset: () => void };\n\n/**\n * A node.js watchdog timer\n * @param pollInterval The interval that we expect to get polled at\n * @param anrThreshold The threshold for when we consider ANR\n * @param callback The callback to call for ANR\n * @returns An object with `poll` and `enabled` functions {@link WatchdogReturn}\n */\nexport function watchdogTimer(\n  createTimer: CreateTimerImpl,\n  pollInterval: number,\n  anrThreshold: number,\n  callback: () => void,\n): WatchdogReturn {\n  const timer = createTimer();\n  let triggered = false;\n  let enabled = true;\n\n  setInterval(() => {\n    const diffMs = timer.getTimeMs();\n\n    if (triggered === false && diffMs > pollInterval + anrThreshold) {\n      triggered = true;\n      if (enabled) {\n        callback();\n      }\n    }\n\n    if (diffMs < pollInterval + anrThreshold) {\n      triggered = false;\n    }\n  }, 20);\n\n  return {\n    poll: () => {\n      timer.reset();\n    },\n    enabled: (state: boolean) => {\n      enabled = state;\n    },\n  };\n}\n\n// types copied from inspector.d.ts\ninterface Location {\n  scriptId: string;\n  lineNumber: number;\n  columnNumber?: number;\n}\n\ninterface CallFrame {\n  functionName: string;\n  location: Location;\n  url: string;\n}\n\n/**\n * Converts Debugger.CallFrame to Sentry StackFrame\n */\nexport function callFrameToStackFrame(\n  frame: CallFrame,\n  url: string | undefined,\n  getModuleFromFilename: (filename: string | undefined) => string | undefined,\n): StackFrame {\n  const filename = url ? url.replace(/^file:\\/\\//, '') : undefined;\n\n  // CallFrame row/col are 0 based, whereas StackFrame are 1 based\n  const colno = frame.location.columnNumber ? frame.location.columnNumber + 1 : undefined;\n  const lineno = frame.location.lineNumber ? frame.location.lineNumber + 1 : undefined;\n\n  return dropUndefinedKeys({\n    filename,\n    module: getModuleFromFilename(filename),\n    function: frame.functionName || '?',\n    colno,\n    lineno,\n    in_app: filename ? filenameIsInApp(filename) : undefined,\n  });\n}\n","/** A simple Least Recently Used map */\nexport class LRUMap<K, V> {\n  private readonly _cache: Map<K, V>;\n\n  public constructor(private readonly _maxSize: number) {\n    this._cache = new Map<K, V>();\n  }\n\n  /** Get the current size of the cache */\n  public get size(): number {\n    return this._cache.size;\n  }\n\n  /** Get an entry or undefined if it was not in the cache. Re-inserts to update the recently used order */\n  public get(key: K): V | undefined {\n    const value = this._cache.get(key);\n    if (value === undefined) {\n      return undefined;\n    }\n    // Remove and re-insert to update the order\n    this._cache.delete(key);\n    this._cache.set(key, value);\n    return value;\n  }\n\n  /** Insert an entry and evict an older entry if we've reached maxSize */\n  public set(key: K, value: V): void {\n    if (this._cache.size >= this._maxSize) {\n      // keys() returns an iterator in insertion order so keys().next() gives us the oldest key\n      this._cache.delete(this._cache.keys().next().value);\n    }\n    this._cache.set(key, value);\n  }\n\n  /** Remove an entry and return the entry if it was in the cache */\n  public remove(key: K): V | undefined {\n    const value = this._cache.get(key);\n    if (value) {\n      this._cache.delete(key);\n    }\n    return value;\n  }\n\n  /** Clear all entries */\n  public clear(): void {\n    this._cache.clear();\n  }\n\n  /** Get all the keys */\n  public keys(): Array<K> {\n    return Array.from(this._cache.keys());\n  }\n\n  /** Get all the values */\n  public values(): Array<V> {\n    const values: V[] = [];\n    this._cache.forEach(value => values.push(value));\n    return values;\n  }\n}\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { _nullishCoalesce } from './_nullishCoalesce';\n\n/**\n * Polyfill for the nullish coalescing operator (`??`), when used in situations where at least one of the values is the\n * result of an async operation.\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nexport async function _asyncNullishCoalesce(lhs: unknown, rhsFn: () => unknown): Promise<unknown> {\n  return _nullishCoalesce(lhs, rhsFn);\n}\n\n// Sucrase version:\n// async function _asyncNullishCoalesce(lhs, rhsFn) {\n//   if (lhs != null) {\n//     return lhs;\n//   } else {\n//     return await rhsFn();\n//   }\n// }\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport type { GenericFunction } from './types';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions, for situations in which at least one part of the expression is async.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase) See\n * https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nexport async function _asyncOptionalChain(ops: unknown[]): Promise<unknown> {\n  let lastAccessLHS: unknown = undefined;\n  let value = ops[0];\n  let i = 1;\n  while (i < ops.length) {\n    const op = ops[i] as string;\n    const fn = ops[i + 1] as (intermediateValue: unknown) => Promise<unknown>;\n    i += 2;\n    // by checking for loose equality to `null`, we catch both `null` and `undefined`\n    if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n      // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n      return;\n    }\n    if (op === 'access' || op === 'optionalAccess') {\n      lastAccessLHS = value;\n      value = await fn(value);\n    } else if (op === 'call' || op === 'optionalCall') {\n      value = await fn((...args: unknown[]) => (value as GenericFunction).call(lastAccessLHS, ...args));\n      lastAccessLHS = undefined;\n    }\n  }\n  return value;\n}\n\n// Sucrase version:\n// async function _asyncOptionalChain(ops) {\n//   let lastAccessLHS = undefined;\n//   let value = ops[0];\n//   let i = 1;\n//   while (i < ops.length) {\n//     const op = ops[i];\n//     const fn = ops[i + 1];\n//     i += 2;\n//     if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n//       return undefined;\n//     }\n//     if (op === 'access' || op === 'optionalAccess') {\n//       lastAccessLHS = value;\n//       value = await fn(value);\n//     } else if (op === 'call' || op === 'optionalCall') {\n//       value = await fn((...args) => value.call(lastAccessLHS, ...args));\n//       lastAccessLHS = undefined;\n//     }\n//   }\n//   return value;\n// }\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { _asyncOptionalChain } from './_asyncOptionalChain';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions, in cases where the value of the expression is to be deleted.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase) See\n * https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The return value of the `delete` operator: `true`, unless the deletion target is an own, non-configurable\n * property (one which can't be deleted or turned into an accessor, and whose enumerability can't be changed), in which\n * case `false`.\n */\nexport async function _asyncOptionalChainDelete(ops: unknown[]): Promise<boolean> {\n  const result = (await _asyncOptionalChain(ops)) as Promise<boolean | null>;\n  // If `result` is `null`, it means we didn't get to the end of the chain and so nothing was deleted (in which case,\n  // return `true` since that's what `delete` does when it no-ops). If it's non-null, we know the delete happened, in\n  // which case we return whatever the `delete` returned, which will be a boolean.\n  return result == null ? true : (result as Promise<boolean>);\n}\n\n// Sucrase version:\n// async function asyncOptionalChainDelete(ops) {\n//   const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops);\n//   return result == null ? true : result;\n// }\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { _optionalChain } from './_optionalChain';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions, in cases where the value of the expression is to be deleted.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase) See\n * https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The return value of the `delete` operator: `true`, unless the deletion target is an own, non-configurable\n * property (one which can't be deleted or turned into an accessor, and whose enumerability can't be changed), in which\n * case `false`.\n */\nexport function _optionalChainDelete(ops: unknown[]): boolean {\n  const result = _optionalChain(ops) as boolean | null;\n  // If `result` is `null`, it means we didn't get to the end of the chain and so nothing was deleted (in which case,\n  // return `true` since that's what `delete` does when it no-ops). If it's non-null, we know the delete happened, in\n  // which case we return whatever the `delete` returned, which will be a boolean.\n  return result == null ? true : result;\n}\n\n// Sucrase version:\n// function _optionalChainDelete(ops) {\n//   const result = _optionalChain(ops);\n//   // by checking for loose equality to `null`, we catch both `null` and `undefined`\n//   return result == null ? true : result;\n// }\n","// Based on https://github.com/sindresorhus/escape-string-regexp but with modifications to:\n//   a) reduce the size by skipping the runtime type - checking\n//   b) ensure it gets down - compiled for old versions of Node(the published package only supports Node 12+).\n//\n// MIT License\n//\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n// documentation files(the \"Software\"), to deal in the Software without restriction, including without limitation\n// the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and\n// to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n// the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\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 * @param regexString The string to escape\n * @returns An version of the string with all special regex characters escaped\n */\nexport function escapeStringForRegex(regexString: string): string {\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","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","import {Chart, registerables} from '../dist/chart.esm.js';\n\nChart.register(...registerables);\n\nexport default Chart;\n","/*!\n * chartjs-adapter-luxon v1.1.0\n * https://www.chartjs.org\n * (c) 2021 chartjs-adapter-luxon Contributors\n * Released under the MIT license\n */\nimport { _adapters } from 'chart.js';\nimport { DateTime } from 'luxon';\n\nconst FORMATS = {\n  datetime: DateTime.DATETIME_MED_WITH_SECONDS,\n  millisecond: 'h:mm:ss.SSS a',\n  second: DateTime.TIME_WITH_SECONDS,\n  minute: DateTime.TIME_SIMPLE,\n  hour: {hour: 'numeric'},\n  day: {day: 'numeric', month: 'short'},\n  week: 'DD',\n  month: {month: 'short', year: 'numeric'},\n  quarter: \"'Q'q - yyyy\",\n  year: {year: 'numeric'}\n};\n\n_adapters._date.override({\n  _id: 'luxon', // DEBUG\n\n  /**\n   * @private\n   */\n  _create: function(time) {\n    return DateTime.fromMillis(time, this.options);\n  },\n\n  formats: function() {\n    return FORMATS;\n  },\n\n  parse: function(value, format) {\n    const options = this.options;\n\n    if (value === null || typeof value === 'undefined') {\n      return null;\n    }\n\n    const type = typeof value;\n    if (type === 'number') {\n      value = this._create(value);\n    } else if (type === 'string') {\n      if (typeof format === 'string') {\n        value = DateTime.fromFormat(value, format, options);\n      } else {\n        value = DateTime.fromISO(value, options);\n      }\n    } else if (value instanceof Date) {\n      value = DateTime.fromJSDate(value, options);\n    } else if (type === 'object' && !(value instanceof DateTime)) {\n      value = DateTime.fromObject(value);\n    }\n\n    return value.isValid ? value.valueOf() : null;\n  },\n\n  format: function(time, format) {\n    const datetime = this._create(time);\n    return typeof format === 'string'\n      ? datetime.toFormat(format, this.options)\n      : datetime.toLocaleString(format);\n  },\n\n  add: function(time, amount, unit) {\n    const args = {};\n    args[unit] = amount;\n    return this._create(time).plus(args).valueOf();\n  },\n\n  diff: function(max, min, unit) {\n    return this._create(max).diff(this._create(min)).as(unit).valueOf();\n  },\n\n  startOf: function(time, unit, weekday) {\n    if (unit === 'isoWeek') {\n      weekday = Math.trunc(Math.min(Math.max(0, weekday), 6));\n      const dateTime = this._create(time);\n      return dateTime.minus({days: (dateTime.weekday - weekday + 7) % 7}).startOf('day').valueOf();\n    }\n    return unit ? this._create(time).startOf(unit).valueOf() : time;\n  },\n\n  endOf: function(time, unit) {\n    return this._create(time).endOf(unit).valueOf();\n  }\n});\n","import { isNone, isPresent, isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport { getOwner } from '@ember/application';\nimport Service from '@ember/service';\nimport { serializeCookie } from '../utils/serialize-cookie.ts';\n\nconst DEFAULTS = { raw: false };\nconst MAX_COOKIE_BYTE_LENGTH = 4096;\n\ntype ReadOptions = {\n  raw?: boolean;\n  domain?: never;\n  expires?: never;\n  maxAge?: never;\n  path?: never;\n};\n\nexport type WriteOptions = {\n  domain?: string;\n  path?: string;\n  secure?: boolean;\n  raw?: boolean;\n  sameSite?: 'Strict' | 'Lax' | 'None';\n  signed?: never;\n  httpOnly?: boolean;\n  partitioned?: boolean;\n} & ({ expires?: Date; maxAge?: never } | { maxAge?: number; expires?: never });\n\ntype ClearOptions = {\n  domain?: string;\n  path?: string;\n  secure?: boolean;\n\n  expires?: never;\n  maxAge?: never;\n  raw?: never;\n};\n\ntype CookiePair = [string, string];\n\ntype FastbootCookies = Record<string, { value?: string; options?: any }>;\n\nexport default class CookiesService extends Service {\n  _fastBoot:\n    | any\n    | {\n        request?: {\n          cookies?: Record<string, string>;\n        };\n      };\n  _fastBootCookiesCache?: FastbootCookies;\n\n  protected _document: Document = window.document;\n\n  constructor() {\n    super(...arguments);\n\n    let owner = getOwner(this);\n    if (typeof this._fastBoot === 'undefined' && owner) {\n      this._fastBoot = owner.lookup('service:fastboot');\n    }\n  }\n\n  _getDocumentCookies() {\n    let all = this._document.cookie.split(';');\n    let filtered = this._filterDocumentCookies(all);\n\n    return filtered.reduce(\n      (acc, cookie) => {\n        if (!isEmpty(cookie)) {\n          let [key, value] = cookie;\n          acc[key.trim()] = (value || '').trim();\n        }\n        return acc;\n      },\n      {} as Record<string, string>\n    );\n  }\n\n  _getFastBootCookies() {\n    const cookies = this._fastBoot.request.cookies;\n    const fastBootCookies = Object.keys(cookies).reduce((acc, name) => {\n      const value = cookies[name];\n\n      if (typeof value === 'object') {\n        acc[name] = value;\n      } else {\n        acc[name] = { value };\n      }\n\n      return acc;\n    }, {} as FastbootCookies);\n    const fastBootCookiesCache = this._fastBootCookiesCache || {};\n\n    const mergedFastBootCookies = Object.assign({}, fastBootCookies, fastBootCookiesCache);\n    this._fastBootCookiesCache = mergedFastBootCookies;\n    return this._filterCachedFastBootCookies(mergedFastBootCookies);\n  }\n\n  read(): Record<string, string | undefined>;\n  read(_name: string): string | undefined;\n  read(\n    name?: string,\n    options: ReadOptions = {}\n  ): string | undefined | Record<string, string | undefined> {\n    options = Object.assign({}, DEFAULTS, options || {});\n    assert(\n      'Domain, Expires, Max-Age, and Path options cannot be set when reading cookies',\n      isEmpty(options.domain) &&\n        isEmpty(options.expires) &&\n        isEmpty(options.maxAge) &&\n        isEmpty(options.path)\n    );\n\n    let all: Record<string, string | undefined> = {};\n    if (this._isFastBoot()) {\n      all = this._getFastBootCookies();\n    } else {\n      all = this._getDocumentCookies();\n    }\n\n    if (name) {\n      return this._decodeValue(all[name], options.raw);\n    } else {\n      Object.keys(all).forEach(name => (all[name] = this._decodeValue(all[name], options.raw)));\n      return all;\n    }\n  }\n\n  write(name: string, value: unknown, options?: WriteOptions) {\n    options = Object.assign({}, DEFAULTS, options || {});\n    assert(\n      \"Cookies cannot be set as signed as signed cookies would not be modifyable in the browser as it has no knowledge of the express server's signing key!\",\n      !options.signed\n    );\n    assert(\n      'Cookies cannot be set with both maxAge and an explicit expiration time!',\n      isEmpty(options.expires) || isEmpty(options.maxAge)\n    );\n\n    value = this._encodeValue(value as string, options.raw);\n\n    assert(\n      `Cookies larger than ${MAX_COOKIE_BYTE_LENGTH} bytes are not supported by most browsers!`,\n      typeof value === 'string' && this._isCookieSizeAcceptable(value)\n    );\n\n    if (this._isFastBoot()) {\n      this._writeFastBootCookie(name, value, options);\n    } else {\n      assert('Cookies cannot be set to be HTTP-only from a browser!', !options.httpOnly);\n\n      options.path = options.path || this._normalizedDefaultPath();\n      this._writeDocumentCookie(name, value, options);\n    }\n  }\n\n  clear(name: string, options?: ClearOptions) {\n    options = Object.assign({}, options || {});\n    assert(\n      'Expires, Max-Age, and raw options cannot be set when clearing cookies',\n      isEmpty(options.expires) && isEmpty(options.maxAge) && isEmpty(options.raw)\n    );\n\n    options.expires = new Date('1970-01-01') as never;\n    options.path = options.path || this._normalizedDefaultPath();\n    this.write(name, null, options);\n  }\n\n  exists(name: string) {\n    let all;\n    if (this._isFastBoot()) {\n      all = this._getFastBootCookies();\n    } else {\n      all = this._getDocumentCookies();\n    }\n\n    return Object.prototype.hasOwnProperty.call(all, name);\n  }\n\n  _writeDocumentCookie(name: string, value: unknown, options: WriteOptions = {}) {\n    let serializedCookie = this._serializeCookie(name, value, options);\n    this._document.cookie = serializedCookie;\n  }\n\n  _writeFastBootCookie(name: string, value: unknown, options: WriteOptions = {}) {\n    let responseHeaders = this._fastBoot.response.headers;\n    let serializedCookie = this._serializeCookie(name, value, options);\n\n    if (options.maxAge) {\n      options.maxAge *= 1000;\n    }\n\n    this._cacheFastBootCookie(name, value, options);\n\n    let replaced = false;\n    let existing = responseHeaders.getAll('set-cookie');\n\n    for (let i = 0; i < existing.length; i++) {\n      if (existing[i].startsWith(`${name}=`)) {\n        existing[i] = serializedCookie;\n        replaced = true;\n        break;\n      }\n    }\n\n    if (!replaced) {\n      responseHeaders.append('set-cookie', serializedCookie);\n    }\n  }\n\n  _cacheFastBootCookie(name: string, value: unknown, options: WriteOptions = {}) {\n    let fastBootCache = this._fastBootCookiesCache || {};\n    let cachedOptions: WriteOptions = Object.assign({}, options);\n\n    if (cachedOptions.maxAge && options.maxAge) {\n      let expires = new Date();\n      expires.setSeconds(expires.getSeconds() + options.maxAge);\n\n      delete cachedOptions.maxAge;\n      (cachedOptions as WriteOptions & { expires?: Date; maxAge?: never }).expires = expires;\n    }\n\n    fastBootCache[name] = { value: value as string, options: cachedOptions };\n    this._fastBootCookiesCache = fastBootCache;\n  }\n\n  _filterCachedFastBootCookies(fastBootCookies: FastbootCookies) {\n    let { path: requestPath } = this._fastBoot.request;\n\n    let host = this._fastBoot?.request?.host;\n\n    return Object.keys(fastBootCookies).reduce(\n      (acc, name) => {\n        let { value, options } = fastBootCookies[name] as { value: string; options: ReadOptions };\n        options = options || {};\n\n        let { path: optionsPath, domain, expires } = options;\n\n        if (optionsPath && requestPath.indexOf(optionsPath) !== 0) {\n          return acc;\n        }\n\n        if (domain && host.indexOf(domain) + (domain as string).length !== host.length) {\n          return acc;\n        }\n\n        if (expires && (expires as Date) < new Date()) {\n          return acc;\n        }\n\n        acc[name] = value;\n        return acc;\n      },\n      {} as Record<string, string>\n    );\n  }\n\n  _encodeValue(value: string | undefined, raw?: boolean) {\n    if (isNone(value)) {\n      return '';\n    } else if (raw) {\n      return value;\n    } else {\n      return encodeURIComponent(value);\n    }\n  }\n\n  _decodeValue(value: string | undefined, raw?: boolean) {\n    if (isNone(value) || raw) {\n      return value;\n    } else {\n      return decodeURIComponent(value);\n    }\n  }\n\n  _filterDocumentCookies(unfilteredCookies: string[]): CookiePair[] {\n    return unfilteredCookies\n      .map<CookiePair>(c => {\n        let separatorIndex = c.indexOf('=');\n        return [c.substring(0, separatorIndex), c.substring(separatorIndex + 1)];\n      })\n      .filter(c => c.length === 2 && isPresent(c[0]));\n  }\n\n  _serializeCookie(name: string, value: unknown, options: WriteOptions = {}) {\n    return serializeCookie(name, value, options);\n  }\n\n  _isCookieSizeAcceptable(value: string) {\n    // Counting bytes varies Pre-ES6 and in ES6\n    // This snippet counts the bytes in the value\n    // about to be stored as the cookie:\n    // See https://stackoverflow.com/a/25994411/6657064\n    let _byteCount = 0;\n    let i = 0;\n    let c;\n    while ((c = value.charCodeAt(i++))) {\n      _byteCount += c >> 11 ? 3 : c >> 7 ? 2 : 1;\n    }\n\n    return _byteCount < MAX_COOKIE_BYTE_LENGTH;\n  }\n\n  _normalizedDefaultPath() {\n    if (!this._isFastBoot()) {\n      let pathname = window.location.pathname;\n      return pathname.substring(0, pathname.lastIndexOf('/'));\n    }\n  }\n\n  _isFastBoot() {\n    return this._fastBoot && this._fastBoot.isFastBoot;\n  }\n}\n","import { typeOf, isEmpty } from '@ember/utils';\n\ninterface Options {\n  maxAge?: number | string;\n  domain?: string;\n  expires?: Date;\n  secure?: boolean;\n  httpOnly?: boolean;\n  path?: string;\n  sameSite?: string;\n  partitioned?: boolean;\n}\n\nexport const serializeCookie = (name: string, value: string | unknown, options: Options = {}) => {\n  let cookie = `${name}=${value}`;\n\n  if (!isEmpty(options.domain)) {\n    cookie = `${cookie}; domain=${options.domain}`;\n  }\n  if (options.expires && typeOf(options.expires) === 'date') {\n    cookie = `${cookie}; expires=${options.expires.toUTCString()}`;\n  }\n  if (!isEmpty(options.maxAge)) {\n    cookie = `${cookie}; max-age=${options.maxAge}`;\n  }\n  if (options.secure) {\n    cookie = `${cookie}; secure`;\n  }\n  if (options.httpOnly) {\n    cookie = `${cookie}; httpOnly`;\n  }\n  if (!isEmpty(options.path)) {\n    cookie = `${cookie}; path=${options.path}`;\n  }\n  if (!isEmpty(options.sameSite)) {\n    cookie = `${cookie}; SameSite=${options.sameSite}`;\n  }\n  if (options.partitioned) {\n    cookie = `${cookie}; Partitioned`;\n  }\n\n  return cookie;\n};\n","// eslint-disable-next-line ember/no-classic-components\nimport EmberComponent from '@ember/component';\nimport Helper from '@ember/component/helper';\nimport { assert, runInDebug } from '@ember/debug';\n\nimport { ensureSafeComponent } from '@embroider/util';\n\nimport type { ComponentLike } from '@glint/template';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction UNINITIALIZED() {}\n\nexport type ElementFromTagName<T extends string> = T extends keyof HTMLElementTagNameMap\n  ? HTMLElementTagNameMap[T]\n  : Element;\n\ntype Positional<T extends string> = [name: T];\ntype Return<T extends string> = ComponentLike<{\n  Element: ElementFromTagName<T>;\n  Blocks: { default: [] };\n}>;\n\nexport interface ElementSignature<T extends string> {\n  Args: {\n    Positional: Positional<T>;\n  };\n  Return: Return<T> | undefined;\n}\n\nexport default class ElementHelper<T extends string> extends Helper<ElementSignature<T>> {\n  tagName: string | (() => void) = UNINITIALIZED;\n  componentClass?: Return<T>;\n\n  compute(params: Positional<T>, hash: object) {\n    assert('The `element` helper takes a single positional argument', params.length === 1);\n    assert(\n      'The `element` helper does not take any named arguments',\n      Object.keys(hash).length === 0\n    );\n\n    let tagName = params[0];\n\n    if (tagName !== this.tagName) {\n      this.tagName = tagName;\n\n      if (typeof tagName === 'string') {\n        this.componentClass = ensureSafeComponent(\n          // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n          // @ts-ignore\n          class DynamicElement extends EmberComponent {\n            tagName = tagName; // eslint-disable-line ember/require-tagless-components\n          },\n          this\n        ) as unknown as Return<T>;\n      } else {\n        this.componentClass = undefined;\n\n        runInDebug(() => {\n          let message = 'The argument passed to the `element` helper must be a string';\n\n          try {\n            message += ` (you passed \\`${tagName}\\`)`;\n          } catch (e) {\n            // ignore\n          }\n\n          assert(message, tagName === undefined || tagName === null);\n        });\n      }\n    }\n\n    return this.componentClass;\n  }\n}\n","export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}","import { capabilities } from '@ember/modifier';\nimport { destroy } from '@ember/destroyable';\nimport { dependencySatisfies } from '@embroider/macros';\nimport type Owner from '@ember/owner';\n\nimport ClassBasedModifier from './modifier';\nimport { ArgsFor, ElementFor } from '../signature';\n\n/**\n * The state bucket used throughout the life-cycle of the modifier. Basically a\n * state *machine*, where the framework calls us with the version we hand back\n * to it at each phase. The two states are the two `extends` versions of this\n * below.\n *\n * @internal\n */\ninterface State<S> {\n  instance: ClassBasedModifier<S>;\n}\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\n */\ninterface CreatedState<S> extends State<S> {\n  element: null;\n}\n\n/**\n * The `State` after calling `installModifier`, and therefore the state\n * available in all `updateModifier` calls and in `destroyModifier`.\n * @internal\n */\ninterface InstalledState<S> extends State<S> {\n  element: ElementFor<S>;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n  state: CreatedState<S>,\n  element: ElementFor<S>\n): InstalledState<S> {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state as State<S> as InstalledState<S>;\n  installedState.element = element;\n  return installedState;\n}\n\nexport default class ClassBasedModifierManager<S> {\n  capabilities = capabilities(\n    dependencySatisfies('ember-source', '>=3.22.0') ? '3.22' : '3.13'\n  );\n\n  constructor(private owner: Owner) {}\n\n  createModifier(\n    modifierClass: typeof ClassBasedModifier,\n    args: ArgsFor<S>\n  ): CreatedState<S> {\n    const instance = new modifierClass(this.owner, args);\n    return { instance, element: null };\n  }\n\n  installModifier(\n    createdState: CreatedState<S>,\n    element: ElementFor<S>,\n    args: ArgsFor<S>\n  ): void {\n    const state = installElement(createdState, element);\n    state.instance.modify(element, args.positional, args.named);\n  }\n\n  updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n    state.instance.modify(state.element, args.positional, args.named);\n  }\n\n  destroyModifier({ instance }: InstalledState<S>): void {\n    destroy(instance);\n  }\n}\n","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport type Owner from '@ember/owner';\nimport Manager from './modifier-manager';\nimport {\n  ElementFor,\n  ArgsFor,\n  DefaultSignature,\n  PositionalArgs,\n  NamedArgs,\n} from '../signature';\nimport Opaque from '../opaque';\n\n// Preserve the signature on a class-based modifier so it can be plucked off\n// later (by e.g. Glint), using interface merging with an opaque item to\n// preserve it in the type system. The fact that it's an empty interface is\n// actually the point: it *only* hooks the type parameter into the opaque\n// (nominal) type. Note that this is distinct from the function-based modifier\n// type intentionally, because it is actually the static class side of a\n// class-based modifier which corresponds to the result of calling `modifier()`\n// with a callback defining a function-based modifier.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport default interface ClassBasedModifier<S = DefaultSignature>\n  extends Opaque<S> {}\n\n/**\n * A base class for modifiers which need more capabilities than function-based\n * modifiers. Useful if, for example:\n *\n * 1. You need to inject services and access them\n * 2. You need fine-grained control of updates, either for performance or\n *    convenience reasons, and don't want to teardown the state of your modifier\n *    every time only to set it up again.\n * 3. You need to store some local state within your modifier.\n *\n * The lifecycle hooks of class modifiers are tracked. When they run, they any\n * values they access will be added to the modifier, and the modifier will\n * update if any of those values change.\n */\nexport default class ClassBasedModifier<S = DefaultSignature> {\n  // `args` is passed here for the sake of subclasses to have access to args in\n  // their constructors while having constructors which are properly asssignable\n  // for the superclass.\n  /**\n   *\n   * @param owner An instance of an Owner (for service injection etc.).\n   * @param args The positional and named arguments passed to the modifier.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  constructor(owner: Owner, args: ArgsFor<S>) {\n    setOwner(this, owner);\n  }\n\n  /**\n   * Called when the modifier is installed and any time any tracked state used\n   * in the modifier changes.\n   *\n   * If you need to do first-time-only setup, create a class field representing\n   * the initialization state and check it when running the hook. That is also\n   * where and when you should use `registerDestructor` for any teardown you\n   * need to do. For example:\n   *\n   * ```js\n   * function disconnect(instance) {\n   *  instance.observer?.disconnect();\n   * }\n   *\n   * class IntersectionObserver extends Modifier {\n   *   observer;\n   *\n   *   constructor(owner, args) {\n   *     super(owner, args);\n   *     registerDestructor(this, disconnect);\n   *   }\n   *\n   *   modify(element, callback, options) {\n   *     disconnect(this);\n   *\n   *     this.observer = new IntersectionObserver(callback, options);\n   *     this.observer.observe(element);\n   *   }\n   * }\n   * ```\n   *\n   * @param element The element to which the modifier is applied.\n   * @param positional The positional arguments to the modifier.\n   * @param named The named arguments to the modifier.\n   */\n  modify(\n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    element: ElementFor<S>,\n    positional: PositionalArgs<S>,\n    named: NamedArgs<S>\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): void {\n    /* no op, for subclassing */\n  }\n}\n\nsetModifierManager((owner) => new Manager(owner), ClassBasedModifier);\n","import { setModifierManager } from '@ember/modifier';\nimport {\n  ElementFor,\n  EmptyObject,\n  NamedArgs,\n  PositionalArgs,\n} from '../signature';\nimport Modifier from '../class-based/modifier';\nimport FunctionBasedModifierManager from './modifier-manager';\n\n// Provide a singleton manager.\nconst MANAGER = new FunctionBasedModifierManager();\n\n// This type exists to provide a non-user-constructible, non-subclassable\n// type representing the conceptual \"instance type\" of a function modifier.\n// The abstract field of type `never` prevents subclassing in userspace of\n// the value returned from `modifier()`. By extending `Modifier<S>`, any\n// augmentations of the `Modifier` type performed by tools like Glint will\n// also apply to function-based modifiers as well.\nexport declare abstract class FunctionBasedModifierInstance<\n  S\n> extends Modifier<S> {\n  protected abstract __concrete__: never;\n}\n\n// This provides a type whose only purpose here is to represent the runtime\n// type of a function-based modifier: a virtually opaque item. The fact that it's\n// a bare constructor type allows `modifier()` to preserve type parameters from\n// a generic function it's passed, and by making it abstract and impossible to\n// subclass (see above) we prevent users from attempting to instantiate the return\n// value from a `modifier()` call.\nexport type FunctionBasedModifier<S> =\n  abstract new () => FunctionBasedModifierInstance<S>;\n\n/**\n * The (optional) return type for a modifier which needs to perform some kind of\n * cleanup or teardown -- for example, removing an event listener from an\n * element besides the one passed into the modifier.\n */\nexport type Teardown = () => unknown;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\nexport default function modifier<\n  E extends Element,\n  P extends unknown[],\n  N = EmptyObject\n>(\n  fn: (element: E, positional: P, named: N) => void | Teardown\n): FunctionBasedModifier<{\n  Args: {\n    Positional: P;\n    Named: N;\n  };\n  Element: E;\n}>;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to provide a `Signature` type explicitly at the\n// modifier definition site, e.g. `modifier<Sig>((el, pos, named) => {...})`.\n// **Note:** this overload must appear second, since TS' inference engine will\n// not correctly infer the type of `S` here from the types on the supplied\n// callback.\nexport default function modifier<S>(\n  fn: (\n    element: ElementFor<S>,\n    positional: PositionalArgs<S>,\n    named: NamedArgs<S>\n  ) => void | Teardown\n): FunctionBasedModifier<{\n  Element: ElementFor<S>;\n  Args: {\n    Named: NamedArgs<S>;\n    Positional: PositionalArgs<S>;\n  };\n}>;\n\n// This is the runtime signature; it performs no inference whatsover and just\n// uses the simplest version of the invocation possible since, for the case of\n// setting it on the modifier manager, we don't *need* any of that info, and\n// the two previous overloads capture all invocations from a type perspective.\nexport default function modifier(\n  fn: (\n    element: Element,\n    positional: unknown[],\n    named: object\n  ) => void | Teardown\n): FunctionBasedModifier<{\n  Element: Element;\n  Args: {\n    Named: object;\n    Positional: unknown[];\n  };\n}> {\n  // SAFETY: the cast here is a *lie*, but it is a useful one. The actual return\n  // type of `setModifierManager` today is `void`; we pretend it actually\n  // returns an opaque `Modifier` type so that we can provide a result from this\n  // type which is useful to TS-aware tooling (e.g. Glint).\n  return setModifierManager(\n    () => MANAGER,\n    fn\n  ) as unknown as FunctionBasedModifier<{\n    Element: Element;\n    Args: {\n      Named: object;\n      Positional: unknown[];\n    };\n  }>;\n}\n\n/**\n * @internal\n */\nexport type FunctionBasedModifierDefinition<S> = (\n  element: ElementFor<S>,\n  positional: PositionalArgs<S>,\n  named: NamedArgs<S>\n) => void | Teardown;\n","import { capabilities } from '@ember/modifier';\nimport { dependencySatisfies } from '@embroider/macros';\nimport type { FunctionBasedModifierDefinition, Teardown } from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\ninterface State<S> {\n  instance: FunctionBasedModifierDefinition<S>;\n}\n\ninterface CreatedState<S> extends State<S> {\n  element: null;\n}\n\ninterface InstalledState<S> extends State<S> {\n  element: ElementFor<S>;\n  teardown?: Teardown;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n  state: CreatedState<S>,\n  element: ElementFor<S>\n): InstalledState<S> {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state as State<S> as InstalledState<S>;\n  installedState.element = element;\n  return installedState;\n}\n\nexport default class FunctionBasedModifierManager<S> {\n  capabilities = capabilities(\n    dependencySatisfies('ember-source', '>=3.22.0') ? '3.22' : '3.13'\n  );\n\n  createModifier(\n    instance: FunctionBasedModifierDefinition<S>\n  ): CreatedState<S> {\n    return { element: null, instance };\n  }\n\n  installModifier(\n    createdState: CreatedState<S>,\n    element: ElementFor<S>,\n    args: ArgsFor<S>\n  ): void {\n    const state = installElement(createdState, element);\n\n    const { positional, named } = args;\n    const teardown = createdState.instance(element, positional, named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n  }\n\n  updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n    if (typeof state.teardown === 'function') {\n      state.teardown();\n    }\n\n    const teardown = state.instance(state.element, args.positional, args.named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n  }\n\n  destroyModifier(state: InstalledState<S>): void {\n    if (typeof state.teardown === 'function') {\n      state.teardown();\n    }\n  }\n}\n","import BaseHelper from './-base.js';\nimport { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\nimport '@ember/utils';\n\nvar isAfter = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    precision,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    const {\n      length\n    } = params;\n    const args = [];\n    const comparisonArgs = [];\n\n    if (length === 1) {\n      comparisonArgs.push(params[0]);\n    } else if (length === 2) {\n      args.push(params[0]);\n      comparisonArgs.push(params[1]);\n    }\n\n    return this.morphMoment(moment.moment(...args), {\n      locale,\n      timeZone\n    }).isAfter(...comparisonArgs, precision);\n  })\n});\n\nexport { isAfter as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar isBefore = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    precision,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    const {\n      length\n    } = params;\n    const args = [];\n    const comparisonArgs = [];\n\n    if (length === 1) {\n      comparisonArgs.push(params[0]);\n    } else if (length === 2) {\n      args.push(params[0]);\n      comparisonArgs.push(params[1]);\n    }\n\n    return this.morphMoment(moment.moment(...args), {\n      locale,\n      timeZone\n    }).isBefore(...comparisonArgs, precision);\n  })\n});\n\nexport { isBefore as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar isBetween = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    precision,\n    inclusivity,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n\n    const _params = [].concat(params);\n\n    const {\n      length\n    } = params;\n\n    if (length < 2 || length > 3) {\n      throw new TypeError('ember-moment: Invalid Number of arguments, expected 2 or 3');\n    }\n\n    const args = [];\n\n    if (length > 2) {\n      args.push(_params.shift());\n    }\n\n    return this.morphMoment(moment.moment(...args), {\n      locale,\n      timeZone\n    }).isBetween(..._params, precision, inclusivity);\n  })\n});\n\nexport { isBetween as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar isSameOrAfter = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    precision,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    const {\n      length\n    } = params;\n    const args = [];\n    const comparisonArgs = [];\n\n    if (length === 1) {\n      comparisonArgs.push(params[0]);\n    } else if (length === 2) {\n      args.push(params[0]);\n      comparisonArgs.push(params[1]);\n    }\n\n    return this.morphMoment(moment.moment(...args), {\n      locale,\n      timeZone\n    }).isSameOrAfter(...comparisonArgs, precision);\n  })\n});\n\nexport { isSameOrAfter as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar isSameOrBefore = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    precision,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    const {\n      length\n    } = params;\n    const args = [];\n    const comparisonArgs = [];\n\n    if (length === 1) {\n      comparisonArgs.push(params[0]);\n    } else if (length === 2) {\n      args.push(params[0]);\n      comparisonArgs.push(params[1]);\n    }\n\n    return this.morphMoment(moment.moment(...args), {\n      locale,\n      timeZone\n    }).isSameOrBefore(...comparisonArgs, precision);\n  })\n});\n\nexport { isSameOrBefore as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar isSame = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    precision,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    const {\n      length\n    } = params;\n    const args = [];\n    const comparisonArgs = [];\n\n    if (length === 1) {\n      comparisonArgs.push(params[0]);\n    } else if (length === 2) {\n      args.push(params[0]);\n      comparisonArgs.push(params[1]);\n    }\n\n    return this.morphMoment(moment.moment(...args), {\n      locale,\n      timeZone\n    }).isSame(...comparisonArgs, precision);\n  })\n});\n\nexport { isSame as default };\n","import { typeOf } from '@ember/utils';\nimport { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar momentAdd = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    precision,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    const {\n      length\n    } = params;\n    const args = [];\n    const additionArgs = [];\n\n    if (length === 1) {\n      additionArgs.push(params[0]);\n    } else if (length === 2 && typeOf(params[0]) === 'number' && typeOf(params[1]) === 'string') {\n      additionArgs.push(...params);\n    } else {\n      args.push(params[0]);\n      additionArgs.push(...params.slice(1));\n    }\n\n    return this.morphMoment(moment.moment(...args), {\n      locale,\n      timeZone\n    }).add(...additionArgs, precision);\n  })\n});\n\nexport { momentAdd as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar momentCalendar = BaseHelper.extend({\n  compute: computeFn(function (params, formatHash = {}) {\n    this._super(...arguments);\n\n    if (!params || params && params.length > 3) {\n      throw new TypeError('ember-moment: Invalid Number of arguments, at most 3');\n    }\n\n    const moment = this.moment;\n    const {\n      locale,\n      timeZone\n    } = formatHash;\n    const [date, referenceTime, formats] = params;\n    const mergedFormats = { ...formatHash,\n      locale: null,\n      timeZone: null,\n      ...formats\n    };\n    return this.morphMoment(moment.moment(date), {\n      locale,\n      timeZone\n    }).calendar(referenceTime, mergedFormats);\n  })\n});\n\nexport { momentCalendar as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar momentDiff = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    precision,\n    float,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    if (!params || params && params.length !== 2) {\n      throw new TypeError('ember-moment: Invalid Number of arguments, must be 2');\n    }\n\n    const moment = this.moment;\n    const [dateA, dateB] = params;\n    return this.morphMoment(moment.moment(dateB), {\n      locale,\n      timeZone\n    }).diff(dateA, precision, float);\n  })\n});\n\nexport { momentDiff as default };\n","import BaseHelper from './-base.js';\nimport { momentOrMomentTimezone } from '../index.js';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\nimport '@embroider/macros';\n\nvar momentDuration = BaseHelper.extend({\n  compute(params, {\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const momentService = this.moment;\n\n    if (!params || params && params.length > 2) {\n      throw new TypeError('ember-moment: Invalid Number of arguments, at most 2');\n    }\n\n    const result = momentService.moment(momentOrMomentTimezone.duration(...params));\n    return this.morphMoment(result._i, {\n      locale,\n      timeZone\n    }).humanize();\n  }\n\n});\n\nexport { momentDuration as default };\n","import { isEmpty } from '@ember/utils';\nimport { observer, get } from '@ember/object';\nimport { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/service';\n\nvar momentFormat = BaseHelper.extend({\n  // eslint-disable-next-line ember/no-observers\n  defaultFormatDidChange: observer('moment.defaultFormat', function () {\n    this.recompute();\n  }),\n  compute: computeFn(function (params, {\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    const {\n      length\n    } = params;\n\n    if (length > 3) {\n      throw new TypeError('ember-moment: Invalid number of arguments, expected at most 3');\n    }\n\n    const args = [];\n    const formatArgs = []; // eslint-disable-next-line ember/no-get\n\n    const defaultFormat = get(this, 'moment.defaultFormat');\n    args.push(params[0]);\n\n    if (length === 1 && !isEmpty(defaultFormat)) {\n      formatArgs.push(defaultFormat);\n    } else if (length === 2) {\n      formatArgs.push(params[1]);\n    } else if (length > 2) {\n      args.push(params[2]);\n      formatArgs.push(params[1]);\n    }\n\n    return this.morphMoment(moment.moment(...args), {\n      locale,\n      timeZone\n    }).format(...formatArgs);\n  })\n});\n\nexport { momentFormat as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar momentFromNow = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    hideAffix,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    return this.morphMoment(moment.moment(...params), {\n      locale,\n      timeZone\n    }).fromNow(hideAffix);\n  })\n});\n\nexport { momentFromNow as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar momentFrom = BaseHelper.extend({\n  compute: computeFn(function ([datetime, ...params], {\n    hideAffix,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    return this.morphMoment(moment.moment(datetime), {\n      locale,\n      timeZone\n    }).from(...params, hideAffix);\n  })\n});\n\nexport { momentFrom as default };\n","import { typeOf } from '@ember/utils';\nimport { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar momentSubtract = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    precision,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    const {\n      length\n    } = params;\n    const args = [];\n    const subtractionArgs = [];\n\n    if (length === 1) {\n      subtractionArgs.push(params[0]);\n    } else if (length === 2 && typeOf(params[0]) === 'number' && typeOf(params[1]) === 'string') {\n      subtractionArgs.push(...params);\n    } else {\n      args.push(params[0]);\n      subtractionArgs.push(...params.slice(1));\n    }\n\n    return this.morphMoment(moment.moment(...args), {\n      locale,\n      timeZone\n    }).subtract(...subtractionArgs, precision);\n  })\n});\n\nexport { momentSubtract as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar momentToDate = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    hidePrefix,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    return this.morphMoment(moment.moment(), {\n      locale,\n      timeZone\n    }).to(...params, hidePrefix);\n  })\n});\n\nexport { momentToDate as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar momentToNow = BaseHelper.extend({\n  compute: computeFn(function (params, {\n    hideAffix,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    const hide = hideAffix;\n    return this.morphMoment(moment.moment(...params), {\n      locale,\n      timeZone\n    }).toNow(hide);\n  })\n});\n\nexport { momentToNow as default };\n","import { c as computeFn } from '../helper-compute-36ed98e8.js';\nimport BaseHelper from './-base.js';\nimport '@ember/utils';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar momentTo = BaseHelper.extend({\n  compute: computeFn(function ([datetime, ...params], {\n    hideAffix,\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    return this.morphMoment(moment.moment(datetime), {\n      locale,\n      timeZone\n    }).to(...params, hideAffix);\n  })\n});\n\nexport { momentTo as default };\n","import BaseHelper from './-base.js';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar moment = BaseHelper.extend({\n  compute(params, {\n    locale,\n    timeZone\n  }) {\n    this._super(...arguments);\n\n    const moment = this.moment;\n    return this.morphMoment(moment.moment(...params), {\n      locale,\n      timeZone\n    });\n  }\n\n});\n\nexport { moment as default };\n","import { momentOrMomentTimezone } from '../index.js';\nimport BaseHelper from './-base.js';\nimport '@embroider/macros';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar now = BaseHelper.extend({\n  compute() {\n    this._super(...arguments);\n\n    const momentService = this.moment;\n    return momentService.moment(momentOrMomentTimezone.now());\n  }\n\n});\n\nexport { now as default };\n","import { momentOrMomentTimezone } from '../index.js';\nimport BaseHelper from './-base.js';\nimport '@embroider/macros';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar unix = BaseHelper.extend({\n  compute([unixTimeStamp]) {\n    this._super(...arguments);\n\n    return this.moment.moment(momentOrMomentTimezone.unix(unixTimeStamp));\n  }\n\n});\n\nexport { unix as default };\n","import { momentOrMomentTimezone } from '../index.js';\nimport BaseHelper from './-base.js';\nimport '@embroider/macros';\nimport '@ember/runloop';\nimport '@ember/component/helper';\nimport '@ember/object';\nimport '@ember/service';\n\nvar utc = BaseHelper.extend({\n  compute([utcTime, format]) {\n    this._super(...arguments);\n\n    return this.moment.utc(momentOrMomentTimezone.utc(utcTime, format));\n  }\n\n});\n\nexport { utc as default };\n","import Service from '@ember/service';\nimport Evented from '@ember/object/evented';\nimport { getOwner } from '@ember/application';\nimport { momentOrMomentTimezone } from '../index.js';\nimport { computed, set, setProperties } from '@ember/object';\nimport '@embroider/macros';\n\nvar moment = Service.extend(Evented, {\n  _timeZone: null,\n  locale: null,\n  localeOptions: null,\n  defaultFormat: null,\n\n  init() {\n    this._super();\n\n    this.defaultFormat = this.__config__.outputFormat;\n  },\n\n  __config__: computed(function () {\n    let config = getOwner(this).factoryFor('config:environment').class || {};\n    return config['ember-moment'] || {};\n  }).readOnly(),\n  timeZone: computed('_timeZone', {\n    get() {\n      return this._timeZone;\n    },\n\n    set(propertyKey, timeZone) {\n      if (!momentOrMomentTimezone.tz) {\n        /* eslint-disable no-console */\n        console.warn('[ember-moment] attempted to set timezone, but moment-timezone is not setup.');\n        return;\n      }\n\n      set(this, '_timeZone', timeZone);\n      return timeZone;\n    }\n\n  }),\n\n  setLocale(locale) {\n    this.changeLocale(locale);\n  },\n\n  updateLocale(locale, localeOptions = {}) {\n    this.changeLocale(locale, localeOptions);\n  },\n\n  changeLocale(locale, localeOptions = {}) {\n    setProperties(this, {\n      locale,\n      localeOptions\n    });\n    momentOrMomentTimezone.updateLocale(locale, localeOptions);\n    this.trigger('localeChanged', locale);\n  },\n\n  setTimeZone(timeZone) {\n    this.changeTimeZone(timeZone);\n  },\n\n  changeTimeZone(timeZone) {\n    set(this, 'timeZone', timeZone);\n    this.trigger('timeZoneChanged', timeZone);\n  },\n\n  isMoment(obj) {\n    return momentOrMomentTimezone.isMoment(obj);\n  },\n\n  moment() {\n    let momentObj = momentOrMomentTimezone(...arguments);\n    let {\n      locale,\n      timeZone\n    } = this;\n\n    if (locale && momentObj.locale) {\n      momentObj = momentObj.locale(locale);\n    }\n\n    if (timeZone && momentObj.tz) {\n      momentObj = momentObj.tz(timeZone);\n    }\n\n    return momentObj;\n  },\n\n  utc() {\n    let momentObj = momentOrMomentTimezone.utc(...arguments);\n    let {\n      locale\n    } = this;\n\n    if (locale && momentObj.locale) {\n      momentObj = momentObj.locale(locale);\n    }\n\n    return momentObj;\n  }\n\n});\n\nexport { moment as default };\n","import RSVP from 'rsvp';\nimport Evented from '@ember/object/evented';\nimport EmberObject from '@ember/object';\n\n/**\n  The base class for all authenticators. __This serves as a starting point for\n  implementing custom authenticators and must not be used directly.__\n\n  The authenticator authenticates the session. The actual mechanism used to do\n  this might, e.g., post a set of credentials to a server and in exchange\n  retrieve an access token, initiating authentication against an external\n  provider like Facebook, etc. The details depend on the specific authenticator.\n  Upon successful authentication, any data that the authenticator receives and\n  resolves via the promise returned from the\n  {@linkplain BaseAuthenticator.authenticate}\n  method is stored in the session's {@linkplain SessionService.data}.\n\n  The authenticator also decides whether a set of data that was restored from\n  the session store (see {@linkplain BaseStore.restore}) makes up an\n  authenticated session or not.\n\n  __Authenticators for an application are defined in the `app/authenticators`\n  directory__, e.g.:\n\n  ```js\n  // app/authenticators/oauth2.js\n  import OAuth2PasswordGrantAuthenticator from 'ember-simple-auth/authenticators/oauth2-password-grant';\n\n  export default class OAuth2Authenticator extends OAuth2PasswordGrantAuthenticator {\n    ...\n  }\n  ```\n\n  and can then be used via the name Ember CLI automatically registers for them\n  within the Ember container.\n\n  ```js\n  // app/components/login-form.js\n  import Component from '@ember/component';\n  import { inject as service } from '@ember/service';\n  import { action } from '@ember/object';\n\n  export default class LoginFormComponent extends Component {\n    &#64;service session;\n\n    &#64;action\n    authenticate() {\n      this.session.authenticate('authenticator:oauth2');\n    }\n  }\n  ```\n\n  @class BaseAuthenticator\n  @extends Ember.Object\n  @uses Ember.Evented\n  @public\n*/\nexport default EmberObject.extend(Evented, {\n  /**\n    __Triggered when the authentication data is updated by the authenticator\n    due to an external or scheduled event__. This might happen, e.g., if the\n    authenticator refreshes an expired token or an event is triggered from an\n    external authentication provider that the authenticator uses. The session\n    handles that event, passes the updated data back to the authenticator's\n    {@linkplain BaseAuthenticator.restore}\n    method and handles the result of that invocation accordingly.\n\n    @memberof BaseAuthenticator\n    @event sessionDataUpdated\n    @param {Object} data The updated session data\n    @public\n  */\n\n  /**\n    __Triggered when the authentication data is invalidated by the authenticator\n    due to an external or scheduled event__. This might happen, e.g., if a token\n    expires or an event is triggered from an external authentication provider\n    that the authenticator uses. The session handles the event and will\n    invalidate itself when it is triggered.\n\n    @memberof BaseAuthenticator\n    @event sessionDataInvalidated\n    @public\n  */\n\n  /**\n    Restores the session from a session data object. __This method is invoked\n    by the session either on application startup if session data is restored\n    from the session store__ or when properties in the store change due to\n    external events (e.g. in another tab) and the new session data needs to be\n    validated for whether it constitutes an authenticated session.\n\n    __This method returns a promise. A resolving promise results in the session\n    becoming or remaining authenticated.__ Any data the promise resolves with\n    will be saved in and accessible via the session service's\n    `data.authenticated` property (see\n    {@linkplain SessionService.data}. A rejecting\n    promise indicates that `data` does not constitute a valid session and will\n    result in the session being invalidated or remaining unauthenticated.\n\n    The `BaseAuthenticator`'s implementation always returns a rejecting\n    promise. __This method must be overridden in subclasses.__\n\n    @memberof BaseAuthenticator\n    @method restore\n    @param {Object} data The data to restore the session from\n    @return {Ember.RSVP.Promise} A promise that when it resolves results in the session becoming or remaining authenticated\n    @member\n    @public\n  */\n  restore() {\n    return RSVP.reject();\n  },\n\n  /**\n    Authenticates the session with the specified `args`. These options vary\n    depending on the actual authentication mechanism the authenticator\n    implements (e.g. a set of credentials or a Facebook account id etc.). __The\n    session will invoke this method in order to authenticate itself__ (see\n    {@linkplain SessionService.authenticate}).\n\n    __This method returns a promise. A resolving promise will result in the\n    session becoming authenticated.__ Any data the promise resolves with will\n    be saved in and accessible via the session service's `data.authenticated`\n    property (see {@linkplain SessionService.data}).\n    A rejecting promise indicates that authentication failed and will result in\n    the session remaining unauthenticated.\n\n    The `BaseAuthenticator`'s implementation always returns a rejecting promise\n    and thus never authenticates the session. __This method must be overridden\n    in subclasses__.\n\n    @memberof BaseAuthenticator\n    @method authenticate\n    @param {Any} [...args] The arguments that the authenticator requires to authenticate the session\n    @return {Ember.RSVP.Promise} A promise that when it resolves results in the session becoming authenticated\n    @member\n    @public\n  */\n  authenticate() {\n    return RSVP.reject();\n  },\n\n  /**\n    This method is invoked as a callback when the session is invalidated. While\n    the session will invalidate itself and clear all authenticated session data,\n    it might be necessary for some authenticators to perform additional tasks\n    (e.g. invalidating an access token on the server side).\n    This method returns a promise. A resolving promise will result in the\n    session becoming unauthenticated.__ A rejecting promise will result in\n    invalidation being intercepted and the session remaining authenticated.\n    The `BaseAuthenticator`'s implementation always returns a resolving promise\n    and thus never intercepts session invalidation. __This method doesn't have\n    to be overridden in custom authenticators if no actions need to be\n    performed on session invalidation.\n\n    @memberof BaseAuthenticator\n    @method invalidate\n    @param {Object} data The current authenticated session data\n    @param {Array} ...args additional arguments as required by the authenticator\n    @return {Ember.RSVP.Promise} A promise that when it resolves results in the session being invalidated\n    @member\n    @public\n  */\n  invalidate() {\n    return RSVP.resolve();\n  },\n});\n","import RSVP from 'rsvp';\nimport { isEmpty, isNone } from '@ember/utils';\nimport ObjectProxy from '@ember/object/proxy';\nimport Evented from '@ember/object/evented';\nimport { set } from '@ember/object';\nimport { debug, assert } from '@ember/debug';\nimport { getOwner, setOwner } from '@ember/application';\nimport { isTesting } from '@embroider/macros';\n\n/**\n  __An internal implementation of Session. Communicates with stores and emits events.__\n\n  @class InternalSession\n  @extends ObjectProxy\n  @private\n*/\n\nexport default ObjectProxy.extend(Evented, {\n  /**\n    Triggered whenever the session is successfully authenticated. This happens\n    when the session gets authenticated via\n    {@linkplain SessionService.authenticate} but also\n    when the session is authenticated in another tab or window of the same\n    application and the session state gets synchronized across tabs or windows\n    via the store (see\n    {@linkplain BaseStore.sessionDataUpdated}).\n\n    @memberof InternalSession\n    @event authenticationSucceeded\n    @private\n  */\n\n  /**\n    Triggered whenever the session is successfully invalidated. This happens\n    when the session gets invalidated via\n    {@linkplain SessionService.invalidate} but also\n    when the session is invalidated in another tab or window of the same\n    application and the session state gets synchronized across tabs or windows\n    via the store (see\n    {@linkplain BaseStore.sessionDataUpdated}.\n\n    @memberof InternalSession\n    @event invalidationSucceeded\n    @private\n  */\n  authenticator: null,\n  store: null,\n  isAuthenticated: false,\n  attemptedTransition: null,\n\n  init() {\n    this._super(...arguments);\n    this.set('content', { authenticated: {} });\n    let storeFactory = 'session-store:application';\n    if (isTesting()) {\n      storeFactory = 'session-store:test';\n    }\n\n    this.set('store', getOwner(this).lookup(storeFactory));\n    this._busy = false;\n    this._bindToStoreEvents();\n  },\n\n  authenticate(authenticatorFactory, ...args) {\n    this._busy = true;\n    assert(\n      `Session#authenticate requires the authenticator to be specified, was \"${authenticatorFactory}\"!`,\n      !isEmpty(authenticatorFactory)\n    );\n    const authenticator = this._lookupAuthenticator(authenticatorFactory);\n\n    return authenticator.authenticate(...args).then(\n      content => {\n        this._busy = false;\n        return this._setup(authenticatorFactory, content, true);\n      },\n      error => {\n        const rejectWithError = () => RSVP.Promise.reject(error);\n\n        this._busy = false;\n        return this._clear().then(rejectWithError, rejectWithError);\n      }\n    );\n  },\n\n  invalidate() {\n    this._busy = true;\n    this.set('attemptedTransition', null);\n\n    if (!this.get('isAuthenticated')) {\n      this._busy = false;\n      return RSVP.Promise.resolve();\n    }\n\n    let authenticator = this._lookupAuthenticator(this.authenticator);\n    return authenticator.invalidate(this.content.authenticated, ...arguments).then(\n      () => {\n        authenticator.off('sessionDataUpdated', this, this._onSessionDataUpdated);\n        this._busy = false;\n        return this._clear(true);\n      },\n      error => {\n        this.trigger('sessionInvalidationFailed', error);\n        this._busy = false;\n        return RSVP.Promise.reject(error);\n      }\n    );\n  },\n\n  restore() {\n    this._busy = true;\n    const reject = () => RSVP.Promise.reject();\n\n    return this.store.restore().then(\n      restoredContent => {\n        let { authenticator: authenticatorFactory } = restoredContent.authenticated || {};\n        if (authenticatorFactory) {\n          delete restoredContent.authenticated.authenticator;\n          const authenticator = this._lookupAuthenticator(authenticatorFactory);\n          return authenticator.restore(restoredContent.authenticated).then(\n            content => {\n              this.set('content', restoredContent);\n              this._busy = false;\n              return this._setup(authenticatorFactory, content);\n            },\n            err => {\n              debug(\n                `The authenticator \"${authenticatorFactory}\" rejected to restore the session - invalidating…`\n              );\n              if (err) {\n                debug(err);\n              }\n              this._busy = false;\n              return this._clearWithContent(restoredContent).then(reject, reject);\n            }\n          );\n        } else {\n          delete (restoredContent || {}).authenticated;\n          this._busy = false;\n          return this._clearWithContent(restoredContent).then(reject, reject);\n        }\n      },\n      () => {\n        this._busy = false;\n        return this._clear().then(reject, reject);\n      }\n    );\n  },\n\n  _setup(authenticator, authenticatedContent, trigger) {\n    trigger = Boolean(trigger) && !this.get('isAuthenticated');\n    this.setProperties({\n      isAuthenticated: true,\n      authenticator,\n      'content.authenticated': authenticatedContent,\n    });\n    this._bindToAuthenticatorEvents();\n\n    return this._updateStore().then(\n      () => {\n        if (trigger) {\n          this.trigger('authenticationSucceeded');\n        }\n      },\n      () => {\n        this.setProperties({\n          isAuthenticated: false,\n          authenticator: null,\n          'content.authenticated': {},\n        });\n      }\n    );\n  },\n\n  _clear(trigger) {\n    trigger = Boolean(trigger) && this.get('isAuthenticated');\n    this.setProperties({\n      isAuthenticated: false,\n      authenticator: null,\n      'content.authenticated': {},\n    });\n\n    return this._updateStore().then(() => {\n      if (trigger) {\n        this.trigger('invalidationSucceeded');\n      }\n    });\n  },\n\n  _clearWithContent(content, trigger) {\n    this.set('content', content);\n    return this._clear(trigger);\n  },\n\n  setUnknownProperty(key, value) {\n    assert('\"authenticated\" is a reserved key used by Ember Simple Auth!', key !== 'authenticated');\n    let result = this._super(key, value);\n    if (!/^_/.test(key)) {\n      this._updateStore();\n    }\n    return result;\n  },\n\n  _updateStore() {\n    let data = this.content;\n    if (!isEmpty(this.authenticator)) {\n      set(\n        data,\n        'authenticated',\n        Object.assign({ authenticator: this.authenticator }, data.authenticated || {})\n      );\n    }\n    return this.store.persist(data);\n  },\n\n  _bindToAuthenticatorEvents() {\n    const authenticator = this._lookupAuthenticator(this.authenticator);\n    authenticator.on('sessionDataUpdated', this, this._onSessionDataUpdated);\n    authenticator.on('sessionDataInvalidated', this, this._onSessionDataInvalidated);\n  },\n\n  _onSessionDataUpdated(content) {\n    this._setup(this.authenticator, content);\n  },\n\n  _onSessionDataInvalidated() {\n    this._clear(true);\n  },\n\n  _bindToStoreEvents() {\n    this.store.on('sessionDataUpdated', content => {\n      if (!this._busy) {\n        this._busy = true;\n        let { authenticator: authenticatorFactory } = content.authenticated || {};\n        if (authenticatorFactory) {\n          delete content.authenticated.authenticator;\n          const authenticator = this._lookupAuthenticator(authenticatorFactory);\n          authenticator.restore(content.authenticated).then(\n            authenticatedContent => {\n              this.set('content', content);\n              this._busy = false;\n              this._setup(authenticatorFactory, authenticatedContent, true);\n            },\n            err => {\n              debug(\n                `The authenticator \"${authenticatorFactory}\" rejected to restore the session - invalidating…`\n              );\n              if (err) {\n                debug(err);\n              }\n              this._busy = false;\n              this._clearWithContent(content, true);\n            }\n          );\n        } else {\n          this._busy = false;\n          this._clearWithContent(content, true);\n        }\n      }\n    });\n  },\n\n  _lookupAuthenticator(authenticatorName) {\n    let owner = getOwner(this);\n    let authenticator = owner.lookup(authenticatorName);\n    assert(\n      `No authenticator for factory \"${authenticatorName}\" could be found!`,\n      !isNone(authenticator)\n    );\n    setOwner(authenticator, owner);\n    return authenticator;\n  },\n});\n","import RSVP from 'rsvp';\nimport BaseStore from './base';\n\n/**\n  Session store that __persists data in memory and thus is not actually\n  persistent__. It does also not synchronize the session's state across\n  multiple tabs or windows as those cannot share memory. __This store is mainly\n  useful for testing and will automatically be used when running tests.__\n\n  @class EphemeralStore\n  @extends BaseStore\n  @public\n*/\nexport default BaseStore.extend({\n  init() {\n    this._super(...arguments);\n    this.clear();\n  },\n\n  /**\n    Persists `data`. This replaces all currently stored data.\n\n    @memberof EpemeralStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {Ember.RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist(data) {\n    this._data = JSON.stringify(data || {});\n\n    return RSVP.resolve();\n  },\n\n  /**\n    Returns all data currently stored as a plain object.\n\n    @memberof EpemeralStore\n    @method restore\n    @return {Ember.RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    const data = JSON.parse(this._data) || {};\n\n    return RSVP.resolve(data);\n  },\n\n  /**\n    Clears the store.\n\n    @memberof EpemeralStore\n    @method clear\n    @return {Ember.RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    delete this._data;\n    this._data = '{}';\n\n    return RSVP.resolve();\n  },\n});\n","import RSVP from 'rsvp';\n\nimport { bind } from '@ember/runloop';\nimport { getOwner } from '@ember/application';\nimport BaseStore from './base';\nimport objectsAreEqual from '../utils/objects-are-equal';\nimport isFastBoot from '../utils/is-fastboot';\n\n/**\n  Session store that persists data in the browser's `localStorage`.\n\n  __`localStorage` is not available in Safari when running in private mode. In\n  general it is better to use the\n  {@linkplain AdaptiveStore} that automatically falls back to\n  the {@linkplain CookieStore} when `localStorage` is not\n  available.__\n\n  __This session store does not work with FastBoot. In order to use Ember\n  Simple Auth with FastBoot, configure the\n  {@linkplain CookieStore} as the application's session\n  store.__\n\n  @class LocalStorageStore\n  @extends BaseStore\n  @public\n*/\nexport default BaseStore.extend({\n  /**\n    The `localStorage` key the store persists data in.\n\n    @memberof LocalStorageStore\n    @property key\n    @type String\n    @default 'ember_simple_auth-session'\n    @public\n  */\n  key: 'ember_simple_auth-session',\n\n  init() {\n    this._super(...arguments);\n\n    this._isFastBoot = this.hasOwnProperty('_isFastBoot')\n      ? this._isFastBoot\n      : isFastBoot(getOwner(this));\n    this._boundHandler = bind(this, this._handleStorageEvent);\n    if (!this.get('_isFastBoot')) {\n      window.addEventListener('storage', this._boundHandler);\n    }\n  },\n\n  willDestroy() {\n    if (!this.get('_isFastBoot')) {\n      window.removeEventListener('storage', this._boundHandler);\n    }\n  },\n\n  /**\n    Persists the `data` in the `localStorage`.\n\n    @memberof LocalStorageStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {Ember.RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist(data) {\n    this._lastData = data;\n    data = JSON.stringify(data || {});\n    localStorage.setItem(this.key, data);\n\n    return RSVP.resolve();\n  },\n\n  /**\n    Returns all data currently stored in the `localStorage` as a plain object.\n\n    @memberof LocalStorageStore\n    @method restore\n    @return {Ember.RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    let data = localStorage.getItem(this.key);\n\n    return RSVP.resolve(JSON.parse(data) || {});\n  },\n\n  /**\n    Clears the store by deleting the\n    {@linkplain LocalStorageStore.key} from\n    `localStorage`.\n\n    @memberof LocalStorageStore\n    @method clear\n    @return {Ember.RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    localStorage.removeItem(this.key);\n    this._lastData = {};\n\n    return RSVP.resolve();\n  },\n\n  _handleStorageEvent(e) {\n    if (e.key === this.get('key')) {\n      this.restore().then(data => {\n        if (!objectsAreEqual(data, this._lastData)) {\n          this._lastData = data;\n          this.trigger('sessionDataUpdated', data);\n        }\n      });\n    }\n  },\n});\n","import RSVP from 'rsvp';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { later, cancel, scheduleOnce, next } from '@ember/runloop';\nimport { isPresent, typeOf, isEmpty, isNone } from '@ember/utils';\nimport { A } from '@ember/array';\nimport { getOwner } from '@ember/application';\nimport { warn } from '@ember/debug';\nimport BaseStore from './base';\nimport objectsAreEqual from '../utils/objects-are-equal';\nimport { isTesting } from '@embroider/macros';\n\nconst persistingProperty = function (beforeSet = function () {}) {\n  return computed({\n    get(key) {\n      return this.get(`_${key}`);\n    },\n    set(key, value) {\n      beforeSet.apply(this, [key, value]);\n      this.set(`_${key}`, value);\n      scheduleOnce('actions', this, this.rewriteCookie);\n      return value;\n    },\n  });\n};\n\n/**\n  Session store that persists data in a cookie.\n\n  By default the cookie session store uses a session cookie that expires and is\n  deleted when the browser is closed. The cookie expiration period can be\n  configured by setting the\n  {@linkplain CookieStore.cookieExpirationTime}\n  property. This can be used to implement \"remember me\" functionality that will\n  either store the session persistently or in a session cookie depending on\n  whether the user opted in or not:\n\n  ```js\n  // app/controllers/login.js\n  import Controller from '@ember/controller';\n  import { inject as service } from '@ember/service';\n\n  export default class LoginController extends Controller {\n    &#64;service session;\n    _rememberMe = false;\n\n    get rememberMe() {\n      return this._rememberMe;\n    }\n\n    set rememberMe(value) {\n      let expirationTime = value ? (14 * 24 * 60 * 60) : null;\n      this.set('session.store.cookieExpirationTime', expirationTime);\n      this._rememberMe = value;\n    }\n  }\n  ```\n\n  __Applications that use FastBoot must use this session store by defining the\n  application session store like this:__\n\n  ```js\n  // app/session-stores/application.js\n  import CookieStore from 'ember-simple-auth/session-stores/cookie';\n\n  export default class ApplicationSessionStore extends CookieStore {}\n  ```\n\n  @class CookieStore\n  @extends BaseStore\n  @public\n*/\nexport default BaseStore.extend({\n  _syncDataTimeout: null,\n  _renewExpirationTimeout: null,\n\n  /**\n    The domain to use for the cookie, e.g., \"example.com\", \".example.com\"\n    (which includes all subdomains) or \"subdomain.example.com\". If not\n    explicitly set, the cookie domain defaults to the domain the session was\n    authenticated on.\n\n    @memberof CookieStore\n    @property cookieDomain\n    @type String\n    @default null\n    @public\n  */\n  _cookieDomain: null,\n  cookieDomain: persistingProperty(),\n\n  /**\n    Allows servers to assert that a cookie ought not to be sent along with cross-site requests,\n    which provides some protection against cross-site request forgery attacks (CSRF).\n    Available options:\n    - \"Strict\"\n    - \"Lax\"\n    @memberof CookieStore\n    @property sameSite\n    @type String\n    @default null\n    @public\n  */\n  _sameSite: null,\n  sameSite: persistingProperty(),\n\n  /**\n    The name of the cookie.\n\n    @memberof CookieStore\n    @property cookieName\n    @type String\n    @default ember_simple_auth-session\n    @public\n  */\n  _cookieName: 'ember_simple_auth-session',\n  cookieName: persistingProperty(function () {\n    this._oldCookieName = this._cookieName;\n  }),\n\n  /**\n    The path to use for the cookie, e.g., \"/\", \"/something\".\n\n    @memberof CookieStore\n    @property cookiePath\n    @type String\n    @default '/'\n    @public\n  */\n  _cookiePath: '/',\n  cookiePath: persistingProperty(),\n\n  /**\n    The expiration time for the cookie in seconds. A value of `null` will make\n    the cookie a session cookie that expires and gets deleted when the browser\n    is closed.\n\n    The recommended minimum value is 90 seconds. If your value is less than\n    that, the cookie may expire before its expiration time is extended\n    (expiration time is extended every 60 seconds).\n\n    @memberof CookieStore\n    @property cookieExpirationTime\n    @default null\n    @type Integer\n    @public\n  */\n  _cookieExpirationTime: null,\n  cookieExpirationTime: persistingProperty(function (key, value) {\n    // When nulling expiry time on purpose, we need to clear the cached value.\n    // Otherwise, `_calculateExpirationTime` will reuse it.\n    if (isNone(value)) {\n      this.get('_cookies').clear(`${this.get('cookieName')}-expiration_time`);\n    } else if (value < 90) {\n      warn(\n        'The recommended minimum value for `cookieExpirationTime` is 90 seconds. If your value is less than that, the cookie may expire before its expiration time is extended (expiration time is extended every 60 seconds).',\n        false,\n        { id: 'ember-simple-auth.cookieExpirationTime' }\n      );\n    }\n  }),\n\n  _cookies: service('cookies'),\n\n  _secureCookies() {\n    if (this.get('_fastboot.isFastBoot')) {\n      return this.get('_fastboot.request.protocol') === 'https:';\n    }\n\n    return window.location.protocol === 'https:';\n  },\n\n  _isPageVisible() {\n    if (this.get('_fastboot.isFastBoot')) {\n      return false;\n    } else {\n      const visibilityState =\n        typeof document !== 'undefined' ? document.visibilityState || 'visible' : false;\n      return visibilityState === 'visible';\n    }\n  },\n\n  init() {\n    this._super(...arguments);\n    let owner = getOwner(this);\n    if (owner && !this.hasOwnProperty('_fastboot')) {\n      this._fastboot = owner.lookup('service:fastboot');\n    }\n\n    let cachedExpirationTime = this._read(`${this.get('cookieName')}-expiration_time`);\n    if (cachedExpirationTime) {\n      this.set('cookieExpirationTime', parseInt(cachedExpirationTime, 10));\n    }\n\n    if (!this.get('_fastboot.isFastBoot')) {\n      next(() => {\n        this._syncData().then(() => {\n          this._renewExpiration();\n        });\n      });\n    } else {\n      this._renew();\n    }\n  },\n\n  /**\n    Persists the `data` in the cookie.\n\n    @memberof CookieStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist(data) {\n    this._lastData = data;\n    data = JSON.stringify(data || {});\n    let expiration = this._calculateExpirationTime();\n    this._write(data, expiration);\n    return RSVP.resolve();\n  },\n\n  /**\n    Returns all data currently stored in the cookie as a plain object.\n\n    @memberof CookieStore\n    @method restore\n    @return {RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    let data = this._read(this.get('cookieName'));\n    if (isEmpty(data)) {\n      return RSVP.resolve({});\n    } else {\n      return RSVP.resolve(JSON.parse(data));\n    }\n  },\n\n  /**\n    Clears the store by deleting the cookie.\n\n    @memberof CookieStore\n    @method clear\n    @return {RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    this._write('', 0);\n    this._lastData = {};\n    return RSVP.resolve();\n  },\n\n  _read(name) {\n    return this.get('_cookies').read(name) || '';\n  },\n\n  _calculateExpirationTime() {\n    let cachedExpirationTime = this._read(`${this.get('cookieName')}-expiration_time`);\n    cachedExpirationTime = cachedExpirationTime\n      ? new Date().getTime() + cachedExpirationTime * 1000\n      : null;\n    return this.get('cookieExpirationTime')\n      ? new Date().getTime() + this.get('cookieExpirationTime') * 1000\n      : cachedExpirationTime;\n  },\n\n  _write(value, expiration) {\n    let cookieOptions = {\n      domain: this.get('cookieDomain'),\n      expires: isEmpty(expiration) ? null : new Date(expiration),\n      path: this.get('cookiePath'),\n      secure: this._secureCookies(),\n      sameSite: this.get('sameSite'),\n    };\n    if (this._oldCookieName) {\n      A([this._oldCookieName, `${this._oldCookieName}-expiration_time`]).forEach(oldCookie => {\n        this.get('_cookies').clear(oldCookie);\n      });\n      delete this._oldCookieName;\n    }\n    this.get('_cookies').write(this.get('cookieName'), value, cookieOptions);\n    if (!isEmpty(expiration)) {\n      let expirationCookieName = `${this.get('cookieName')}-expiration_time`;\n      let cachedExpirationTime = this.get('_cookies').read(expirationCookieName);\n      this.get('_cookies').write(\n        expirationCookieName,\n        this.get('cookieExpirationTime') || cachedExpirationTime,\n        cookieOptions\n      );\n    }\n  },\n\n  _syncData() {\n    return this.restore().then(data => {\n      if (!objectsAreEqual(data, this._lastData)) {\n        this._lastData = data;\n        this.trigger('sessionDataUpdated', data);\n      }\n      if (!isTesting()) {\n        cancel(this._syncDataTimeout);\n        this._syncDataTimeout = later(this, this._syncData, 500);\n      }\n    });\n  },\n\n  _renew() {\n    return this.restore().then(data => {\n      if (!isEmpty(data) && !(data.constructor === Object && Object.keys(data).length === 0)) {\n        data = typeOf(data) === 'string' ? data : JSON.stringify(data || {});\n        let expiration = this._calculateExpirationTime();\n        this._write(data, expiration);\n      }\n    });\n  },\n\n  _renewExpiration() {\n    if (!isTesting()) {\n      cancel(this._renewExpirationTimeout);\n      this._renewExpirationTimeout = later(this, this._renewExpiration, 60000);\n    }\n    if (this._isPageVisible()) {\n      return this._renew();\n    } else {\n      return RSVP.resolve();\n    }\n  },\n\n  rewriteCookie() {\n    // if `cookieName` has not been renamed, `oldCookieName` will be nil\n    const cookieName = this._oldCookieName || this._cookieName;\n    const data = this._read(cookieName);\n    if (isPresent(data)) {\n      const expiration = this._calculateExpirationTime();\n      this._write(data, expiration);\n    }\n  },\n});\n","import Configuration from '../configuration';\nimport setupSession from './setup-session';\nimport Adaptive from '../session-stores/adaptive';\nimport LocalStorage from '../session-stores/local-storage';\nimport Cookie from '../session-stores/cookie';\n\nexport default {\n  name: 'ember-simple-auth',\n\n  initialize(registry) {\n    const ENV = registry.resolveRegistration('config:environment');\n    const config = ENV['ember-simple-auth'] || {};\n    config.rootURL = ENV.rootURL || ENV.baseURL;\n    Configuration.load(config);\n\n    registry.register('session-store:adaptive', Adaptive);\n    registry.register('session-store:cookie', Cookie);\n    registry.register('session-store:local-storage', LocalStorage);\n\n    setupSession(registry);\n  },\n};\n","import InternalSession from '../internal-session';\nimport Ephemeral from '../session-stores/ephemeral';\nimport { isTesting } from '@embroider/macros';\n\nexport default function setupSession(registry) {\n  registry.register('session:main', InternalSession);\n\n  if (isTesting()) {\n    registry.register('session-store:test', Ephemeral);\n  }\n}\n","const DEFAULTS = {\n  rootURL: '',\n  routeAfterAuthentication: 'index',\n};\n\n/**\n  Ember Simple Auth's configuration object.\n\n  @class Configuration\n  @extends Object\n  @public\n*/\nexport default {\n  /**\n    The root URL of the application as configured in `config/environment.js`.\n    @memberof Configuration\n    @property rootURL\n    @readOnly\n    @static\n    @type String\n    @default ''\n    @public\n  */\n  rootURL: DEFAULTS.rootURL,\n\n  /**\n    The route to transition to after successful authentication.\n\n    @memberof Configuration\n    @property routeAfterAuthentication\n    @readOnly\n    @static\n    @type String\n    @default 'index'\n    @public\n  */\n  routeAfterAuthentication: DEFAULTS.routeAfterAuthentication,\n\n  load(config) {\n    this.rootURL = config.rootURL !== undefined ? config.rootURL : DEFAULTS.rootURL;\n    this.routeAfterAuthentication =\n      config.routeAfterAuthentication !== undefined\n        ? config.routeAfterAuthentication\n        : DEFAULTS.routeAfterAuthentication;\n  },\n};\n","import { alias, readOnly } from '@ember/object/computed';\nimport Service from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport Configuration from '../configuration';\n\nimport {\n  requireAuthentication,\n  triggerAuthentication,\n  prohibitAuthentication,\n  handleSessionAuthenticated,\n  handleSessionInvalidated,\n} from '../-internals/routing';\n\nconst SESSION_DATA_KEY_PREFIX = /^data\\./;\n\nfunction assertSetupHasBeenCalled(isSetupCalled) {\n  if (!isSetupCalled) {\n    assert(\n      \"Ember Simple Auth: session#setup wasn't called. Make sure to call session#setup in your application route's beforeModel hook.\",\n      false\n    );\n  }\n}\n\n/**\n  __The session service provides access to the current session as well as\n  methods to authenticate it, invalidate it, etc.__ It is the main interface for\n  the application to Ember Simple Auth's functionality.\n\n  ```js\n  // app/components/login-form.js\n  import Component from '@ember/component';\n  import { inject as service } from '@ember/service';\n\n  export default class LoginFormComponent extends Component {\n    &#64;service session;\n  }\n  ```\n\n  @class SessionService\n  @extends Service\n  @public\n*/\nexport default Service.extend({\n  /**\n    Returns whether the session is currently authenticated.\n\n    @memberof SessionService\n    @property isAuthenticated\n    @type Boolean\n    @readOnly\n    @default false\n    @public\n  */\n  isAuthenticated: readOnly('session.isAuthenticated'),\n\n  /**\n    The current session data as a plain object. The\n    `authenticated` key inside  {@linkplain SessionService.data} holds the session data that the authenticator resolved\n    with when the session was authenticated (see {@linkplain BaseAuthenticator.authenticate}) and\n    that will be cleared when the session is invalidated. This data cannot be\n    written. All other session data is writable and will not be cleared when\n    the session is invalidated.\n\n    @memberof SessionService\n    @property data\n    @type Object\n    @readOnly\n    @default { authenticated: {} }\n    @public\n  */\n  data: readOnly('session.content'),\n\n  /**\n    The session store.\n\n    @memberof SessionService\n    @property store\n    @type BaseStore\n    @readOnly\n    @default null\n    @public\n  */\n  store: readOnly('session.store'),\n\n  /**\n    A previously attempted but intercepted transition (e.g. by the\n    {@linkplain SessionService.requireAuthentication}\n    If an attempted transition is present it will be retried.\n\n    @memberof SessionService\n    @property attemptedTransition\n    @type Transition\n    @default null\n    @public\n  */\n  attemptedTransition: alias('session.attemptedTransition'),\n\n  session: null,\n\n  init() {\n    this._super(...arguments);\n\n    this.set('session', getOwner(this).lookup('session:main'));\n  },\n\n  set(key, value) {\n    const setsSessionData = SESSION_DATA_KEY_PREFIX.test(key);\n    if (setsSessionData) {\n      const sessionDataKey = `session.${key.replace(SESSION_DATA_KEY_PREFIX, '')}`;\n      return this._super(sessionDataKey, value);\n    } else {\n      return this._super(...arguments);\n    }\n  },\n\n  _setupHandlers() {\n    this.get('session').on('authenticationSucceeded', () =>\n      this.handleAuthentication(Configuration.routeAfterAuthentication)\n    );\n    this.get('session').on('invalidationSucceeded', () =>\n      this.handleInvalidation(Configuration.rootURL)\n    );\n  },\n\n  /**\n    __Authenticates the session with an `authenticator`__ and appropriate\n    arguments. The authenticator implements the actual steps necessary to\n    authenticate the session (see\n    {@linkplain BaseAuthenticator.authenticate} and\n    returns a promise after doing so. The session handles the returned promise\n    and when it resolves becomes authenticated, otherwise remains\n    unauthenticated. All data the authenticator resolves with will be\n    accessible via the\n    {@Linkplain SessionService.data} session data's\n    `authenticated` property.\n\n    This method returns a promise. A resolving promise indicates that the\n    session was successfully authenticated while a rejecting promise\n    indicates that authentication failed and the session remains\n    unauthenticated. The promise does not resolve with a value; instead, the\n    data returned from the authenticator is available via the\n    {@linkplain SessionService.data} property.\n\n    When authentication succeeds this will trigger the\n    {@linkplain SessionService.authenticationSucceeded} event.\n\n    @memberof SessionService\n    @method authenticate\n    @param {String} authenticator The authenticator to use to authenticate the session\n    @param {Any} [...args] The arguments to pass to the authenticator; depending on the type of authenticator these might be a set of credentials, a Facebook OAuth Token, etc.\n    @return {RSVP.Promise} A promise that resolves when the session was authenticated successfully and rejects otherwise\n    @public\n  */\n  authenticate() {\n    const session = this.get('session');\n\n    return session.authenticate(...arguments);\n  },\n\n  /**\n    __Invalidates the session with the authenticator it is currently\n    authenticated with__ (see\n    {@linkplain SessionService.authenticate}). This\n    invokes the authenticator's\n    {@linkplain BaseAuthenticator.invalidate} method\n    and handles the returned promise accordingly.\n\n    This method returns a promise. A resolving promise indicates that the\n    session was successfully invalidated while a rejecting promise indicates\n    that invalidation failed and the session remains authenticated. Once the\n    session is successfully invalidated it clears all of its authenticated data\n    (see {@linkplain SessionService.data}).\n\n    When invalidation succeeds this will trigger the\n    {@linkplain SessionService.invalidationSucceeded}\n    event.\n\n    When calling the {@linkplain BaseAuthenticator.invalidate}\n    on an already unauthenticated session, the method will return a resolved Promise\n    immediately.\n\n    @memberof SessionService\n    @method invalidate\n    @param {Array} ...args arguments that will be passed to the authenticator\n    @return {RSVP.Promise} A promise that resolves when the session was invalidated successfully and rejects otherwise\n    @public\n  */\n  invalidate() {\n    const session = this.get('session');\n\n    return session.invalidate(...arguments);\n  },\n\n  /**\n    Checks whether the session is authenticated and if it is not, transitions\n    to the specified route or invokes the specified callback.\n\n    If a transition is in progress and is aborted, this method will save it in the\n    session service's\n    {@linkplain SessionService.attemptedTransition}\n    property so that  it can be retried after the session is authenticated. If\n    the transition is aborted in Fastboot mode, the transition's target URL\n    will be saved in a `ember_simple_auth-redirectTarget` cookie for use by the\n    browser after authentication is complete.\n\n    @memberof SessionService\n    @method requireAuthentication\n    @param {Transition} transition A transition that triggered the authentication requirement or null if the requirement originated independently of a transition\n    @param {String|Function} routeOrCallback The route to transition to in case that the session is not authenticated or a callback function to invoke in that case\n    @return {Boolean} true when the session is authenticated, false otherwise\n    @public\n  */\n  requireAuthentication(transition, routeOrCallback) {\n    assertSetupHasBeenCalled(this._setupIsCalled);\n    let isAuthenticated = requireAuthentication(getOwner(this), transition);\n    if (!isAuthenticated) {\n      let argType = typeof routeOrCallback;\n      if (argType === 'string') {\n        triggerAuthentication(getOwner(this), routeOrCallback);\n      } else if (argType === 'function') {\n        routeOrCallback();\n      } else {\n        assert(\n          `The second argument to requireAuthentication must be a String or Function, got \"${argType}\"!`,\n          false\n        );\n      }\n    }\n    return isAuthenticated;\n  },\n\n  /**\n    Checks whether the session is authenticated and if it is, transitions\n    to the specified route or invokes the specified callback.\n\n    @memberof SessionService\n    @method prohibitAuthentication\n    @param {String|Function} routeOrCallback The route to transition to in case that the session is authenticated or a callback function to invoke in that case\n    @return {Boolean} true when the session is not authenticated, false otherwise\n    @public\n  */\n  prohibitAuthentication(routeOrCallback) {\n    assertSetupHasBeenCalled(this._setupIsCalled);\n    let isAuthenticated = this.get('isAuthenticated');\n    if (isAuthenticated) {\n      let argType = typeof routeOrCallback;\n      if (argType === 'string') {\n        prohibitAuthentication(getOwner(this), routeOrCallback);\n      } else if (argType === 'function') {\n        routeOrCallback();\n      } else {\n        assert(\n          `The first argument to prohibitAuthentication must be a String or Function, got \"${argType}\"!`,\n          false\n        );\n      }\n    }\n    return !isAuthenticated;\n  },\n\n  /**\n    This method is called whenever the session goes from being unauthenticated\n    to being authenticated. If there is a transition that was previously\n    intercepted by the\n    {@linkplain SessionService.requireAuthentication},\n    it will retry it. If there is no such transition, the\n    `ember_simple_auth-redirectTarget` cookie will be checked for a url that\n    represents an attemptedTransition that was aborted in Fastboot mode,\n    otherwise this action transitions to the specified\n    routeAfterAuthentication.\n\n    @memberof SessionService\n    @method handleAuthentication\n    @param {String} routeAfterAuthentication The route to transition to\n    @public\n  */\n  handleAuthentication(routeAfterAuthentication) {\n    handleSessionAuthenticated(getOwner(this), routeAfterAuthentication);\n  },\n\n  /**\n    This method is called whenever the session goes from being authenticated to\n    not being authenticated. __It reloads the Ember.js application__ by\n    redirecting the browser to the specified route so that all in-memory data\n    (such as Ember Data stores etc.) gets cleared.\n\n    If the Ember.js application will be used in an environment where the users\n    don't have direct access to any data stored on the client (e.g.\n    [cordova](http://cordova.apache.org)) this action can be overridden to e.g.\n    simply transition to the index route.\n\n    @memberof SessionService\n    @method handleInvalidation\n    @param {String} routeAfterInvalidation The route to transition to\n    @public\n  */\n  handleInvalidation(routeAfterInvalidation) {\n    handleSessionInvalidated(getOwner(this), routeAfterInvalidation);\n  },\n\n  /**\n    Sets up the session service.\n\n    This method must be called when the application starts up,\n    usually as the first thing in the `application` route's `beforeModel`\n    method.\n\n    @memberof SessionService\n    @method setup\n    @public\n  */\n  setup() {\n    this._setupIsCalled = true;\n    this._setupHandlers();\n\n    return this.session.restore().catch(() => {\n      // If it raises an error then it means that restore didn't find any restorable state.\n    });\n  },\n});\n","import isFastBoot from '../utils/is-fastboot';\nimport location from '../utils/location';\nimport { isTesting } from '@embroider/macros';\n\nexport function requireAuthentication(owner, transition) {\n  let sessionService = owner.lookup('service:session');\n  let isAuthenticated = sessionService.get('isAuthenticated');\n  if (!isAuthenticated) {\n    if (transition && isFastBoot(owner)) {\n      const fastbootService = owner.lookup('service:fastboot');\n      const cookiesService = owner.lookup('service:cookies');\n      cookiesService.write('ember_simple_auth-redirectTarget', transition.intent.url, {\n        path: '/',\n        secure: fastbootService.get('request.protocol') === 'https',\n      });\n    } else if (transition) {\n      sessionService.set('attemptedTransition', transition);\n    }\n  }\n  return isAuthenticated;\n}\n\nexport function triggerAuthentication(owner, authenticationRoute) {\n  let authRouter = owner.lookup('service:router') || owner.lookup('router:main');\n  authRouter.transitionTo(authenticationRoute);\n}\n\nexport function prohibitAuthentication(owner, routeIfAlreadyAuthenticated) {\n  let authRouter = owner.lookup('service:router') || owner.lookup('router:main');\n  authRouter.transitionTo(routeIfAlreadyAuthenticated);\n}\n\nexport function handleSessionAuthenticated(owner, routeAfterAuthentication) {\n  let sessionService = owner.lookup('service:session');\n  let attemptedTransition = sessionService.get('attemptedTransition');\n  let cookiesService = owner.lookup('service:cookies');\n  const redirectTarget = cookiesService.read('ember_simple_auth-redirectTarget');\n\n  let routerService = owner.lookup('service:router');\n\n  if (attemptedTransition) {\n    attemptedTransition.retry();\n    sessionService.set('attemptedTransition', null);\n  } else if (redirectTarget) {\n    routerService.transitionTo(redirectTarget);\n    cookiesService.clear('ember_simple_auth-redirectTarget');\n  } else {\n    routerService.transitionTo(routeAfterAuthentication);\n  }\n}\n\nexport function handleSessionInvalidated(owner, routeAfterInvalidation) {\n  if (isFastBoot(owner)) {\n    let routerService = owner.lookup('service:router');\n    routerService.transitionTo(routeAfterInvalidation);\n  } else {\n    if (!isTesting()) {\n      location.replace(routeAfterInvalidation);\n    }\n  }\n}\n","export default function (registry, factoryNameOrType, property, injectionName) {\n  const inject = registry.inject || registry.injection;\n  inject.call(registry, factoryNameOrType, property, injectionName);\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from) {\r\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n        to[j] = from[i];\r\n    return to;\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, 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 { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n    // When we have a placeholder but no value to format\n    ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n    // When value supplied is invalid\n    ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n    // When we need specific Intl API but it's not available\n    ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n    __extends(FormatError, _super);\n    function FormatError(msg, code, originalMessage) {\n        var _this = _super.call(this, msg) || this;\n        _this.code = code;\n        _this.originalMessage = originalMessage;\n        return _this;\n    }\n    FormatError.prototype.toString = function () {\n        return \"[formatjs Error: \" + this.code + \"] \" + this.message;\n    };\n    return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n    __extends(InvalidValueError, _super);\n    function InvalidValueError(variableId, value, options, originalMessage) {\n        return _super.call(this, \"Invalid values for \\\"\" + variableId + \"\\\": \\\"\" + value + \"\\\". Options are \\\"\" + Object.keys(options).join('\", \"') + \"\\\"\", ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n    __extends(InvalidValueTypeError, _super);\n    function InvalidValueTypeError(value, type, originalMessage) {\n        return _super.call(this, \"Value for \\\"\" + value + \"\\\" must be of type \" + type, ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n    __extends(MissingValueError, _super);\n    function MissingValueError(variableId, originalMessage) {\n        return _super.call(this, \"The intl string context variable \\\"\" + variableId + \"\\\" was not provided to the string \\\"\" + originalMessage + \"\\\"\", ErrorCode.MISSING_VALUE, originalMessage) || this;\n    }\n    return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTimeElement, isTagElement, } from 'intl-messageformat-parser';\nimport { MissingValueError, InvalidValueError, ErrorCode, FormatError, InvalidValueTypeError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n    PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n    PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n    if (parts.length < 2) {\n        return parts;\n    }\n    return parts.reduce(function (all, part) {\n        var lastPart = all[all.length - 1];\n        if (!lastPart ||\n            lastPart.type !== PART_TYPE.literal ||\n            part.type !== PART_TYPE.literal) {\n            all.push(part);\n        }\n        else {\n            lastPart.value += part.value;\n        }\n        return all;\n    }, []);\n}\nexport function isFormatXMLElementFn(el) {\n    return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n    // Hot path for straight simple msg translations\n    if (els.length === 1 && isLiteralElement(els[0])) {\n        return [\n            {\n                type: PART_TYPE.literal,\n                value: els[0].value,\n            },\n        ];\n    }\n    var result = [];\n    for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n        var el = els_1[_i];\n        // Exit early for string parts.\n        if (isLiteralElement(el)) {\n            result.push({\n                type: PART_TYPE.literal,\n                value: el.value,\n            });\n            continue;\n        }\n        // TODO: should this part be literal type?\n        // Replace `#` in plural rules with the actual numeric value.\n        if (isPoundElement(el)) {\n            if (typeof currentPluralValue === 'number') {\n                result.push({\n                    type: PART_TYPE.literal,\n                    value: formatters.getNumberFormat(locales).format(currentPluralValue),\n                });\n            }\n            continue;\n        }\n        var varName = el.value;\n        // Enforce that all required values are provided by the caller.\n        if (!(values && varName in values)) {\n            throw new MissingValueError(varName, originalMessage);\n        }\n        var value = values[varName];\n        if (isArgumentElement(el)) {\n            if (!value || typeof value === 'string' || typeof value === 'number') {\n                value =\n                    typeof value === 'string' || typeof value === 'number'\n                        ? String(value)\n                        : '';\n            }\n            result.push({\n                type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                value: value,\n            });\n            continue;\n        }\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (isDateElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.date[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTimeElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.time[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isNumberElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.number[el.style]\n                : isNumberSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            if (style && style.scale) {\n                value =\n                    value *\n                        (style.scale || 1);\n            }\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getNumberFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTagElement(el)) {\n            var children = el.children, value_1 = el.value;\n            var formatFn = values[value_1];\n            if (!isFormatXMLElementFn(formatFn)) {\n                throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n            }\n            var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n            var chunks = formatFn(parts.map(function (p) { return p.value; }));\n            if (!Array.isArray(chunks)) {\n                chunks = [chunks];\n            }\n            result.push.apply(result, chunks.map(function (c) {\n                return {\n                    type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                    value: c,\n                };\n            }));\n        }\n        if (isSelectElement(el)) {\n            var opt = el.options[value] || el.options.other;\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n            continue;\n        }\n        if (isPluralElement(el)) {\n            var opt = el.options[\"=\" + value];\n            if (!opt) {\n                if (!Intl.PluralRules) {\n                    throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n                }\n                var rule = formatters\n                    .getPluralRules(locales, { type: el.pluralType })\n                    .select(value - (el.offset || 0));\n                opt = el.options[rule] || el.options.other;\n            }\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n            continue;\n        }\n    }\n    return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __spreadArray } from \"tslib\";\nimport { parse } from 'intl-messageformat-parser';\nimport * as memoize from 'fast-memoize';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n    if (!c2) {\n        return c1;\n    }\n    return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n        all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n        return all;\n    }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n    if (!configs) {\n        return defaultConfig;\n    }\n    return Object.keys(defaultConfig).reduce(function (all, k) {\n        all[k] = mergeConfig(defaultConfig[k], configs[k]);\n        return all;\n    }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                has: function (key) {\n                    return key in store;\n                },\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\n// @ts-ignore this is to deal with rollup's default import shenanigans\nvar _memoizeIntl = memoize.default || memoize;\nvar memoizeIntl = _memoizeIntl;\nfunction createDefaultFormatters(cache) {\n    if (cache === void 0) { cache = {\n        number: {},\n        dateTime: {},\n        pluralRules: {},\n    }; }\n    return {\n        getNumberFormat: memoizeIntl(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args)))();\n        }, {\n            cache: createFastMemoizeCache(cache.number),\n            strategy: memoizeIntl.strategies.variadic,\n        }),\n        getDateTimeFormat: memoizeIntl(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args)))();\n        }, {\n            cache: createFastMemoizeCache(cache.dateTime),\n            strategy: memoizeIntl.strategies.variadic,\n        }),\n        getPluralRules: memoizeIntl(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args)))();\n        }, {\n            cache: createFastMemoizeCache(cache.pluralRules),\n            strategy: memoizeIntl.strategies.variadic,\n        }),\n    };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n    function IntlMessageFormat(message, locales, overrideFormats, opts) {\n        var _this = this;\n        if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n        this.formatterCache = {\n            number: {},\n            dateTime: {},\n            pluralRules: {},\n        };\n        this.format = function (values) {\n            var parts = _this.formatToParts(values);\n            // Hot path for straight simple msg translations\n            if (parts.length === 1) {\n                return parts[0].value;\n            }\n            var result = parts.reduce(function (all, part) {\n                if (!all.length ||\n                    part.type !== PART_TYPE.literal ||\n                    typeof all[all.length - 1] !== 'string') {\n                    all.push(part.value);\n                }\n                else {\n                    all[all.length - 1] += part.value;\n                }\n                return all;\n            }, []);\n            if (result.length <= 1) {\n                return result[0] || '';\n            }\n            return result;\n        };\n        this.formatToParts = function (values) {\n            return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n        };\n        this.resolvedOptions = function () { return ({\n            locale: Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n        }); };\n        this.getAst = function () { return _this.ast; };\n        if (typeof message === 'string') {\n            this.message = message;\n            if (!IntlMessageFormat.__parse) {\n                throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n            }\n            // Parse string messages into an AST.\n            this.ast = IntlMessageFormat.__parse(message, {\n                normalizeHashtagInPlural: false,\n                ignoreTag: opts === null || opts === void 0 ? void 0 : opts.ignoreTag,\n            });\n        }\n        else {\n            this.ast = message;\n        }\n        if (!Array.isArray(this.ast)) {\n            throw new TypeError('A message must be provided as a String or AST.');\n        }\n        // Creates a new object with the specified `formats` merged with the default\n        // formats.\n        this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n        // Defined first because it's used to build the format pattern.\n        this.locales = locales;\n        this.formatters =\n            (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n    }\n    Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n        get: function () {\n            if (!IntlMessageFormat.memoizedDefaultLocale) {\n                IntlMessageFormat.memoizedDefaultLocale = new Intl.NumberFormat().resolvedOptions().locale;\n            }\n            return IntlMessageFormat.memoizedDefaultLocale;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    IntlMessageFormat.memoizedDefaultLocale = null;\n    IntlMessageFormat.__parse = parse;\n    // Default format options used as the prototype of the `formats` provided to the\n    // constructor. These are used when constructing the internal Intl.NumberFormat\n    // and Intl.DateTimeFormat instances.\n    IntlMessageFormat.formats = {\n        number: {\n            currency: {\n                style: 'currency',\n            },\n            percent: {\n                style: 'percent',\n            },\n        },\n        date: {\n            short: {\n                month: 'numeric',\n                day: 'numeric',\n                year: '2-digit',\n            },\n            medium: {\n                month: 'short',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            long: {\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            full: {\n                weekday: 'long',\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n        },\n        time: {\n            short: {\n                hour: 'numeric',\n                minute: 'numeric',\n            },\n            medium: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n            },\n            long: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n            full: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n        },\n    };\n    return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { IntlMessageFormat } from './src/core';\nexport * from './src/formatters';\nexport * from './src/core';\nexport * from './src/error';\nexport default IntlMessageFormat;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jwtDecode = exports.InvalidTokenError = void 0;\nclass InvalidTokenError extends Error {\n}\nexports.InvalidTokenError = InvalidTokenError;\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n    return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n        let code = p.charCodeAt(0).toString(16).toUpperCase();\n        if (code.length < 2) {\n            code = \"0\" + code;\n        }\n        return \"%\" + code;\n    }));\n}\nfunction base64UrlDecode(str) {\n    let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    switch (output.length % 4) {\n        case 0:\n            break;\n        case 2:\n            output += \"==\";\n            break;\n        case 3:\n            output += \"=\";\n            break;\n        default:\n            throw new Error(\"base64 string is not of the correct length\");\n    }\n    try {\n        return b64DecodeUnicode(output);\n    }\n    catch (err) {\n        return atob(output);\n    }\n}\nfunction jwtDecode(token, options) {\n    if (typeof token !== \"string\") {\n        throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n    }\n    options || (options = {});\n    const pos = options.header === true ? 0 : 1;\n    const part = token.split(\".\")[pos];\n    if (typeof part !== \"string\") {\n        throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n    }\n    let decoded;\n    try {\n        decoded = base64UrlDecode(part);\n    }\n    catch (e) {\n        throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n    }\n    try {\n        return JSON.parse(decoded);\n    }\n    catch (e) {\n        throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n    }\n}\nexports.jwtDecode = jwtDecode;\n","import {\n  TrackedStorage,\n  createStorage,\n  getValue,\n  setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport class TrackedMap<K = unknown, V = unknown> implements Map<K, V> {\n  private collection = createStorage(null, () => false);\n\n  private storages: Map<K, TrackedStorage<null>> = new Map();\n\n  private vals: Map<K, V>;\n\n  private readStorageFor(key: K): void {\n    const { storages } = this;\n    let storage = storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      storages.set(key, storage);\n    }\n\n    getValue(storage);\n  }\n\n  private dirtyStorageFor(key: K): void {\n    const storage = this.storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  constructor();\n  constructor(entries: readonly (readonly [K, V])[] | null);\n  constructor(iterable: Iterable<readonly [K, V]>);\n  constructor(\n    existing?:\n      | readonly (readonly [K, V])[]\n      | Iterable<readonly [K, V]>\n      | null\n      | undefined\n  ) {\n    // TypeScript doesn't correctly resolve the overloads for calling the `Map`\n    // constructor for the no-value constructor. This resolves that.\n    this.vals = existing ? new Map(existing) : new Map();\n  }\n\n  // **** KEY GETTERS ****\n  get(key: K): V | undefined {\n    // entangle the storage for the key\n    this.readStorageFor(key);\n\n    return this.vals.get(key);\n  }\n\n  has(key: K): boolean {\n    this.readStorageFor(key);\n\n    return this.vals.has(key);\n  }\n\n  // **** ALL GETTERS ****\n  entries(): IterableIterator<[K, V]> {\n    getValue(this.collection);\n\n    return this.vals.entries();\n  }\n\n  keys(): IterableIterator<K> {\n    getValue(this.collection);\n\n    return this.vals.keys();\n  }\n\n  values(): IterableIterator<V> {\n    getValue(this.collection);\n\n    return this.vals.values();\n  }\n\n  forEach(fn: (value: V, key: K, map: Map<K, V>) => void): void {\n    getValue(this.collection);\n\n    this.vals.forEach(fn);\n  }\n\n  get size(): number {\n    getValue(this.collection);\n\n    return this.vals.size;\n  }\n\n  [Symbol.iterator](): IterableIterator<[K, V]> {\n    getValue(this.collection);\n\n    return this.vals[Symbol.iterator]();\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.vals[Symbol.toStringTag];\n  }\n\n  // **** KEY SETTERS ****\n  set(key: K, value: V): this {\n    this.dirtyStorageFor(key);\n    setValue(this.collection, null);\n\n    this.vals.set(key, value);\n\n    return this;\n  }\n\n  delete(key: K): boolean {\n    this.dirtyStorageFor(key);\n    setValue(this.collection, null);\n\n    return this.vals.delete(key);\n  }\n\n  // **** ALL SETTERS ****\n  clear(): void {\n    this.storages.forEach((s) => setValue(s, null));\n    setValue(this.collection, null);\n\n    this.vals.clear();\n  }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedMap.prototype, Map.prototype);\n\nexport class TrackedWeakMap<K extends object = object, V = unknown>\n  implements WeakMap<K, V>\n{\n  private storages: WeakMap<K, TrackedStorage<null>> = new WeakMap();\n\n  private vals: WeakMap<K, V>;\n\n  private readStorageFor(key: K): void {\n    const { storages } = this;\n    let storage = storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      storages.set(key, storage);\n    }\n\n    getValue(storage);\n  }\n\n  private dirtyStorageFor(key: K): void {\n    const storage = this.storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  constructor();\n  constructor(iterable: Iterable<readonly [K, V]>);\n  constructor(entries: readonly [K, V][] | null);\n  constructor(\n    existing?: readonly [K, V][] | Iterable<readonly [K, V]> | null | undefined\n  ) {\n    // TypeScript doesn't correctly resolve the overloads for calling the `Map`\n    // constructor for the no-value constructor. This resolves that.\n    this.vals = existing ? new WeakMap(existing) : new WeakMap();\n  }\n\n  get(key: K): V | undefined {\n    this.readStorageFor(key);\n\n    return this.vals.get(key);\n  }\n\n  has(key: K): boolean {\n    this.readStorageFor(key);\n\n    return this.vals.has(key);\n  }\n\n  set(key: K, value: V): this {\n    this.dirtyStorageFor(key);\n\n    this.vals.set(key, value);\n\n    return this;\n  }\n\n  delete(key: K): boolean {\n    this.dirtyStorageFor(key);\n\n    return this.vals.delete(key);\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.vals[Symbol.toStringTag];\n  }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedWeakMap.prototype, WeakMap.prototype);\n","import {\n  TrackedStorage,\n  createStorage,\n  getValue,\n  setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport class TrackedSet<T = unknown> implements Set<T> {\n  private collection = createStorage(null, () => false);\n\n  private storages: Map<T, TrackedStorage<null>> = new Map();\n\n  private vals: Set<T>;\n\n  private storageFor(key: T): TrackedStorage<null> {\n    const storages = this.storages;\n    let storage = storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      storages.set(key, storage);\n    }\n\n    return storage;\n  }\n\n  private dirtyStorageFor(key: T): void {\n    const storage = this.storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  constructor();\n  constructor(values: readonly T[] | null);\n  constructor(iterable: Iterable<T>);\n  constructor(existing?: readonly T[] | Iterable<T> | null | undefined) {\n    this.vals = new Set(existing);\n  }\n\n  // **** KEY GETTERS ****\n  has(value: T): boolean {\n    getValue(this.storageFor(value));\n\n    return this.vals.has(value);\n  }\n\n  // **** ALL GETTERS ****\n  entries(): IterableIterator<[T, T]> {\n    getValue(this.collection);\n\n    return this.vals.entries();\n  }\n\n  keys(): IterableIterator<T> {\n    getValue(this.collection);\n\n    return this.vals.keys();\n  }\n\n  values(): IterableIterator<T> {\n    getValue(this.collection);\n\n    return this.vals.values();\n  }\n\n  forEach(fn: (value1: T, value2: T, set: Set<T>) => void): void {\n    getValue(this.collection);\n\n    this.vals.forEach(fn);\n  }\n\n  get size(): number {\n    getValue(this.collection);\n\n    return this.vals.size;\n  }\n\n  [Symbol.iterator](): IterableIterator<T> {\n    getValue(this.collection);\n\n    return this.vals[Symbol.iterator]();\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.vals[Symbol.toStringTag];\n  }\n\n  // **** KEY SETTERS ****\n  add(value: T): this {\n    this.dirtyStorageFor(value);\n    setValue(this.collection, null);\n\n    this.vals.add(value);\n\n    return this;\n  }\n\n  delete(value: T): boolean {\n    this.dirtyStorageFor(value);\n    setValue(this.collection, null);\n\n    return this.vals.delete(value);\n  }\n\n  // **** ALL SETTERS ****\n  clear(): void {\n    this.storages.forEach((s) => setValue(s, null));\n    setValue(this.collection, null);\n\n    this.vals.clear();\n  }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedSet.prototype, Set.prototype);\n\nexport class TrackedWeakSet<T extends object = object> implements WeakSet<T> {\n  private storages: WeakMap<T, TrackedStorage<null>> = new WeakMap();\n\n  private vals: WeakSet<T>;\n\n  private storageFor(key: T): TrackedStorage<null> {\n    const storages = this.storages;\n    let storage = storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      storages.set(key, storage);\n    }\n\n    return storage;\n  }\n\n  private dirtyStorageFor(key: T): void {\n    const storage = this.storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  constructor(values?: readonly T[] | null) {\n    this.vals = new WeakSet(values);\n  }\n\n  has(value: T): boolean {\n    getValue(this.storageFor(value));\n\n    return this.vals.has(value);\n  }\n\n  add(value: T): this {\n    // Add to vals first to get better error message\n    this.vals.add(value);\n\n    this.dirtyStorageFor(value);\n\n    return this;\n  }\n\n  delete(value: T): boolean {\n    this.dirtyStorageFor(value);\n\n    return this.vals.delete(value);\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.vals[Symbol.toStringTag];\n  }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedWeakSet.prototype, WeakSet.prototype);\n","import classApplyDescriptorGet from \"./classApplyDescriptorGet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldGet(receiver, privateMap) {\n  var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"get\");\n  return classApplyDescriptorGet(receiver, descriptor);\n}","export default function _classExtractFieldDescriptor(receiver, privateMap, action) {\n  if (!privateMap.has(receiver)) {\n    throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n  }\n  return privateMap.get(receiver);\n}","export default function _classApplyDescriptorGet(receiver, descriptor) {\n  if (descriptor.get) {\n    return descriptor.get.call(receiver);\n  }\n  return descriptor.value;\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\n// Unfortunately, TypeScript's ability to do inference *or* type-checking in a\n// `Proxy`'s body is very limited, so we have to use a number of casts `as any`\n// to make the internal accesses work. The type safety of these is guaranteed at\n// the *call site* instead of within the body: you cannot do `Array.blah` in TS,\n// and it will blow up in JS in exactly the same way, so it is safe to assume\n// that properties within the getter have the correct type in TS.\n\nimport {\n  TrackedStorage,\n  createStorage,\n  getValue,\n  setValue,\n} from 'ember-tracked-storage-polyfill';\n\nconst ARRAY_GETTER_METHODS = new Set<string | symbol | number>([\n  Symbol.iterator,\n  'concat',\n  'entries',\n  'every',\n  'filter',\n  'find',\n  'findIndex',\n  'flat',\n  'flatMap',\n  'forEach',\n  'includes',\n  'indexOf',\n  'join',\n  'keys',\n  'lastIndexOf',\n  'map',\n  'reduce',\n  'reduceRight',\n  'slice',\n  'some',\n  'values',\n]);\n\n// For these methods, `Array` itself immediately gets the `.length` to return\n// after invoking them.\nconst ARRAY_WRITE_THEN_READ_METHODS = new Set<string | symbol>([\n  'fill',\n  'push',\n  'unshift',\n]);\n\nfunction convertToInt(prop: number | string | symbol): number | null {\n  if (typeof prop === 'symbol') return null;\n\n  const num = Number(prop);\n\n  if (isNaN(num)) return null;\n\n  return num % 1 === 0 ? num : null;\n}\n\nclass TrackedArray<T = unknown> {\n  /**\n   * Creates an array from an iterable object.\n   * @param iterable An iterable object to convert to an array.\n   */\n  static from<T>(iterable: Iterable<T> | ArrayLike<T>): TrackedArray<T>;\n\n  /**\n   * Creates an array from an iterable object.\n   * @param iterable An iterable object to convert to an array.\n   * @param mapfn A mapping function to call on every element of the array.\n   * @param thisArg Value of 'this' used to invoke the mapfn.\n   */\n  static from<T, U>(\n    iterable: Iterable<T> | ArrayLike<T>,\n    mapfn: (v: T, k: number) => U,\n    thisArg?: unknown\n  ): TrackedArray<U>;\n\n  static from<T, U>(\n    iterable: Iterable<T> | ArrayLike<T>,\n    mapfn?: (v: T, k: number) => U,\n    thisArg?: unknown\n  ): TrackedArray<T> | TrackedArray<U> {\n    return mapfn\n      ? new TrackedArray(Array.from(iterable, mapfn, thisArg))\n      : new TrackedArray(Array.from(iterable));\n  }\n\n  static of<T>(...arr: T[]): TrackedArray<T> {\n    return new TrackedArray(arr);\n  }\n\n  constructor(arr: T[] = []) {\n    let clone = arr.slice();\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let self = this;\n\n    let boundFns = new Map<string | symbol, (...args: any[]) => any>();\n\n    /**\n      Flag to track whether we have *just* intercepted a call to `.push()` or\n      `.unshift()`, since in those cases (and only those cases!) the `Array`\n      itself checks `.length` to return from the function call.\n     */\n    let nativelyAccessingLengthFromPushOrUnshift = false;\n\n    return new Proxy(clone, {\n      get(target, prop /*, _receiver */) {\n        let index = convertToInt(prop);\n\n        if (index !== null) {\n          self.#readStorageFor(index);\n          getValue(self.#collection);\n\n          return target[index];\n        }\n\n        if (prop === 'length') {\n          // If we are reading `.length`, it may be a normal user-triggered\n          // read, or it may be a read triggered by Array itself. In the latter\n          // case, it is because we have just done `.push()` or `.unshift()`; in\n          // that case it is safe not to mark this as a *read* operation, since\n          // calling `.push()` or `.unshift()` cannot otherwise be part of a\n          // \"read\" operation safely, and if done during an *existing* read\n          // (e.g. if the user has already checked `.length` *prior* to this),\n          // that will still trigger the mutation-after-consumption assertion.\n          if (nativelyAccessingLengthFromPushOrUnshift) {\n            nativelyAccessingLengthFromPushOrUnshift = false;\n          } else {\n            getValue(self.#collection);\n          }\n\n          return target[prop];\n        }\n\n        // Here, track that we are doing a `.push()` or `.unshift()` by setting\n        // the flag to `true` so that when the `.length` is read by `Array` (see\n        // immediately above), it knows not to dirty the collection.\n        if (ARRAY_WRITE_THEN_READ_METHODS.has(prop)) {\n          nativelyAccessingLengthFromPushOrUnshift = true;\n        }\n\n        if (ARRAY_GETTER_METHODS.has(prop)) {\n          let fn = boundFns.get(prop);\n\n          if (fn === undefined) {\n            fn = (...args) => {\n              getValue(self.#collection);\n              return (target as any)[prop](...args);\n            };\n\n            boundFns.set(prop, fn);\n          }\n\n          return fn;\n        }\n\n        return (target as any)[prop];\n      },\n\n      set(target, prop, value /*, _receiver */) {\n        (target as any)[prop] = value;\n\n        let index = convertToInt(prop);\n\n        if (index !== null) {\n          self.#dirtyStorageFor(index);\n          setValue(self.#collection, null);\n        } else if (prop === 'length') {\n          setValue(self.#collection, null);\n        }\n\n        return true;\n      },\n\n      getPrototypeOf() {\n        return TrackedArray.prototype;\n      },\n    }) as TrackedArray<T>;\n  }\n\n  #collection = createStorage(null, () => false);\n\n  #storages = new Map<number, TrackedStorage<null>>();\n\n  #readStorageFor(index: number) {\n    let storage = this.#storages.get(index);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      this.#storages.set(index, storage);\n    }\n\n    getValue(storage);\n  }\n\n  #dirtyStorageFor(index: number): void {\n    const storage = this.#storages.get(index);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n}\n\n// This rule is correct in the general case, but it doesn't understand\n// declaration merging, which is how we're using the interface here. This says\n// `TrackedArray` acts just like `Array<T>`, but also has the properties\n// declared via the `class` declaration above -- but without the cost of a\n// subclass, which is much slower that the proxied array behavior. That is: a\n// `TrackedArray` *is* an `Array`, just with a proxy in front of accessors and\n// setters, rather than a subclass of an `Array` which would be de-optimized by\n// the browsers.\n//\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface TrackedArray<T = unknown> extends Array<T> {}\n\nexport default TrackedArray;\n\n// Ensure instanceof works correctly\nObject.setPrototypeOf(TrackedArray.prototype, Array.prototype);\n","import {\n  createStorage,\n  getValue,\n  setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport default class TrackedObject {\n  static fromEntries(entries) {\n    return new TrackedObject(Object.fromEntries(entries));\n  }\n\n  constructor(obj = {}) {\n    let proto = Object.getPrototypeOf(obj);\n    let descs = Object.getOwnPropertyDescriptors(obj);\n\n    let clone = Object.create(proto);\n\n    for (let prop in descs) {\n      Object.defineProperty(clone, prop, descs[prop]);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let self = this;\n\n    return new Proxy(clone, {\n      get(target, prop) {\n        self.#readStorageFor(prop);\n\n        return target[prop];\n      },\n\n      has(target, prop) {\n        self.#readStorageFor(prop);\n\n        return prop in target;\n      },\n\n      ownKeys(target) {\n        getValue(self.#collection);\n\n        return Reflect.ownKeys(target);\n      },\n\n      set(target, prop, value) {\n        target[prop] = value;\n\n        self.#dirtyStorageFor(prop);\n        self.#dirtyCollection();\n\n        return true;\n      },\n\n      deleteProperty(target, prop) {\n        if (prop in target) {\n          delete target[prop];\n          self.#dirtyStorageFor(prop);\n          self.#dirtyCollection();\n        }\n\n        return true;\n      },\n\n      getPrototypeOf() {\n        return TrackedObject.prototype;\n      },\n    });\n  }\n\n  #storages = new Map();\n\n  #collection = createStorage(null, () => false);\n\n  #readStorageFor(key) {\n    let storage = this.#storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      this.#storages.set(key, storage);\n    }\n\n    getValue(storage);\n  }\n\n  #dirtyStorageFor(key) {\n    const storage = this.#storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  #dirtyCollection() {\n    setValue(this.#collection, null);\n  }\n}\n","import { tracked as glimmerTracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nimport { TrackedMap, TrackedWeakMap } from './map';\nimport { TrackedSet, TrackedWeakSet } from './set';\nimport TrackedArray from './array';\nimport TrackedObject from './object';\n\nexport default function tracked<T>(obj: T[] | typeof Array): TrackedArray<T>;\n\nexport default function tracked<T>(obj: Set<T> | typeof Set): TrackedSet<T>;\n\nexport default function tracked<T, U>(\n  obj: Map<T, U> | typeof Map\n): TrackedMap<T, U>;\n\nexport default function tracked<T extends object>(\n  obj: WeakSet<T> | typeof WeakSet\n): TrackedWeakSet<T>;\n\nexport default function tracked<T extends object, U>(\n  obj: WeakMap<T, U> | typeof WeakMap\n): TrackedWeakMap<T, U>;\n\nexport default function tracked<T extends object>(obj: T | typeof Object): T;\n\nexport default function tracked(\n  obj: object,\n  key: string | symbol,\n  desc?: PropertyDescriptor\n): void;\n\nexport default function tracked(\n  obj: object,\n  key?: string | symbol,\n  desc?: PropertyDescriptor\n): unknown {\n  if (key !== undefined && desc !== undefined) {\n    return glimmerTracked(obj, key, desc);\n  }\n\n  if (Array.isArray(obj)) {\n    return new TrackedArray(obj);\n  }\n\n  switch (obj) {\n    case Object:\n      return new TrackedObject();\n    case Array:\n      return new TrackedArray();\n    case Map:\n      return new TrackedMap();\n    case WeakMap:\n      return new TrackedWeakMap();\n    case Set:\n      return new TrackedSet();\n    case WeakSet:\n      return new TrackedWeakSet();\n  }\n\n  if (obj instanceof Map) {\n    return new TrackedMap(obj);\n  } else if (obj instanceof WeakMap) {\n    return new TrackedWeakMap();\n  } else if (obj instanceof Set) {\n    return new TrackedSet(obj);\n  } else if (obj instanceof WeakSet) {\n    return new TrackedWeakSet();\n  } else {\n    assert(\n      `You must either use tracked as a field decorator, or to wrap built-in class instances:\n\n      class Example {\n        @tracked field = 123;\n\n        map = tracked(Map);\n        map = tracked(new Map());\n      }`,\n      typeof obj === 'object' && obj !== null\n    );\n\n    return new TrackedObject(obj as Record<PropertyKey, unknown>);\n  }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"NIL\", {\n  enumerable: true,\n  get: function get() {\n    return _nil.default;\n  }\n});\nObject.defineProperty(exports, \"parse\", {\n  enumerable: true,\n  get: function get() {\n    return _parse.default;\n  }\n});\nObject.defineProperty(exports, \"stringify\", {\n  enumerable: true,\n  get: function get() {\n    return _stringify.default;\n  }\n});\nObject.defineProperty(exports, \"v1\", {\n  enumerable: true,\n  get: function get() {\n    return _v.default;\n  }\n});\nObject.defineProperty(exports, \"v3\", {\n  enumerable: true,\n  get: function get() {\n    return _v2.default;\n  }\n});\nObject.defineProperty(exports, \"v4\", {\n  enumerable: true,\n  get: function get() {\n    return _v3.default;\n  }\n});\nObject.defineProperty(exports, \"v5\", {\n  enumerable: true,\n  get: function get() {\n    return _v4.default;\n  }\n});\nObject.defineProperty(exports, \"validate\", {\n  enumerable: true,\n  get: function get() {\n    return _validate.default;\n  }\n});\nObject.defineProperty(exports, \"version\", {\n  enumerable: true,\n  get: function get() {\n    return _version.default;\n  }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = require(\"./stringify.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n  let i = buf && offset || 0;\n  const b = buf || new Array(16);\n  options = options || {};\n  let node = options.node || _nodeId;\n  let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n\n  if (node == null || clockseq == null) {\n    const seedBytes = options.random || (options.rng || _rng.default)();\n\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n    }\n\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n  let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n\n  let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n  const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n\n\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n  if (nsecs >= 10000) {\n    throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n  msecs += 12219292800000; // `time_low`\n\n  const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff; // `time_mid`\n\n  const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff; // `time_high_and_version`\n\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n  b[i++] = clockseq & 0xff; // `node`\n\n  for (let n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf || (0, _stringify.unsafeStringify)(b);\n}\n\nvar _default = v1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n  if (typeof bytes === 'string') {\n    const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = new Uint8Array(msg.length);\n\n    for (let i = 0; i < msg.length; ++i) {\n      bytes[i] = msg.charCodeAt(i);\n    }\n  }\n\n  return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n  const output = [];\n  const length32 = input.length * 32;\n  const hexTab = '0123456789abcdef';\n\n  for (let i = 0; i < length32; i += 8) {\n    const x = input[i >> 5] >>> i % 32 & 0xff;\n    const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n    output.push(hex);\n  }\n\n  return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n  return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n  /* append padding */\n  x[len >> 5] |= 0x80 << len % 32;\n  x[getOutputLength(len) - 1] = len;\n  let a = 1732584193;\n  let b = -271733879;\n  let c = -1732584194;\n  let d = 271733878;\n\n  for (let i = 0; i < x.length; i += 16) {\n    const olda = a;\n    const oldb = b;\n    const oldc = c;\n    const oldd = d;\n    a = md5ff(a, b, c, d, x[i], 7, -680876936);\n    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n    b = md5gg(b, c, d, a, x[i], 20, -373897302);\n    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n    d = md5hh(d, a, b, c, x[i], 11, -358537222);\n    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n    a = md5ii(a, b, c, d, x[i], 6, -198630844);\n    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n    a = safeAdd(a, olda);\n    b = safeAdd(b, oldb);\n    c = safeAdd(c, oldc);\n    d = safeAdd(d, oldd);\n  }\n\n  return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n  if (input.length === 0) {\n    return [];\n  }\n\n  const length8 = input.length * 8;\n  const output = new Uint32Array(getOutputLength(length8));\n\n  for (let i = 0; i < length8; i += 8) {\n    output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n  }\n\n  return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n  const lsw = (x & 0xffff) + (y & 0xffff);\n  const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n  return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n  return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n  return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n  return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n  return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n  return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nvar _default = md5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _native = _interopRequireDefault(require(\"./native.js\"));\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = require(\"./stringify.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n  if (_native.default.randomUUID && !buf && !options) {\n    return _native.default.randomUUID();\n  }\n\n  options = options || {};\n\n  const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return (0, _stringify.unsafeStringify)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nconst randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nvar _default = {\n  randomUUID\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n  switch (s) {\n    case 0:\n      return x & y ^ ~x & z;\n\n    case 1:\n      return x ^ y ^ z;\n\n    case 2:\n      return x & y ^ x & z ^ y & z;\n\n    case 3:\n      return x ^ y ^ z;\n  }\n}\n\nfunction ROTL(x, n) {\n  return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n  const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n  const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n  if (typeof bytes === 'string') {\n    const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = [];\n\n    for (let i = 0; i < msg.length; ++i) {\n      bytes.push(msg.charCodeAt(i));\n    }\n  } else if (!Array.isArray(bytes)) {\n    // Convert Array-like to Array\n    bytes = Array.prototype.slice.call(bytes);\n  }\n\n  bytes.push(0x80);\n  const l = bytes.length / 4 + 2;\n  const N = Math.ceil(l / 16);\n  const M = new Array(N);\n\n  for (let i = 0; i < N; ++i) {\n    const arr = new Uint32Array(16);\n\n    for (let j = 0; j < 16; ++j) {\n      arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n    }\n\n    M[i] = arr;\n  }\n\n  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n  M[N - 1][14] = Math.floor(M[N - 1][14]);\n  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n  for (let i = 0; i < N; ++i) {\n    const W = new Uint32Array(80);\n\n    for (let t = 0; t < 16; ++t) {\n      W[t] = M[i][t];\n    }\n\n    for (let t = 16; t < 80; ++t) {\n      W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n    }\n\n    let a = H[0];\n    let b = H[1];\n    let c = H[2];\n    let d = H[3];\n    let e = H[4];\n\n    for (let t = 0; t < 80; ++t) {\n      const s = Math.floor(t / 20);\n      const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n      e = d;\n      d = c;\n      c = ROTL(b, 30) >>> 0;\n      b = a;\n      a = T;\n    }\n\n    H[0] = H[0] + a >>> 0;\n    H[1] = H[1] + b >>> 0;\n    H[2] = H[2] + c >>> 0;\n    H[3] = H[3] + d >>> 0;\n    H[4] = H[4] + e >>> 0;\n  }\n\n  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nvar _default = sha1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n  if (!(0, _validate.default)(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  return parseInt(uuid.slice(14, 15), 16);\n}\n\nvar _default = version;\nexports.default = _default;","export const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n","import {\n  PRIMITIVE, ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  PRIMITIVE, ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type)\n          return as([type, [...value]], value);\n  \n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{lossy?: boolean}?} options an object with a `lossy` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer: any[]}?} options an object with a transfoer property.\n *  This is currently not supported, all values are always cloned.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  structuredClone :\n  (any, options) => deserialize(serialize(any, options));\n\nexport {deserialize, serialize};\n","export default function isObject<T>(val: T): boolean {\n  return (\n    val !== null &&\n    typeof val === 'object' &&\n    !(val instanceof Date || val instanceof RegExp) &&\n    !Array.isArray(val)\n  );\n}\n","/* import { IChange } from '../types'; */\nimport isObject from '../utils/is-object';\n\nexport const VALUE = Symbol('__value__');\n\nexport default class Change {\n  [VALUE]: unknown;\n\n  constructor(value: unknown) {\n    this[VALUE] = value;\n  }\n}\n\n// TODO: not sure why this function type guard isn't working\nexport const isChange = (maybeChange: unknown): maybeChange is Change =>\n  isObject(maybeChange) && VALUE in (maybeChange as any);\n\nexport function getChangeValue(maybeChange: Change | unknown): any {\n  if (isChange(maybeChange)) {\n    return maybeChange[VALUE];\n  }\n}\n","import type { IErr, ValidationErr } from '../types';\n\nexport default class Err implements IErr<any> {\n  value: any;\n  validation: ValidationErr | ValidationErr[];\n\n  constructor(value: any, validation: ValidationErr | ValidationErr[]) {\n    this.value = value;\n    this.validation = validation;\n  }\n}\n","import { getChangeValue, isChange } from '../-private/change';\nimport isObject from './is-object';\nimport Err from '../-private/err';\nimport type { PublicErrors } from '../types';\n\n/**\n * traverse through target and return leaf nodes with `value` property and key as 'person.name'\n * Only detects key paths with Changes\n *\n * @method getKeyValues\n * @return {Array} [{ 'person.name': value }]\n */\nexport function getKeyValues<T extends Record<string, any>>(\n  obj: T,\n  keysUpToValue: Array<string> = []\n): Record<string, any>[] {\n  const map = [];\n\n  for (let key in obj) {\n    if (obj[key] && isObject(obj[key])) {\n      if (isChange(obj[key])) {\n        map.push({ key: [...keysUpToValue, key].join('.'), value: getChangeValue(obj[key]) });\n      } else {\n        map.push(...getKeyValues(obj[key], [...keysUpToValue, key]));\n      }\n    }\n  }\n\n  return map;\n}\n\n/**\n * traverse through target and return leaf nodes with `value` property and key as 'person.name'\n *\n * @method getKeyErrorValues\n * @return {Array} [{ key: 'person.name', validation: '', value: '' }]\n */\nexport function getKeyErrorValues<T extends Record<string, any>>(\n  obj: T,\n  keysUpToValue: Array<string> = []\n): PublicErrors {\n  let map = [];\n\n  for (let key in obj) {\n    if (obj[key] && isObject(obj[key])) {\n      if (\n        Object.prototype.hasOwnProperty.call(obj[key], 'value') &&\n        (obj[key] as any) instanceof Err\n      ) {\n        map.push({\n          key: [...keysUpToValue, key].join('.'),\n          validation: obj[key].validation,\n          value: obj[key].value\n        });\n      } else if (key !== 'value') {\n        map.push(...getKeyErrorValues(obj[key], [...keysUpToValue, key]));\n      }\n    }\n  }\n\n  return map;\n}\n","import isObject from './is-object';\n\nfunction isPromiseLike(obj: any): boolean {\n  return (\n    !!obj &&\n    !!obj.then &&\n    !!obj.catch &&\n    !!obj.finally &&\n    typeof obj.then === 'function' &&\n    typeof obj.catch === 'function' &&\n    typeof obj.finally === 'function'\n  );\n}\n\nexport default function isPromise(obj: any): boolean {\n  return isObject(obj) && isPromiseLike(obj);\n}\n","import isPromise from './is-promise';\nimport type { ValidatorMapFunc, ValidationResult, ValidatorClass } from '../types';\n\n/**\n * Rejects `true` values from an array of validations. Returns `true` when there\n * are no errors, or the error object if there are errors.\n *\n * @private\n * @param  {Array} validations\n * @return {Promise<boolean|Any>}\n */\nasync function handleValidationsAsync(\n  validations: Array<ValidationResult | Promise<ValidationResult>>\n): Promise<any> {\n  try {\n    const result = await Promise.all(validations);\n\n    const maybeFailed = result.filter((val) => typeof val !== 'boolean' && val);\n    return maybeFailed.length === 0 || maybeFailed;\n  } catch (e) {\n    return e;\n  }\n}\n\n/**\n * Rejects `true` values from an array of validations. Returns `true` when there\n * are no errors, or the error object if there are errors.\n *\n * @private\n * @param  {Array} validations\n * @return {boolean|Any}\n */\nfunction handleValidationsSync(validations: Array<ValidationResult>): boolean | any {\n  const maybeFailed = validations.filter((val) => typeof val !== 'boolean' && val);\n  return maybeFailed.length === 0 || maybeFailed;\n}\n/**\n * Handles an array of validators and returns Promise.all if any value is a\n * Promise.\n *\n * @public\n * @param  {Array} validators Array of validator functions\n * @param  {String} options.key\n * @param  {Any} options.newValue\n * @param  {Any} options.oldValue\n * @param  {Object} options.changes\n * @param  {Object} options.content\n * @return {Promise|boolean|Any}\n */\nexport default function handleMultipleValidations(\n  validators: Array<ValidatorMapFunc | ValidatorClass>,\n  { key, newValue, oldValue, changes, content }: { [s: string]: any }\n): boolean | any {\n  let validations: Array<ValidationResult | Promise<ValidationResult>> = Array.from(\n    validators.map(\n      (\n        validator: ValidatorMapFunc | ValidatorClass\n      ): ValidationResult | Promise<ValidationResult> => {\n        const isValidatorClass = (maybeClass: unknown): maybeClass is ValidatorClass =>\n          !!(maybeClass as Record<string, any>).validate;\n        if (validator && isValidatorClass(validator)) {\n          validator = validator.validate.bind(validator);\n        }\n\n        return validator(key, newValue, oldValue, changes, content);\n      }\n    )\n  );\n\n  if (validations.some(isPromise)) {\n    return Promise.all(validations).then(handleValidationsAsync);\n  }\n\n  return handleValidationsSync(validations as Array<ValidationResult>);\n}\n","import { isChange, getChangeValue } from '../-private/change';\n\n/**\n * Handles both single key or nested string keys ('person.name')\n *\n * @method getDeep\n */\nexport default function getDeep<T extends Record<string, any>>(\n  root: T,\n  path: string | string[]\n): any {\n  let obj: T = root;\n\n  if (path.indexOf('.') === -1) {\n    return obj[path as string];\n  }\n  const parts: string[] = typeof path === 'string' ? path.split('.') : path;\n\n  for (let i = 0; i < parts.length; i++) {\n    if (obj === undefined || obj === null) {\n      return undefined;\n    }\n\n    // next iteration has next level\n    obj = obj[parts[i]];\n  }\n\n  return obj;\n}\n\n/**\n * Returns subObject while skipping `Change` instances\n *\n * @method getSubObject\n */\nexport function getSubObject<T extends Record<string, any>>(root: T, path: string | string[]): any {\n  let obj: T = root;\n\n  if (path.indexOf('.') === -1) {\n    return obj[path as string];\n  }\n\n  const parts: string[] = typeof path === 'string' ? path.split('.') : path;\n\n  for (let i = 0; i < parts.length; i++) {\n    if (obj === undefined || obj === null) {\n      return undefined;\n    }\n\n    if (isChange(obj[parts[i]])) {\n      obj = getChangeValue(obj[parts[i]]);\n    } else {\n      obj = obj[parts[i]];\n    }\n  }\n\n  return obj;\n}\n","import handleMultipleValidations from './handle-multiple-validations';\nimport isPromise from './is-promise';\nimport isObject from './is-object';\nimport type {\n  ValidatorAction,\n  ValidatorMapFunc,\n  ValidatorClass,\n  ValidationResult,\n  ValidatorMap\n} from '../types';\nimport get from './get-deep';\n\n/**\n * returns a closure to lookup and validate k/v pairs set on a changeset\n *\n * @method lookupValidator\n * @param validationMap\n */\nexport default function lookupValidator(validationMap: ValidatorMap): ValidatorAction {\n  return ({ key, newValue, oldValue, changes, content }) => {\n    const validations = validationMap || {};\n    let validator:\n      | ValidatorMapFunc\n      | ValidatorMapFunc[]\n      | ValidatorClass\n      | ValidatorClass[]\n      | Array<ValidatorMapFunc | ValidatorClass> = get(validations, key);\n    const isValidatorClass = (maybeClass: unknown): maybeClass is ValidatorClass =>\n      !!(maybeClass as Record<string, any>).validate;\n    if (validator && isValidatorClass(validator)) {\n      validator = validator.validate.bind(validator);\n    }\n\n    if (!validator || isObject(validator)) {\n      return true;\n    }\n\n    let validation: ValidationResult | Promise<ValidationResult>;\n    if (Array.isArray(validator)) {\n      validation = handleMultipleValidations(validator, {\n        key,\n        newValue,\n        oldValue,\n        changes,\n        content\n      });\n    } else {\n      validation = (validator as ValidatorMapFunc)(key, newValue, oldValue, changes, content);\n    }\n\n    return isPromise(validation)\n      ? (validation as Promise<ValidationResult>).then((result) => {\n          return result;\n        })\n      : validation;\n  };\n}\n","// this statefull class holds and notifies\n\nexport default class Notifier<T extends any[]> {\n  listeners: ((...args: T) => void)[];\n\n  constructor() {\n    this.listeners = [];\n  }\n\n  addListener(callback: (...args: T) => void) {\n    this.listeners.push(callback);\n    return () => this.removeListener(callback);\n  }\n\n  removeListener(callback: (...args: T) => void) {\n    for (let i = 0; i < this.listeners.length; i++) {\n      if (this.listeners[i] === callback) {\n        this.listeners.splice(i, 1);\n        return;\n      }\n    }\n  }\n\n  trigger(...args: T) {\n    this.listeners.forEach((callback) => callback(...args));\n  }\n}\n","import Notifier from './notifier';\n\nexport function notifierForEvent(object: any, eventName: string) {\n  if (object._eventedNotifiers === undefined) {\n    object._eventedNotifiers = {};\n  }\n\n  let notifier = object._eventedNotifiers[eventName];\n\n  if (!notifier) {\n    notifier = object._eventedNotifiers[eventName] = new Notifier();\n  }\n\n  return notifier;\n}\n","import { getChangeValue, isChange } from '../-private/change';\n\nexport function hasKey(\n  record: Record<string, any>,\n  path: string,\n  safeGet: (obj: Record<string, any>, key: string) => any\n): boolean {\n  const keys = path.split('.');\n\n  let obj = record;\n  for (const key of keys) {\n    if (!obj || !Object.prototype.hasOwnProperty.call(obj, key)) {\n      return false;\n    }\n\n    obj = safeGet(obj, key);\n    if (isChange(obj)) {\n      obj = getChangeValue(obj);\n    }\n  }\n\n  return true;\n}\n\nexport function pathInChanges(\n  record: Record<string, any>,\n  path: string,\n  safeGet: (obj: Record<string, any>, key: string) => any\n): boolean {\n  if (isChange(record)) {\n    return false;\n  }\n\n  const keys = path.split('.');\n\n  let obj = record;\n  for (const key of keys) {\n    if (!obj) {\n      return false;\n    }\n\n    if (keys[keys.length - 1] !== key && isChange(safeGet(obj, key))) {\n      return true;\n    }\n\n    obj = safeGet(obj, key);\n  }\n\n  return false;\n}\n","import { getChangeValue, isChange } from '../-private/change';\nimport isObject from './is-object';\n\n/**\n * traverse through target and unset `value` from leaf key so can access normally\n * {\n *  name: Change {\n *    value: 'Charles'\n *  }\n * }\n *\n * to\n *\n * {\n *  name: 'Charles'\n * }\n *\n * Shallow copy here is fine because we are swapping out the leaf nested object\n * rather than mutating a property in something with reference\n *\n * @method normalizeObject\n * @param {Object} target\n * @return {Object}\n */\nexport default function normalizeObject<T extends { [key: string]: any }>(\n  target: T,\n  isObj: (...args: unknown[]) => unknown = isObject\n): T {\n  if (!target || !isObj(target)) {\n    return target;\n  }\n\n  if (isChange(target)) {\n    return getChangeValue(target);\n  }\n\n  let obj = { ...target };\n\n  for (let key in obj) {\n    const next: any = obj[key];\n    if (next && isObj(next)) {\n      if (isChange(next)) {\n        obj[key] = getChangeValue(next);\n      } else {\n        try {\n          JSON.stringify(next);\n        } catch (e) {\n          break;\n        }\n        obj[key] = normalizeObject(next);\n      }\n    }\n  }\n\n  return obj;\n}\n","import isObject from './is-object';\nimport { isChange } from '../-private/change';\n\nexport function hasChanges(changes: Record<string, any>): boolean {\n  for (let key in changes) {\n    if (isChange(changes[key])) {\n      return true;\n    }\n\n    if (isObject(changes[key])) {\n      const isTruthy = hasChanges(changes[key]);\n      if (isTruthy) {\n        return isTruthy;\n      }\n    }\n  }\n\n  return false;\n}\n","let getOwnPropertyDescriptors: (obj: { [x: string]: any }) => { [x: string]: PropertyDescriptor };\n\nif (Object.getOwnPropertyDescriptors !== undefined) {\n  getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors;\n} else {\n  getOwnPropertyDescriptors = function (obj: object) {\n    let desc: Record<string, any> = {};\n\n    Object.keys(obj).forEach((key) => {\n      desc[key] = Object.getOwnPropertyDescriptor(obj, key);\n    });\n\n    return desc;\n  };\n}\n\n// keep getters and setters\nexport default function pureAssign(...objects: object[]): object {\n  return objects.reduce((acc, obj) => {\n    return Object.defineProperties(acc, getOwnPropertyDescriptors(obj));\n  }, {});\n}\n","import isObject from './is-object';\n\nfunction flatten(\n  validatorMap: Record<string, any>,\n  obj: Record<string, any>,\n  keys: string[],\n  keysUpToFunction: Array<string> = []\n): object {\n  for (let key of keys) {\n    const value: any = validatorMap[key];\n    if (typeof value.validate === 'function') {\n      // class with .validate function\n      obj[key] = value;\n    } else if (isObject(value)) {\n      flatten(value, obj, Object.keys(value), [...keysUpToFunction, key]);\n    } else if (typeof value === 'function') {\n      const dotSeparatedKeys = [...keysUpToFunction, key].join('.');\n      obj[dotSeparatedKeys] = value;\n    } else if (Array.isArray(value)) {\n      const isAllFuncs: boolean = value.every(\n        (item) => typeof item === 'function' || typeof item.validate === 'function'\n      );\n      if (isAllFuncs) {\n        const dotSeparatedKeys = [...keysUpToFunction, key].join('.');\n        obj[dotSeparatedKeys] = value;\n      }\n    }\n  }\n\n  return obj;\n}\n\n/**\n * With nested validations, we flatten to a dot separated 'user.email': validationFunc\n * Once doing so, validation will happen with a single level key or dot separated key\n *\n * @method flattenValidations\n * @return {object}\n */\nexport function flattenValidations(validatorMap: Record<string, any>): object {\n  if (!validatorMap) {\n    return {};\n  }\n\n  let obj: Record<string, any> = {};\n  return flatten(validatorMap, obj, Object.keys(validatorMap));\n}\n","export const CHANGESET = '__CHANGESET__';\n\nexport default function isChangeset(changeset: any): boolean {\n  return changeset && changeset['__changeset__'] === CHANGESET;\n}\n","export default function keyInObject(obj: any, key: string): boolean {\n  let [baseKey, ...keys] = key.split('.');\n\n  if (!baseKey || !(baseKey in obj)) {\n    return false;\n  }\n\n  if (!keys.length) {\n    return baseKey in obj;\n  }\n\n  let value = obj[baseKey];\n  if (value !== null && typeof value === 'object') {\n    return keyInObject(obj[baseKey], keys.join('.'));\n  }\n\n  return false;\n}\n","export function isArrayObject(obj: Record<string, any>) {\n  if (!obj) return false;\n\n  let maybeIndicies = Object.keys(obj);\n\n  return maybeIndicies.every((key) => Number.isInteger(parseInt(key, 10)));\n}\n\nexport function arrayToObject(array: any[]): Record<string, any> {\n  return array.reduce((obj, item, index) => {\n    obj[index] = item;\n    return obj;\n  }, {} as Record<string, any>);\n}\n\nexport function objectToArray(obj: Record<string, any>): any[] {\n  let result: any[] = [];\n\n  for (let [index, value] of Object.entries(obj)) {\n    result[parseInt(index, 10)] = value;\n  }\n\n  return result;\n}\n","import Change, { getChangeValue, isChange } from '../-private/change';\nimport isObject from './is-object';\nimport { isArrayObject } from './array-object';\n\ninterface Options {\n  safeSet?: any;\n  safeGet?: any;\n}\n\nfunction split(path: string): string[] {\n  const keys = path.split('.');\n\n  return keys;\n}\n\nfunction findSiblings(target: any, keys: string[]) {\n  const [leafKey] = keys.slice(-1);\n  const remaining = Object.keys(target)\n    .filter((k) => k !== leafKey)\n    .reduce((acc, key) => {\n      acc[key] = target[key];\n      return acc;\n    }, Object.create(null));\n\n  return { ...remaining };\n}\n\nfunction isValidKey(key: unknown) {\n  return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n}\n\n/**\n * TODO: consider\n * https://github.com/emberjs/ember.js/blob/822452c4432620fc67a777aba3b150098fd6812d/packages/%40ember/-internals/metal/lib/property_set.ts\n *\n * Handles both single path or nested string paths ('person.name')\n *\n * @method setDeep\n */\nexport default function setDeep(\n  target: any,\n  path: string,\n  value: unknown,\n  options: Options = { safeSet: undefined, safeGet: undefined }\n): any {\n  const keys = split(path).filter(isValidKey);\n  // We will mutate target and through complex reference, we will mutate the orig\n  let orig = target;\n\n  options.safeSet =\n    options.safeSet ||\n    function (obj: any, key: string, value: unknown): any {\n      return (obj[key] = value);\n    };\n  options.safeGet =\n    options.safeGet ||\n    function (obj: any, key: string): any {\n      return obj ? obj[key] : obj;\n    };\n\n  if (keys.length === 1) {\n    options.safeSet(target, path, value);\n    return target;\n  }\n\n  for (let i = 0; i < keys.length; i++) {\n    let prop = keys[i];\n\n    if (Array.isArray(target) && parseInt(prop, 10) < 0) {\n      throw new Error(\n        'Negative indices are not allowed as arrays do not serialize values at negative indices'\n      );\n    }\n\n    const isObj = isObject(options.safeGet(target, prop));\n    const isArray = Array.isArray(options.safeGet(target, prop));\n    const isComplex = isObj || isArray;\n\n    if (!isComplex) {\n      options.safeSet(target, prop, {});\n    } else if (isComplex && isChange(options.safeGet(target, prop))) {\n      let changeValue = getChangeValue(options.safeGet(target, prop));\n\n      if (isObject(changeValue)) {\n        // if an object, we don't want to lose sibling keys\n        const siblings = findSiblings(changeValue, keys);\n\n        const resolvedValue = isChange(value) ? getChangeValue(value) : value;\n\n        const isArrayLike = Array.isArray(target) || isArrayObject(target);\n        const nestedKeys = isArrayLike\n          ? keys.slice(i + 1, keys.length).join('.') // remove first key segment as well as the index\n          : keys.slice(1, keys.length).join('.'); // remove first key segment\n\n        let newValue;\n\n        // if the resolved value was deleted (via setting to null or undefined),\n        // there is no need to setDeep. We can short-circuit that and set\n        // newValue directly because of the shallow value\n        if (isArrayLike && undefined === resolvedValue) {\n          newValue = resolvedValue;\n        } else if (i === keys.length - 1) {\n          // If last key, this is the final value\n          newValue = resolvedValue;\n        } else {\n          newValue = setDeep(siblings, nestedKeys, resolvedValue, options);\n        }\n\n        options.safeSet(target, prop, new Change(newValue));\n\n        // since we are done with the `path`, we can terminate the for loop and return control\n        break;\n      } else {\n        // we don't want to merge new changes with a Change instance higher up in the obj tree\n        // thus we nullify the current Change instance to\n        options.safeSet(target, prop, {});\n      }\n    }\n\n    // last iteration, set and return control\n    if (i === keys.length - 1) {\n      options.safeSet(target, prop, value);\n\n      break;\n    }\n\n    // assign next level of object for next loop\n    target = options.safeGet(target, prop);\n  }\n\n  return orig;\n}\n","import setDeep from './set-deep';\n\nconst { keys } = Object;\n\n/**\n * Given an array of objects, merge their keys into a new object and\n * return the new object.\n */\nexport default function mergeNested<T>(...objects: Array<{ [key: string]: T }>): {\n  [key: string]: T;\n} {\n  let finalObj = {};\n\n  objects.forEach((obj) => keys(obj).forEach((key) => setDeep(finalObj, key, obj[key])));\n\n  return finalObj;\n}\n","export function buildOldValues(\n  content: any,\n  changes: Record<string, any>[],\n  getDeep: (obj: any, key: string) => any\n): object {\n  const obj = Object.create(null);\n\n  for (let change of changes) {\n    obj[change.key] = getDeep(content, change.key);\n  }\n\n  return obj;\n}\n","import { getChangeValue, isChange } from '../-private/change';\nimport normalizeObject from './normalize-object';\nimport { isArrayObject, objectToArray, arrayToObject } from './array-object';\n\ninterface Options {\n  safeGet: any;\n  safeSet: any;\n  propertyIsUnsafe?: any;\n  getKeys?: (record: Record<string, unknown>) => string[];\n}\n\nfunction isNonNullObject(value: any): boolean {\n  return !!value && typeof value === 'object';\n}\n\nfunction isSpecial(value: any): boolean {\n  let stringValue = Object.prototype.toString.call(value);\n\n  return stringValue === '[object RegExp]' || stringValue === '[object Date]';\n}\n\nfunction isMergeableObject(value: any): boolean {\n  return isNonNullObject(value) && !isSpecial(value);\n}\n\nfunction getEnumerableOwnPropertySymbols(target: any): any {\n  return Object.getOwnPropertySymbols\n    ? Object.getOwnPropertySymbols(target).filter((symbol) => {\n        return target.propertyIsEnumerable(symbol);\n      })\n    : [];\n}\n\nfunction getKeys(target: any) {\n  return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target));\n}\n\nfunction propertyIsOnObject(object: any, property: any) {\n  try {\n    return property in object;\n  } catch (_) {\n    return false;\n  }\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nexport function propertyIsUnsafe(target: any, key: string): boolean {\n  return (\n    propertyIsOnObject(target, key) && // Properties are safe to merge if they don't exist in the target yet,\n    // unsafe if they exist up the prototype chain and also unsafe if they're nonenumerable.\n    !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key))\n  );\n}\n\n/**\n * DFS - traverse depth first until find object with `value`.  Then go back up tree and try on next key\n * Need to exhaust all possible avenues.\n *\n * @method buildPathToValue\n */\nfunction buildPathToValue(\n  source: any,\n  options: Options,\n  kv: Record<string, any>,\n  possibleKeys: string[]\n): Record<string, any> {\n  Object.keys(source).forEach((key: string): void => {\n    let possible = source[key];\n    if (possible && isChange(possible)) {\n      kv[[...possibleKeys, key].join('.')] = getChangeValue(possible);\n      return;\n    }\n\n    if (possible && typeof possible === 'object') {\n      buildPathToValue(possible, options, kv, [...possibleKeys, key]);\n    }\n  });\n\n  return kv;\n}\n\n/**\n * `source` will always have a leaf key `value` with the property we want to set\n *\n * @method mergeTargetAndSource\n */\nfunction mergeTargetAndSource(target: any, source: any, options: Required<Options>): any {\n  options.getKeys(source).forEach((key) => {\n    // proto poisoning.  So can set by nested key path 'person.name'\n    if (options.propertyIsUnsafe(target, key)) {\n      // if safeSet, we will find keys leading up to value and set\n      if (options.safeSet) {\n        const kv: Record<string, any> = buildPathToValue(source, options, {}, []);\n        // each key will be a path nested to the value `person.name.other`\n        if (Object.keys(kv).length > 0) {\n          // we found some keys!\n          for (key in kv) {\n            const val = kv[key];\n            options.safeSet(target, key, val);\n          }\n        }\n      }\n\n      return;\n    }\n\n    // else safe key on object\n    if (\n      propertyIsOnObject(target, key) &&\n      isMergeableObject(source[key]) &&\n      !isChange(source[key])\n    ) {\n      options.safeSet(\n        target,\n        key,\n        mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options)\n      );\n    } else {\n      let next = source[key];\n      if (next && isChange(next)) {\n        return options.safeSet(target, key, getChangeValue(next));\n      }\n\n      return options.safeSet(target, key, normalizeObject(next));\n    }\n  });\n\n  return target;\n}\n\n/**\n * goal is to mutate target with source's properties, ensuring we dont encounter\n * pitfalls of { ..., ... } spread syntax overwriting keys on objects that we merged\n *\n * This is also adjusted for Ember peculiarities.  Specifically `options.setPath` will allows us\n * to handle properties on Proxy objects (that aren't the target's own property)\n *\n * @method mergeDeep\n */\nexport default function mergeDeep(\n  target: any,\n  source: any,\n  options: Options = {\n    safeGet: undefined,\n    safeSet: undefined,\n    propertyIsUnsafe: undefined,\n    getKeys: undefined\n  }\n): object | [any] {\n  options.getKeys = options.getKeys || getKeys;\n  options.propertyIsUnsafe = options.propertyIsUnsafe || propertyIsUnsafe;\n\n  options.safeGet =\n    options.safeGet ||\n    function (obj: Record<string, any>, key: string): Record<string, any> {\n      return obj[key];\n    };\n  options.safeSet =\n    options.safeSet ||\n    function (obj: any, key: string, value: unknown): any {\n      return (obj[key] = value);\n    };\n  let sourceIsArray = Array.isArray(source);\n  let targetIsArray = Array.isArray(target);\n  let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n  if (!sourceAndTargetTypesMatch) {\n    let sourceIsArrayLike = isArrayObject(source);\n\n    if (targetIsArray && sourceIsArrayLike) {\n      return objectToArray(\n        mergeTargetAndSource(arrayToObject(target), source, options as Required<Options>)\n      );\n    }\n\n    return source;\n  } else if (sourceIsArray) {\n    return source;\n  } else if (target === null || target === undefined) {\n    /**\n     * If the target was set to null or undefined, we always want to return the source.\n     * There is nothing to merge.\n     *\n     * Without this explicit check, typeof null === typeof {any object-like thing}\n     * which means that mergeTargetAndSource will be called, and you can't merge with null\n     */\n    return source;\n  } else {\n    return mergeTargetAndSource(target, source, options as Required<Options>);\n  }\n}\n","import type { ProxyHandler, Content } from '../types';\nimport isObjectFn from './is-object';\nimport setDeep from './set-deep';\nimport Change, { getChangeValue, isChange } from '../-private/change';\nimport normalizeObject from './normalize-object';\nimport { objectToArray, arrayToObject } from './array-object';\nimport mergeDeep from './merge-deep';\n\nconst objectProxyHandler = {\n  /**\n   * Priority of access - changes, content, then check node\n   * @property get\n   */\n  get(node: ProxyHandler, key: string): any {\n    if (typeof key === 'symbol') {\n      return;\n    }\n\n    let childValue = node.safeGet(node.changes, key);\n\n    if (isChange(childValue)) {\n      return getChangeValue(childValue);\n    }\n\n    if (isObjectFn(childValue)) {\n      let childNode: ProxyHandler | undefined = node.children[key];\n\n      if (childNode === undefined && node.content) {\n        let childContent = node.safeGet(node.content, key);\n        // cache it\n        childNode = node.children[key] = new ObjectTreeNode(childValue, childContent, node.safeGet);\n      }\n\n      // return proxy if object so we can trap further access to changes or content\n      if (childNode) {\n        return childNode.proxy;\n      }\n    }\n\n    if (typeof childValue !== 'undefined') {\n      // primitive\n      return childValue;\n    } else if (node.content) {\n      const nodeContent = node.content;\n      if (node.safeGet(nodeContent, key) !== undefined) {\n        return node.safeGet(nodeContent, key);\n      }\n    }\n\n    if (typeof node[key] === 'function' || node.hasOwnProperty(key)) {\n      return node[key];\n    }\n  },\n\n  ownKeys(node: ProxyHandler): any {\n    return Reflect.ownKeys(node.changes);\n  },\n\n  getOwnPropertyDescriptor(node: ProxyHandler, prop: string): any {\n    return Reflect.getOwnPropertyDescriptor(node.changes, prop);\n  },\n\n  has(node: ProxyHandler, prop: string): any {\n    return Reflect.has(node.changes, prop);\n  },\n\n  set(node: ProxyHandler, key: string, value: unknown): any {\n    // dont want to set private properties on changes (usually found on outside actors)\n    if (key.startsWith('_')) {\n      return Reflect.set(node, key, value);\n    }\n    return Reflect.set(node.changes, key, new Change(value));\n  }\n};\n\nfunction defaultSafeGet(obj: Record<string, any>, key: string) {\n  return obj[key];\n}\n\nclass ObjectTreeNode implements ProxyHandler {\n  changes: Record<string, any>;\n  content: Content;\n  proxy: any;\n  children: Record<string, any>;\n\n  constructor(\n    changes: Record<string, any> = {},\n    content: Content = {},\n    public safeGet: (obj: any, key: string) => any = defaultSafeGet,\n    public isObject: (...args: unknown[]) => unknown = isObjectFn\n  ) {\n    this.changes = changes;\n    this.content = content;\n    this.proxy = new Proxy(this, objectProxyHandler);\n    this.children = Object.create(null);\n  }\n\n  get(key: string) {\n    return this.safeGet(this.changes, key);\n  }\n\n  set(key: string, value: unknown) {\n    return setDeep(this.changes, key, value);\n  }\n\n  unwrap(): Record<string, any> {\n    let changes = this.changes;\n\n    if (isObjectFn(changes)) {\n      changes = normalizeObject(changes, this.isObject);\n\n      const content = this.content;\n      if (isObjectFn(content)) {\n        changes = normalizeObject(changes, this.isObject);\n        return { ...content, ...changes };\n      } else if (Array.isArray(content)) {\n        changes = normalizeObject(changes, this.isObject);\n\n        return objectToArray(mergeDeep(arrayToObject(content), changes));\n      }\n    }\n\n    return changes;\n  }\n}\n\nexport { ObjectTreeNode };\n","/**\n * Merges all sources together, excluding keys in excludedKeys.\n *\n * @param  {string[]} excludedKeys\n * @param  {...object} sources\n * @return {object}\n */\nexport default function objectWithout(excludedKeys: string[], ...sources: any[]): any {\n  return sources.reduce((acc: Record<string, any>, source: any): object => {\n    Object.keys(source)\n      .filter((key) => excludedKeys.indexOf(key) === -1 || !source.hasOwnProperty(key))\n      .forEach((key) => (acc[key] = source[key]));\n    return acc;\n  }, {});\n}\n","export default function take(\n  originalObj: { [key: string]: any } = {},\n  keysToTake: string[] = []\n): { [key: string]: any } {\n  let newObj: { [key: string]: any } = {};\n\n  for (let key in originalObj) {\n    if (keysToTake.indexOf(key) !== -1) {\n      newObj[key] = originalObj[key];\n    }\n  }\n\n  return newObj;\n}\n","import Change, { getChangeValue, isChange } from './-private/change';\nimport { getKeyValues, getKeyErrorValues } from './utils/get-key-values';\nimport { notifierForEvent } from './-private/evented';\nimport Err from './-private/err';\nimport { hasKey, pathInChanges } from './utils/has-key';\nimport normalizeObject from './utils/normalize-object';\nimport { hasChanges } from './utils/has-changes';\nimport pureAssign from './utils/assign';\nimport { CHANGESET } from './utils/is-changeset';\nimport isObject from './utils/is-object';\nimport keyInObject from './utils/key-in-object';\nimport { buildOldValues } from './utils/build-old-values';\nimport { ObjectTreeNode } from './utils/object-tree-node';\nimport mergeDeep from './utils/merge-deep';\nimport setDeep from './utils/set-deep';\nimport getDeep, { getSubObject } from './utils/get-deep';\nimport { objectToArray, arrayToObject } from './utils/array-object';\nimport structuredClone from '@ungap/structured-clone';\n\nimport type {\n  Changes,\n  Config,\n  Content,\n  Errors,\n  IErr,\n  INotifier,\n  InternalMap,\n  NewProperty,\n  Snapshot,\n  ValidationErr\n} from './types';\n\nconst { keys } = Object;\nconst CONTENT = '_content';\nconst PREVIOUS_CONTENT = '_previousContent';\nconst CHANGES = '_changes';\n// const ORIGINAL = '_original';\nconst ERRORS = '_errors';\nconst ERRORS_CACHE = '_errorsCache';\nconst OPTIONS = '_options';\nconst AFTER_ROLLBACK_EVENT = 'afterRollback';\n\nconst DEBUG = process.env.NODE_ENV !== 'production';\n\nfunction assert(msg: string, property: unknown): void {\n  if (DEBUG) {\n    if (!property) {\n      throw new Error(msg);\n    }\n  }\n}\n\nfunction maybeUnwrapProxy(content: Content): any {\n  return content;\n}\n\nexport function newFormat(\n  obj: Record<string, any>[],\n  original: any,\n  getDeep: (obj: any, key: string) => any\n): Record<string, any> {\n  let newFormat: Record<string, any> = {};\n  for (let item of obj) {\n    const { key, value } = item;\n    newFormat[key] = {\n      current: value,\n      original: getDeep(original, key)\n    };\n  }\n\n  return newFormat;\n}\n\n// This is intended to provide an alternative changeset structure compatible with `yup`\n// This slims down the set of features, including removed APIs and `validate` returns just the `validate(obj)` method call and requires users to manually add errors.\nexport class ValidatedChangeset {\n  constructor(obj: object, options: Config = {}) {\n    this[CONTENT] = obj;\n    this[PREVIOUS_CONTENT] = undefined;\n    this[CHANGES] = {};\n    this[OPTIONS] = options;\n\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = {};\n  }\n\n  /**\n   * Any property that is not one of the getter/setter/methods on the\n   * BufferedProxy instance. The value type is `unknown` in order to avoid\n   * having to predefine key/value pairs of the correct types in the target\n   * object. Setting the index signature to `[key: string]: T[K]` would allow us\n   * to typecheck the value that is set on the proxy. However, no\n   * getters/setters/methods can be added to the class. This is the tradeoff\n   * we make for this particular design pattern (class based BufferedProxy).\n   */\n  [key: string]: unknown;\n  [CONTENT]: object;\n  [PREVIOUS_CONTENT]: object | undefined;\n  // [ORIGINAL]: Changes;\n  [CHANGES]: Changes;\n  [ERRORS]: Errors<any>;\n  [ERRORS_CACHE]: Errors<any>;\n  [OPTIONS]: Config;\n\n  __changeset__ = CHANGESET;\n\n  _eventedNotifiers = {};\n\n  on(eventName: string, callback: (...args: unknown[]) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.addListener(callback);\n  }\n\n  off(eventName: string, callback: (...args: unknown[]) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.removeListener(callback);\n  }\n\n  trigger(eventName: string, ...args: any[]): void {\n    const notifier = notifierForEvent(this, eventName);\n    if (notifier) {\n      notifier.trigger(...args);\n    }\n  }\n\n  /**\n   * @property isObject\n   * @override\n   */\n  isObject = isObject;\n\n  /**\n   * @property maybeUnwrapProxy\n   * @override\n   */\n  maybeUnwrapProxy = maybeUnwrapProxy;\n\n  /**\n   * @property setDeep\n   * @override\n   */\n  setDeep = setDeep;\n\n  /**\n   * @property getDeep\n   * @override\n   */\n  getDeep = getDeep;\n\n  /**\n   * @property mergeDeep\n   * @override\n   */\n  mergeDeep = mergeDeep;\n\n  /**\n   * @property safeGet\n   * @override\n   */\n  safeGet(obj: any, key: string) {\n    return obj[key];\n  }\n\n  /**\n   * @property safeSet\n   * @override\n   */\n  safeSet(obj: any, key: string, value: unknown) {\n    return (obj[key] = value);\n  }\n\n  /**\n   * @property changes\n   * @type {Array}\n   */\n  get changes() {\n    let obj = this[CHANGES];\n    let original = this[CONTENT];\n\n    // foo: {\n    //  original: 0,\n    //  current: 1,\n    // }\n    return newFormat(getKeyValues(obj), original, this.getDeep);\n  }\n\n  /**\n   * @property errors\n   * @type {Array}\n   */\n  get errors() {\n    let obj = this[ERRORS];\n\n    return getKeyErrorValues(obj);\n  }\n\n  get change() {\n    let obj: Changes = this[CHANGES];\n    if (hasChanges(this[CHANGES])) {\n      return normalizeObject(obj);\n    }\n\n    return {};\n  }\n\n  get error() {\n    return this[ERRORS];\n  }\n\n  get data() {\n    return this[CONTENT];\n  }\n\n  /**\n   * @property isValid\n   * @type {Array}\n   */\n  get isValid() {\n    return getKeyErrorValues(this[ERRORS]).length === 0;\n  }\n  /**\n   * @property isPristine\n   * @type {Boolean}\n   */\n  get isPristine() {\n    let validationKeys = Object.keys(this[CHANGES]);\n    const userChangesetKeys: string[] | undefined = this[OPTIONS].changesetKeys;\n    if (Array.isArray(userChangesetKeys) && userChangesetKeys.length) {\n      validationKeys = validationKeys.filter((k) => userChangesetKeys.includes(k));\n    }\n\n    if (validationKeys.length === 0) {\n      return true;\n    }\n\n    return !hasChanges(this[CHANGES]);\n  }\n  /**\n   * @property isInvalid\n   * @type {Boolean}\n   */\n  get isInvalid() {\n    return !this.isValid;\n  }\n  /**\n   * @property isDirty\n   * @type {Boolean}\n   */\n  get isDirty() {\n    return !this.isPristine;\n  }\n\n  /**\n   * Stores change on the changeset.\n   * This approximately works just like the Ember API\n   *\n   * @method setUnknownProperty\n   */\n  setUnknownProperty<T>(key: string, value: T): void {\n    let config: Config = this[OPTIONS];\n    let changesetKeys = config.changesetKeys;\n    if (Array.isArray(changesetKeys) && changesetKeys.length > 0) {\n      const hasKey = changesetKeys.find((chKey) => key.match(chKey));\n      if (!hasKey) {\n        return;\n      }\n    }\n\n    let content: Content = this[CONTENT];\n    let oldValue = this.safeGet(content, key);\n\n    this._setProperty({ key, value, oldValue });\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  get [Symbol.toStringTag](): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  toString(): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * Executes the changeset if in a valid state.\n   *\n   * @method execute\n   */\n  execute(): this {\n    let oldContent;\n    if (this.isValid && this.isDirty) {\n      let content: Content = this[CONTENT];\n      let changes: Changes = this[CHANGES];\n\n      // keep old values in case of error and we want to rollback\n      oldContent = buildOldValues(content, getKeyValues(changes), this.getDeep);\n\n      // we want mutation on original object\n      // @tracked\n      this[CONTENT] = this.mergeDeep(content, changes, {\n        safeGet: this.safeGet,\n        safeSet: this.safeSet\n      });\n    }\n\n    // trigger any registered callbacks by same keyword as method name\n    this.trigger('execute');\n\n    this[CHANGES] = {};\n    this[PREVIOUS_CONTENT] = oldContent;\n\n    return this;\n  }\n\n  unexecute(): this {\n    if (this[PREVIOUS_CONTENT]) {\n      this[CONTENT] = this.mergeDeep(this[CONTENT], this[PREVIOUS_CONTENT], {\n        safeGet: this.safeGet,\n        safeSet: this.safeSet\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Returns the changeset to its pristine state, and discards changes and\n   * errors.\n   *\n   * @method rollback\n   */\n  rollback(): this {\n    // Get keys before reset.\n    let keys = this._rollbackKeys();\n\n    // Reset.\n    this[CHANGES] = {};\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = {};\n    this._notifyVirtualProperties(keys);\n\n    this.trigger(AFTER_ROLLBACK_EVENT);\n    return this;\n  }\n\n  /**\n   * Discards any errors, keeping only valid changes.\n   *\n   * @public\n   * @chainable\n   * @method rollbackInvalid\n   * @param {String} key optional key to rollback invalid values\n   * @return {Changeset}\n   */\n  rollbackInvalid(key: string | void): this {\n    let errorKeys = keys(this[ERRORS]);\n\n    if (key) {\n      this._notifyVirtualProperties([key]);\n      // @tracked\n      this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n      this[ERRORS_CACHE] = this[ERRORS];\n      if (errorKeys.indexOf(key) > -1) {\n        this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n      }\n    } else {\n      this._notifyVirtualProperties();\n      this[ERRORS] = {};\n      this[ERRORS_CACHE] = this[ERRORS];\n\n      // if on CHANGES hash, rollback those as well\n      errorKeys.forEach((errKey) => {\n        this[CHANGES] = this._deleteKey(CHANGES, errKey) as Changes;\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * @method validate\n   */\n  async validate(cb: (changes: Record<string, any>) => unknown): Promise<any> {\n    const changes = this[CHANGES];\n    const content = this[CONTENT];\n\n    // return an object that does not poison original model and provides user with full set of data + changes to validate\n    return cb(this.mergeDeep(structuredClone(content), changes));\n  }\n\n  /**\n   * Manually add an error to the changeset. If there is an existing\n   * error or change for `key`, it will be overwritten.\n   *\n   * @method addError\n   */\n  addError<T>(key: string, error: IErr<T> | ValidationErr) {\n    // Construct new `Err` instance.\n    let newError;\n\n    const isIErr = <T>(error: unknown): error is IErr<T> =>\n      this.isObject(error) && !Array.isArray(error);\n    if (isIErr(error)) {\n      assert('Error must have value.', error.hasOwnProperty('value') || error.value !== undefined);\n      assert('Error must have validation.', error.hasOwnProperty('validation'));\n      newError = new Err(error.value, error.validation);\n    } else {\n      let value = this[key];\n      newError = new Err(value, error as ValidationErr);\n    }\n\n    // Add `key` to errors map.\n    let errors: Errors<any> = this[ERRORS];\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    // Return passed-in `error`.\n    return newError;\n  }\n\n  /**\n   * @method removeError\n   */\n  removeError(key: string) {\n    // Remove `key` to errors map.\n    let errors: Errors<any> = this[ERRORS];\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key, null, { safeSet: this.safeSet });\n    this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n    this[ERRORS_CACHE] = this[ERRORS];\n  }\n\n  /**\n   * @method removeError\n   */\n  removeErrors() {\n    // @tracked\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = this[ERRORS];\n  }\n\n  /**\n   * Manually push multiple errors to the changeset as an array.\n   * key maybe in form 'name.short' so need to go deep\n   *\n   * @method pushErrors\n   */\n  pushErrors(key: string, ...newErrors: string[] | ValidationErr[]): IErr<any> {\n    let errors: Errors<any> = this[ERRORS];\n    let existingError: IErr<any> | Err = this.getDeep(errors, key) || new Err(null, []);\n    let validation: ValidationErr | ValidationErr[] = existingError.validation;\n    let value: any = this[key];\n\n    if (!Array.isArray(validation) && Boolean(validation)) {\n      existingError.validation = [validation];\n    }\n\n    let v = existingError.validation;\n    validation = [...v, ...newErrors];\n    let newError = new Err(value, validation);\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key as string, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    return { value, validation };\n  }\n\n  /**\n   * Creates a snapshot of the changeset's errors and changes.\n   *\n   * @method snapshot\n   */\n  snapshot(): Snapshot {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n\n    return {\n      changes: this.getChangesForSnapshot(changes),\n\n      errors: keys(errors).reduce((newObj: Errors<any>, key: keyof Errors<any>) => {\n        let e = errors[key];\n        newObj[key] = { value: e.value, validation: e.validation };\n        return newObj;\n      }, {})\n    };\n  }\n\n  private getChangesForSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj: Changes, key: keyof Changes) => {\n      newObj[key] = isChange(changes[key])\n        ? getChangeValue(changes[key])\n        : this.getChangesForSnapshot(changes[key]);\n      return newObj;\n    }, {});\n  }\n\n  /**\n   * Restores a snapshot of changes and errors. This overrides existing\n   * changes and errors.\n   *\n   * @method restore\n   */\n  restore({ changes, errors }: Snapshot): this {\n    let newChanges: Changes = this.getChangesFromSnapshot(changes);\n\n    let newErrors: Errors<any> = keys(errors).reduce((newObj: Errors<any>, key: keyof Changes) => {\n      let e: IErr<any> = errors[key];\n      newObj[key] = new Err(e.value, e.validation);\n      return newObj;\n    }, {});\n\n    // @tracked\n    this[CHANGES] = newChanges;\n    // @tracked\n    this[ERRORS] = newErrors;\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    this._notifyVirtualProperties();\n    return this;\n  }\n\n  private getChangesFromSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(changes[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  private getChangeForProp(value: any) {\n    if (!isObject(value)) {\n      return new Change(value);\n    }\n\n    return keys(value).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(value[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  /**\n   * Sets property on the changeset.\n   */\n  _setProperty<T>({ key, value, oldValue }: NewProperty<T>): void {\n    let changes: Changes = this[CHANGES];\n\n    // Happy path: update change map.\n    if (!isEqual(value, oldValue) || oldValue === undefined) {\n      // @tracked\n      let result: Changes = this.setDeep(changes, key, new Change(value), {\n        safeSet: this.safeSet\n      });\n\n      this[CHANGES] = result;\n    } else if (keyInObject(changes, key)) {\n      // @tracked\n      // remove key if setting back to original\n      this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n    }\n  }\n\n  /**\n   * Notifies virtual properties set on the changeset of a change.\n   * You can specify which keys are notified by passing in an array.\n   *\n   * @private\n   * @param {Array} keys\n   * @return {Void}\n   */\n  _notifyVirtualProperties(keys?: string[]): string[] | undefined {\n    if (!keys) {\n      keys = this._rollbackKeys();\n    }\n\n    return keys;\n  }\n\n  /**\n   * Gets the changes and error keys.\n   */\n  _rollbackKeys(): string[] {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n    return [...new Set([...keys(changes), ...keys(errors)])];\n  }\n\n  /**\n   * Deletes a key off an object and notifies observers.\n   */\n  _deleteKey(objName: string, key = ''): InternalMap {\n    let obj = this[objName] as InternalMap;\n    let keys = key.split('.');\n\n    if (keys.length === 1 && obj.hasOwnProperty(key)) {\n      delete obj[key];\n    } else if (obj[keys[0]]) {\n      let [base, ...remaining] = keys;\n      let previousNode: { [key: string]: any } = obj;\n      let currentNode: any = obj[base];\n      let currentKey: string | undefined = base;\n\n      // find leaf and delete from map\n      while (this.isObject(currentNode) && currentKey) {\n        let curr: { [key: string]: unknown } = currentNode;\n        if (isChange(curr) || typeof curr.value !== 'undefined' || curr.validation) {\n          delete previousNode[currentKey];\n        }\n\n        currentKey = remaining.shift();\n        previousNode = currentNode;\n        if (currentKey) {\n          currentNode = currentNode[currentKey];\n        }\n      }\n    }\n\n    return obj;\n  }\n\n  get(key: string): any {\n    // 'person'\n    // 'person.username'\n    let [baseKey, ...remaining] = key.split('.');\n    let changes: Changes = this[CHANGES];\n    let content: Content = this[CONTENT];\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey)) {\n      const changesValue = this.getDeep(changes, key);\n      const isObject = this.isObject(changesValue);\n\n      if (!isObject && changesValue !== undefined) {\n        // if safeGet returns a primitive, then go ahead return\n        return changesValue;\n      }\n    }\n    // At this point, we may have a changes object, a dot separated key, or a need to access the `key`\n    // on `this` or `content`\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey) && hasChanges(changes)) {\n      let baseChanges = changes[baseKey];\n\n      // 'user.name'\n      const normalizedBaseChanges = normalizeObject(baseChanges);\n      if (this.isObject(normalizedBaseChanges)) {\n        const result = this.maybeUnwrapProxy(\n          this.getDeep(normalizedBaseChanges, remaining.join('.'))\n        );\n\n        // need to do this inside of Change object\n        // basically anything inside of a Change object that is undefined means it was removed\n        if (\n          typeof result === 'undefined' &&\n          pathInChanges(changes, key, this.safeGet) &&\n          !hasKey(changes, key, this.safeGet) &&\n          this.getDeep(content, key)\n        ) {\n          return;\n        }\n\n        if (this.isObject(result)) {\n          if (isChange(result)) {\n            return getChangeValue(result);\n          }\n\n          const baseContent = this.safeGet(content, baseKey) || {};\n          const subContent = this.getDeep(baseContent, remaining.join('.'));\n          const subChanges = getSubObject(changes, key);\n          // give back an object that can further retrieve changes and/or content\n          const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n          return tree.proxy;\n        } else if (typeof result !== 'undefined') {\n          return result;\n        }\n      }\n\n      // this comes after the isObject check to ensure we don't lose remaining keys\n      if (isChange(baseChanges) && remaining.length === 0) {\n        return getChangeValue(baseChanges);\n      }\n    }\n\n    // return getters/setters/methods on BufferedProxy instance\n    if (baseKey in this || key in this) {\n      return this.getDeep(this, key);\n    }\n\n    const subContent = this.maybeUnwrapProxy(this.getDeep(content, key));\n    if (this.isObject(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // if no changes, we need to add the path to the existing changes (mutate)\n        // so further access to nested keys works\n        subChanges = this.getDeep(this.setDeep(changes, key, {}), key);\n      }\n\n      // may still access a value on the changes or content objects\n      const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n      return tree.proxy;\n    } else if (Array.isArray(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // return array of contents. Dont need to worry about further access sibling keys in array case\n        return subContent;\n      }\n\n      if (isObject(subChanges)) {\n        if (isObject(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n          return { ...subContent, ...subChanges };\n        } else if (Array.isArray(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n\n          return objectToArray(mergeDeep(arrayToObject(subContent), subChanges));\n        }\n      }\n\n      return subChanges;\n    }\n\n    return subContent;\n  }\n\n  set<T>(key: string, value: T): void {\n    if (this.hasOwnProperty(key) || keyInObject(this, key)) {\n      this[key] = value;\n    } else {\n      this.setUnknownProperty(key, value);\n    }\n  }\n}\n\n/**\n * Creates new changesets.\n */\nexport function changeset(obj: object, options?: Config): ValidatedChangeset {\n  return new ValidatedChangeset(obj, options);\n}\n\ntype T20 = InstanceType<typeof ValidatedChangeset>;\n\nexport function Changeset(obj: object, options?: Config): ValidatedChangeset {\n  const c: ValidatedChangeset = changeset(obj, options);\n\n  return new Proxy(c, {\n    get(targetBuffer, key /*, receiver*/) {\n      const res = targetBuffer.get(key.toString());\n      return res;\n    },\n\n    set(targetBuffer, key, value /*, receiver*/) {\n      targetBuffer.set(key.toString(), value);\n      return true;\n    }\n  }) as T20;\n}\n\n// determine if two values are equal\nfunction isEqual(v1: unknown, v2: unknown) {\n  if (v1 instanceof Date && v2 instanceof Date) {\n    return v1.getTime() === v2.getTime();\n  }\n\n  return v1 === v2;\n}\n","import Change, { getChangeValue, isChange } from './-private/change';\nimport { getKeyValues, getKeyErrorValues } from './utils/get-key-values';\nimport lookupValidator from './utils/validator-lookup';\nimport { notifierForEvent } from './-private/evented';\nimport Err from './-private/err';\nimport { hasKey, pathInChanges } from './utils/has-key';\nimport normalizeObject from './utils/normalize-object';\nimport { hasChanges } from './utils/has-changes';\nimport pureAssign from './utils/assign';\nimport { flattenValidations } from './utils/flatten-validations';\nimport isChangeset, { CHANGESET } from './utils/is-changeset';\nimport isObject from './utils/is-object';\nimport isPromise from './utils/is-promise';\nimport keyInObject from './utils/key-in-object';\nimport mergeNested from './utils/merge-nested';\nimport { buildOldValues } from './utils/build-old-values';\nimport { ObjectTreeNode } from './utils/object-tree-node';\nimport objectWithout from './utils/object-without';\nimport take from './utils/take';\nimport mergeDeep, { propertyIsUnsafe } from './utils/merge-deep';\nimport setDeep from './utils/set-deep';\nimport getDeep, { getSubObject } from './utils/get-deep';\nimport { objectToArray, arrayToObject, isArrayObject } from './utils/array-object';\n\nimport type {\n  Changes,\n  Config,\n  Content,\n  Errors,\n  IErr,\n  IChangeset,\n  INotifier,\n  InternalMap,\n  NewProperty,\n  PrepareChangesFn,\n  RunningValidations,\n  Snapshot,\n  ValidationErr,\n  ValidationResult,\n  ValidatorAction,\n  ValidatorMap\n} from './types';\n\nimport {\n  ValidatedChangeset as ValidationChangeset,\n  Changeset as ValidationChangesetFactory\n} from './validated';\n\nexport {\n  ValidationChangeset,\n  ValidationChangesetFactory,\n  CHANGESET,\n  Change,\n  Err,\n  isArrayObject,\n  arrayToObject,\n  objectToArray,\n  buildOldValues,\n  isChangeset,\n  isObject,\n  isChange,\n  getChangeValue,\n  isPromise,\n  getKeyValues,\n  keyInObject,\n  lookupValidator,\n  mergeNested,\n  normalizeObject,\n  objectWithout,\n  pureAssign,\n  take,\n  mergeDeep,\n  setDeep,\n  getDeep,\n  propertyIsUnsafe\n};\n\nconst { keys } = Object;\nconst CONTENT = '_content';\nconst PREVIOUS_CONTENT = '_previousContent';\nconst CHANGES = '_changes';\nconst ERRORS = '_errors';\nconst ERRORS_CACHE = '_errorsCache';\nconst VALIDATOR = '_validator';\nconst OPTIONS = '_options';\nconst RUNNING_VALIDATIONS = '_runningValidations';\nconst BEFORE_VALIDATION_EVENT = 'beforeValidation';\nconst AFTER_VALIDATION_EVENT = 'afterValidation';\nconst AFTER_ROLLBACK_EVENT = 'afterRollback';\nconst defaultValidatorFn = () => true;\nconst defaultOptions = { skipValidate: false };\n\nconst DEBUG = process.env.NODE_ENV !== 'production';\n\nfunction assert(msg: string, property: unknown): void {\n  if (DEBUG) {\n    if (!property) {\n      throw new Error(msg);\n    }\n  }\n}\n\nfunction maybeUnwrapProxy(content: Content): any {\n  return content;\n}\n\nexport class BufferedChangeset implements IChangeset {\n  constructor(\n    obj: object,\n    public validateFn: ValidatorAction = defaultValidatorFn,\n    public validationMap: ValidatorMap = {},\n    options: Config = {}\n  ) {\n    this[CONTENT] = obj;\n    this[PREVIOUS_CONTENT] = undefined;\n    this[CHANGES] = {};\n    this[VALIDATOR] = validateFn;\n    this[OPTIONS] = pureAssign(defaultOptions, JSON.parse(JSON.stringify(options)));\n    this[RUNNING_VALIDATIONS] = {};\n\n    let validatorMapKeys = this.validationMap ? keys(this.validationMap as object) : [];\n\n    if (this[OPTIONS].initValidate && validatorMapKeys.length > 0) {\n      let errors = this._collectErrors();\n\n      this[ERRORS] = errors;\n      this[ERRORS_CACHE] = errors;\n    } else {\n      this[ERRORS] = {};\n      this[ERRORS_CACHE] = {};\n    }\n  }\n\n  /**\n   * Any property that is not one of the getter/setter/methods on the\n   * BufferedProxy instance. The value type is `unknown` in order to avoid\n   * having to predefine key/value pairs of the correct types in the target\n   * object. Setting the index signature to `[key: string]: T[K]` would allow us\n   * to typecheck the value that is set on the proxy. However, no\n   * getters/setters/methods can be added to the class. This is the tradeoff\n   * we make for this particular design pattern (class based BufferedProxy).\n   */\n  [key: string]: unknown;\n  [CONTENT]: object;\n  [PREVIOUS_CONTENT]: object | undefined;\n  [CHANGES]: Changes;\n  [ERRORS]: Errors<any>;\n  [ERRORS_CACHE]: Errors<any>;\n  [VALIDATOR]: ValidatorAction;\n  [OPTIONS]: Config;\n  [RUNNING_VALIDATIONS]: Record<string, any>;\n\n  __changeset__ = CHANGESET;\n\n  _eventedNotifiers = {};\n\n  on(eventName: string, callback: (key: string) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.addListener(callback);\n  }\n\n  off(eventName: string, callback: (key: string) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.removeListener(callback);\n  }\n\n  trigger(eventName: string, ...args: any[]): void {\n    const notifier = notifierForEvent(this, eventName);\n    if (notifier) {\n      notifier.trigger(...args);\n    }\n  }\n\n  /**\n   * @property isObject\n   * @override\n   */\n  isObject = isObject;\n\n  /**\n   * @property maybeUnwrapProxy\n   * @override\n   */\n  maybeUnwrapProxy = maybeUnwrapProxy;\n\n  /**\n   * @property setDeep\n   * @override\n   */\n  setDeep = setDeep;\n\n  /**\n   * @property getDeep\n   * @override\n   */\n  getDeep = getDeep;\n\n  /**\n   * @property mergeDeep\n   * @override\n   */\n  mergeDeep = mergeDeep;\n\n  /**\n   * @property safeGet\n   * @override\n   */\n  safeGet(obj: any, key: string) {\n    return obj[key];\n  }\n\n  /**\n   * @property safeSet\n   * @override\n   */\n  safeSet(obj: any, key: string, value: unknown) {\n    return (obj[key] = value);\n  }\n\n  get _bareChanges() {\n    let obj = this[CHANGES];\n\n    return getKeyValues(obj).reduce((newObj: { [key: string]: any }, { key, value }) => {\n      newObj[key] = value;\n      return newObj;\n    }, Object.create(null));\n  }\n\n  /**\n   * @property changes\n   * @type {Array}\n   */\n  get changes() {\n    let obj = this[CHANGES];\n\n    // [{ key, value }, ...]\n    return getKeyValues(obj);\n  }\n\n  /**\n   * @property errors\n   * @type {Array}\n   */\n  get errors() {\n    let obj = this[ERRORS];\n\n    // [{ key, validation, value }, ...]\n    return getKeyErrorValues(obj);\n  }\n\n  get change() {\n    let obj: Changes = this[CHANGES];\n    if (hasChanges(this[CHANGES])) {\n      return normalizeObject(obj);\n    }\n\n    return {};\n  }\n\n  get error() {\n    return this[ERRORS];\n  }\n\n  get data() {\n    return this[CONTENT];\n  }\n\n  /**\n   * @property isValid\n   * @type {Array}\n   */\n  get isValid() {\n    return getKeyErrorValues(this[ERRORS]).length === 0;\n  }\n  /**\n   * @property isPristine\n   * @type {Boolean}\n   */\n  get isPristine() {\n    let validationKeys = Object.keys(this[CHANGES]);\n    const userChangesetKeys: string[] | undefined = this[OPTIONS].changesetKeys;\n    if (Array.isArray(userChangesetKeys) && userChangesetKeys.length) {\n      validationKeys = validationKeys.filter((k) => userChangesetKeys.includes(k));\n    }\n\n    if (validationKeys.length === 0) {\n      return true;\n    }\n\n    return !hasChanges(this[CHANGES]);\n  }\n  /**\n   * @property isInvalid\n   * @type {Boolean}\n   */\n  get isInvalid() {\n    return !this.isValid;\n  }\n  /**\n   * @property isDirty\n   * @type {Boolean}\n   */\n  get isDirty() {\n    return !this.isPristine;\n  }\n\n  /**\n   * Stores change on the changeset.\n   * This approximately works just like the Ember API\n   *\n   * @method setUnknownProperty\n   */\n  setUnknownProperty<T>(key: string, value: T): void {\n    let config: Config = this[OPTIONS];\n    let changesetKeys = config.changesetKeys;\n    if (Array.isArray(changesetKeys) && changesetKeys.length > 0) {\n      const hasKey = changesetKeys.find((chKey) => key.match(chKey));\n      if (!hasKey) {\n        return;\n      }\n    }\n\n    let content: Content = this[CONTENT];\n    let oldValue = this.safeGet(content, key);\n\n    let skipValidate: boolean | undefined = config.skipValidate;\n    if (skipValidate) {\n      this._setProperty({ key, value, oldValue });\n      this._handleValidation(true, { key, value });\n      return;\n    }\n\n    this._setProperty({ key, value, oldValue });\n    this._validateKey(key, value);\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  get [Symbol.toStringTag](): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  toString(): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * Provides a function to run before emitting changes to the model. The\n   * callback function must return a hash in the same shape:\n   *\n   * ```\n   * changeset\n   *   .prepare((changes) => {\n   *     let modified = {};\n   *\n   *     for (let key in changes) {\n   *       modified[underscore(key)] = changes[key];\n   *     }\n   *\n   *    return modified; // { first_name: \"Jim\", last_name: \"Bob\" }\n   *  })\n   *  .execute(); // execute the changes\n   * ```\n   *\n   * @method prepare\n   */\n  prepare(prepareChangesFn: PrepareChangesFn): this {\n    let changes: { [s: string]: any } = this._bareChanges;\n    let preparedChanges = prepareChangesFn(changes);\n\n    assert('Callback to `changeset.prepare` must return an object', this.isObject(preparedChanges));\n\n    let newObj: Changes = {};\n    if (this.isObject(preparedChanges)) {\n      let newChanges: Changes = keys(preparedChanges as Record<string, any>).reduce(\n        (newObj: Changes, key: keyof Changes) => {\n          newObj[key] = new Change((preparedChanges as Record<string, any>)[key]);\n          return newObj;\n        },\n        newObj\n      );\n\n      // @tracked\n      this[CHANGES] = newChanges;\n    }\n\n    return this;\n  }\n\n  /**\n   * Executes the changeset if in a valid state.\n   *\n   * @method execute\n   */\n  execute(): this {\n    let oldContent;\n    if (this.isValid && this.isDirty) {\n      let content: Content = this[CONTENT];\n      let changes: Changes = this[CHANGES];\n\n      // keep old values in case of error and we want to rollback\n      oldContent = buildOldValues(content, this.changes, this.getDeep);\n\n      // we want mutation on original object\n      // @tracked\n      this[CONTENT] = this.mergeDeep(content, changes);\n    }\n\n    // trigger any registered callbacks by same keyword as method name\n    this.trigger('execute');\n\n    this[CHANGES] = {};\n    this[PREVIOUS_CONTENT] = oldContent;\n\n    return this;\n  }\n\n  unexecute(): this {\n    if (this[PREVIOUS_CONTENT]) {\n      this[CONTENT] = this.mergeDeep(this[CONTENT], this[PREVIOUS_CONTENT], {\n        safeGet: this.safeGet,\n        safeSet: this.safeSet\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Executes the changeset and saves the underlying content.\n   *\n   * @method save\n   * @param {Object} options optional object to pass to content save method\n   */\n  async save(options?: object): Promise<IChangeset | any> {\n    let content: Content = this[CONTENT];\n    let savePromise: any | Promise<BufferedChangeset | any> = Promise.resolve(this);\n    this.execute();\n\n    if (typeof content.save === 'function') {\n      savePromise = content.save(options);\n    } else if (typeof this.safeGet(content, 'save') === 'function') {\n      // we might be getting this off a proxy object.  For example, when a\n      // belongsTo relationship (a proxy on the parent model)\n      // another way would be content(belongsTo).content.save\n      let maybePromise = this.maybeUnwrapProxy(content).save();\n      if (maybePromise) {\n        savePromise = maybePromise;\n      }\n    }\n\n    try {\n      const result = await savePromise;\n\n      // cleanup changeset\n      this.rollback();\n\n      return result;\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  /**\n   * Merges 2 valid changesets and returns a new changeset. Both changesets\n   * must point to the same underlying object. The changeset target is the\n   * origin. For example:\n   *\n   * ```\n   * let changesetA = new Changeset(user, validatorFn);\n   * let changesetB = new Changeset(user, validatorFn);\n   * changesetA.set('firstName', 'Jim');\n   * changesetB.set('firstName', 'Jimmy');\n   * changesetB.set('lastName', 'Fallon');\n   * let changesetC = changesetA.merge(changesetB);\n   * changesetC.execute();\n   * user.get('firstName'); // \"Jimmy\"\n   * user.get('lastName'); // \"Fallon\"\n   * ```\n   *\n   * @method merge\n   */\n  merge(changeset: this): this {\n    let content: Content = this[CONTENT];\n    assert('Cannot merge with a non-changeset', isChangeset(changeset));\n    assert('Cannot merge with a changeset of different content', changeset[CONTENT] === content);\n\n    if (this.isPristine && changeset.isPristine) {\n      return this;\n    }\n\n    let c1: Changes = this[CHANGES];\n    let c2: Changes = changeset[CHANGES];\n    let e1: Errors<any> = this[ERRORS];\n    let e2: Errors<any> = changeset[ERRORS];\n\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    let newChangeset: any = new ValidatedChangeset(content, this[VALIDATOR]); // ChangesetDef\n    let newErrors: Errors<any> = objectWithout(keys(c2), e1);\n    let newChanges: Changes = objectWithout(keys(e2), c1);\n    let mergedErrors: Errors<any> = mergeNested(newErrors, e2);\n    let mergedChanges: Changes = mergeNested(newChanges, c2);\n\n    newChangeset[ERRORS] = mergedErrors;\n    newChangeset[CHANGES] = mergedChanges;\n    newChangeset._notifyVirtualProperties();\n    return newChangeset;\n  }\n\n  /**\n   * Returns the changeset to its pristine state, and discards changes and\n   * errors.\n   *\n   * @method rollback\n   */\n  rollback(): this {\n    // Get keys before reset.\n    let keys = this._rollbackKeys();\n\n    // Reset.\n    this[CHANGES] = {};\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = {};\n    this._notifyVirtualProperties(keys);\n\n    this.trigger(AFTER_ROLLBACK_EVENT);\n    return this;\n  }\n\n  /**\n   * Discards any errors, keeping only valid changes.\n   *\n   * @public\n   * @chainable\n   * @method rollbackInvalid\n   * @param {String} key optional key to rollback invalid values\n   * @return {Changeset}\n   */\n  rollbackInvalid(key: string | void): this {\n    let errorKeys = this.errors.map(({ key }) => key);\n\n    if (key) {\n      this._notifyVirtualProperties([key]);\n      // @tracked\n      this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n      this[ERRORS_CACHE] = this[ERRORS];\n      if (errorKeys.indexOf(key) > -1) {\n        this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n      }\n    } else {\n      this._notifyVirtualProperties();\n      this[ERRORS] = {};\n      this[ERRORS_CACHE] = this[ERRORS];\n\n      // if on CHANGES hash, rollback those as well\n      errorKeys.forEach((errKey) => {\n        this[CHANGES] = this._deleteKey(CHANGES, errKey) as Changes;\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Discards changes/errors for the specified properly only.\n   *\n   * @public\n   * @chainable\n   * @method rollbackProperty\n   * @param {String} key key to delete off of changes and errors\n   * @return {Changeset}\n   */\n  rollbackProperty(key: string): this {\n    // @tracked\n    this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n    // @tracked\n    this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    return this;\n  }\n\n  /**\n   * Validates the changeset immediately against the validationMap passed in.\n   * If no key is passed into this method, it will validate all fields on the\n   * validationMap and set errors accordingly. Will throw an error if no\n   * validationMap is present.\n   *\n   * @method validate\n   */\n  async validate(...validationKeys: string[]): Promise<any> {\n    if (keys(this.validationMap as object).length === 0 && !validationKeys.length) {\n      return Promise.resolve(null);\n    }\n\n    validationKeys =\n      validationKeys.length > 0\n        ? validationKeys\n        : keys(flattenValidations(this.validationMap as object));\n\n    let maybePromise = validationKeys.map((key) => {\n      const value: any = this[key];\n      const resolvedValue = value instanceof ObjectTreeNode ? value.unwrap() : value;\n      return this._validateKey(key, resolvedValue);\n    });\n\n    return Promise.all(maybePromise);\n  }\n\n  /**\n   * Manually add an error to the changeset. If there is an existing\n   * error or change for `key`, it will be overwritten.\n   *\n   * @method addError\n   */\n  addError<T>(key: string, error: IErr<T> | ValidationErr) {\n    // Construct new `Err` instance.\n    let newError;\n\n    const isIErr = <T>(error: unknown): error is IErr<T> =>\n      this.isObject(error) && !Array.isArray(error);\n    if (isIErr(error)) {\n      assert('Error must have value.', error.hasOwnProperty('value') || error.value !== undefined);\n      assert('Error must have validation.', error.hasOwnProperty('validation'));\n      newError = new Err(error.value, error.validation);\n    } else {\n      let value = this[key];\n      newError = new Err(value, error as ValidationErr);\n    }\n\n    // Add `key` to errors map.\n    let errors: Errors<any> = this[ERRORS];\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    // Return passed-in `error`.\n    return error;\n  }\n\n  /**\n   * Manually push multiple errors to the changeset as an array.\n   * key maybe in form 'name.short' so need to go deep\n   *\n   * @method pushErrors\n   */\n  pushErrors(key: string, ...newErrors: string[] | ValidationErr[]): IErr<any> {\n    let errors: Errors<any> = this[ERRORS];\n    let existingError: IErr<any> | Err = this.getDeep(errors, key) || new Err(null, []);\n    let validation: ValidationErr | ValidationErr[] = existingError.validation;\n    let value: any = this[key];\n\n    if (!Array.isArray(validation) && Boolean(validation)) {\n      existingError.validation = [validation];\n    }\n\n    let v = existingError.validation;\n    validation = [...v, ...newErrors];\n    let newError = new Err(value, validation);\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key as string, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    return { value, validation };\n  }\n\n  /**\n   * Creates a snapshot of the changeset's errors and changes.\n   *\n   * @method snapshot\n   */\n  snapshot(): Snapshot {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n\n    return {\n      changes: this.getChangesForSnapshot(changes),\n\n      errors: keys(errors).reduce((newObj: Errors<any>, key: keyof Errors<any>) => {\n        let e = errors[key];\n        newObj[key] = { value: e.value, validation: e.validation };\n        return newObj;\n      }, {})\n    };\n  }\n\n  private getChangesForSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj: Changes, key: keyof Changes) => {\n      newObj[key] = isChange(changes[key])\n        ? getChangeValue(changes[key])\n        : this.getChangesForSnapshot(changes[key]);\n      return newObj;\n    }, {});\n  }\n\n  /**\n   * Restores a snapshot of changes and errors. This overrides existing\n   * changes and errors.\n   *\n   * @method restore\n   */\n  restore({ changes, errors }: Snapshot): this {\n    let newChanges: Changes = this.getChangesFromSnapshot(changes);\n\n    let newErrors: Errors<any> = keys(errors).reduce((newObj: Errors<any>, key: keyof Changes) => {\n      let e: IErr<any> = errors[key];\n      newObj[key] = new Err(e.value, e.validation);\n      return newObj;\n    }, {});\n\n    // @tracked\n    this[CHANGES] = newChanges;\n    // @tracked\n    this[ERRORS] = newErrors;\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    this._notifyVirtualProperties();\n    return this;\n  }\n\n  private getChangesFromSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(changes[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  private getChangeForProp(value: any) {\n    if (!isObject(value)) {\n      return new Change(value);\n    }\n\n    return keys(value).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(value[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  /**\n   * Unlike `Ecto.Changeset.cast`, `cast` will take allowed keys and\n   * remove unwanted keys off of the changeset. For example, this method\n   * can be used to only allow specified changes through prior to saving.\n   *\n   * @method cast\n   */\n  cast(allowed: string[] = []): this {\n    let changes: Changes = this[CHANGES];\n\n    if (Array.isArray(allowed) && allowed.length === 0) {\n      return this;\n    }\n\n    let changeKeys: string[] = keys(changes);\n    let validKeys = changeKeys.filter((key: string) => allowed.includes(key));\n    let casted = take(changes, validKeys);\n    // @tracked\n    this[CHANGES] = casted;\n    return this;\n  }\n\n  /**\n   * Checks to see if async validator for a given key has not resolved.\n   * If no key is provided it will check to see if any async validator is running.\n   *\n   * @method isValidating\n   */\n  isValidating(key?: string | void): boolean {\n    let runningValidations: RunningValidations = this[RUNNING_VALIDATIONS];\n    let ks: string[] = keys(runningValidations);\n    if (key) {\n      return ks.includes(key);\n    }\n    return ks.length > 0;\n  }\n\n  /**\n   * Validates a specific key\n   *\n   * @method _validateKey\n   * @private\n   */\n  _validateKey<T>(\n    key: string,\n    value: T\n  ): Promise<ValidationResult | T | IErr<T>> | T | IErr<T> | ValidationResult {\n    let content: Content = this[CONTENT];\n    let oldValue: any = this.getDeep(content, key);\n    let validation: ValidationResult | Promise<ValidationResult> = this._validate(\n      key,\n      value,\n      oldValue\n    );\n\n    this.trigger(BEFORE_VALIDATION_EVENT, key);\n\n    // TODO: Address case when Promise is rejected.\n    if (isPromise(validation)) {\n      this._setIsValidating(key, validation as Promise<ValidationResult>);\n\n      let running: RunningValidations = this[RUNNING_VALIDATIONS];\n      let promises = Object.entries(running);\n\n      return Promise.all(promises).then(() => {\n        return (validation as Promise<ValidationResult>)\n          .then((resolvedValidation: ValidationResult) => {\n            delete running[key];\n\n            return this._handleValidation(resolvedValidation, { key, value });\n          })\n          .then((result) => {\n            this.trigger(AFTER_VALIDATION_EVENT, key);\n            return result;\n          });\n      });\n    }\n\n    let result = this._handleValidation(validation as ValidationResult, { key, value });\n\n    this.trigger(AFTER_VALIDATION_EVENT, key);\n\n    return result;\n  }\n\n  /**\n   * Takes resolved validation and adds an error or simply returns the value\n   *\n   * @method _handleValidation\n   * @private\n   */\n  _handleValidation<T>(\n    validation: ValidationResult,\n    { key, value }: NewProperty<T>\n  ): T | IErr<T> | ValidationErr {\n    // Happy path: remove `key` from error map.\n    // @tracked\n    // ERRORS_CACHE to avoid backtracking Ember assertion.\n    this[ERRORS] = this._deleteKey(ERRORS_CACHE, key) as Errors<any>;\n\n    // Error case.\n    if (!this._isValidResult(validation)) {\n      return this.addError(key, { value, validation } as IErr<T>);\n    }\n\n    return value;\n  }\n\n  /**\n   * runs the validator with the key and value\n   *\n   * @method _validate\n   * @private\n   */\n  _validate(\n    key: string,\n    newValue: unknown,\n    oldValue: unknown\n  ): ValidationResult | Promise<ValidationResult> {\n    let validator: ValidatorAction = this[VALIDATOR];\n    let content: Content = this[CONTENT];\n\n    if (typeof validator === 'function') {\n      let validationResult = validator({\n        key,\n        newValue,\n        oldValue,\n        changes: this.change,\n        content\n      });\n\n      if (validationResult === undefined) {\n        // no validator function found for key\n        return true;\n      }\n\n      return validationResult;\n    }\n\n    return true;\n  }\n\n  /**\n   * Sets property on the changeset.\n   */\n  _setProperty<T>({ key, value, oldValue }: NewProperty<T>): void {\n    let changes: Changes = this[CHANGES];\n\n    // Happy path: update change map.\n    if (!isEqual(value, oldValue) || oldValue === undefined) {\n      // @tracked\n      let result: Changes = this.setDeep(changes, key, new Change(value), {\n        safeSet: this.safeSet\n      });\n\n      this[CHANGES] = result;\n    } else if (keyInObject(changes, key)) {\n      // @tracked\n      // remove key if setting back to original\n      this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n    }\n  }\n\n  /**\n   * Increment or decrement the number of running validations for a\n   * given key.\n   */\n  _setIsValidating(key: string, promise: Promise<ValidationResult>): void {\n    let running: RunningValidations = this[RUNNING_VALIDATIONS];\n    this.setDeep(running, key, promise);\n  }\n\n  /**\n   * Notifies virtual properties set on the changeset of a change.\n   * You can specify which keys are notified by passing in an array.\n   *\n   * @private\n   * @param {Array} keys\n   * @return {Void}\n   */\n  _notifyVirtualProperties(keys?: string[]): string[] | undefined {\n    if (!keys) {\n      keys = this._rollbackKeys();\n    }\n\n    return keys;\n  }\n\n  /**\n   * Gets the changes and error keys.\n   */\n  _rollbackKeys(): string[] {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n    return [...new Set([...keys(changes), ...keys(errors)])];\n  }\n\n  /**\n   * Deletes a key off an object and notifies observers.\n   */\n  _deleteKey(objName: string, key = ''): InternalMap {\n    let obj = this[objName] as InternalMap;\n    let keys = key.split('.');\n\n    if (keys.length === 1 && obj.hasOwnProperty(key)) {\n      delete obj[key];\n    } else if (obj[keys[0]]) {\n      let [base, ...remaining] = keys;\n      let previousNode: { [key: string]: any } = obj;\n      let currentNode: any = obj[base];\n      let currentKey: string | undefined = base;\n\n      // find leaf and delete from map\n      while (this.isObject(currentNode) && currentKey) {\n        let curr: { [key: string]: unknown } = currentNode;\n        if (isChange(curr) || typeof curr.value !== 'undefined' || curr.validation) {\n          delete previousNode[currentKey];\n        }\n\n        currentKey = remaining.shift();\n        previousNode = currentNode;\n        if (currentKey) {\n          currentNode = currentNode[currentKey];\n        }\n      }\n    }\n\n    return obj;\n  }\n\n  _collectErrors(): Errors<any> {\n    let validationKeys = keys(flattenValidations(this.validationMap as object));\n\n    return validationKeys.reduce((acc: Errors<any>, key: string) => {\n      let content: Content = this[CONTENT];\n      let value: any = this.getDeep(content, key);\n      let resolvedValue = value instanceof ObjectTreeNode ? value.unwrap() : value;\n\n      let result: ValidationResult = this._validate(key, resolvedValue, null) as ValidationResult;\n\n      if (!this._isValidResult(result)) {\n        let errorResult = result as ValidationErr;\n        let validationError = new Err(value, errorResult);\n\n        this.setDeep(acc, key, validationError, { safeSet: this.safeSet });\n      }\n\n      return acc;\n    }, {});\n  }\n\n  _isValidResult(result: ValidationResult): boolean {\n    return result === true || (Array.isArray(result) && result.length === 1 && result[0] === true);\n  }\n\n  get(key: string): any {\n    // 'person'\n    // 'person.username'\n    let [baseKey, ...remaining] = key.split('.');\n    let changes: Changes = this[CHANGES];\n    let content: Content = this[CONTENT];\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey)) {\n      const changesValue = this.getDeep(changes, key);\n      const isObject = this.isObject(changesValue);\n\n      if (!isObject && changesValue !== undefined) {\n        // if safeGet returns a primitive, then go ahead return\n        return changesValue;\n      }\n    }\n    // At this point, we may have a changes object, a dot separated key, or a need to access the `key`\n    // on `this` or `content`\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey) && hasChanges(changes)) {\n      let baseChanges = changes[baseKey];\n\n      // 'user.name'\n      const normalizedBaseChanges = normalizeObject(baseChanges);\n      if (this.isObject(normalizedBaseChanges)) {\n        const result = this.maybeUnwrapProxy(\n          this.getDeep(normalizedBaseChanges, remaining.join('.'))\n        );\n\n        // need to do this inside of Change object\n        // basically anything inside of a Change object that is undefined means it was removed\n        if (\n          typeof result === 'undefined' &&\n          pathInChanges(changes, key, this.safeGet) &&\n          !hasKey(changes, key, this.safeGet) &&\n          this.getDeep(content, key)\n        ) {\n          return;\n        }\n\n        if (this.isObject(result)) {\n          if (isChange(result)) {\n            return getChangeValue(result);\n          }\n\n          const baseContent = this.safeGet(content, baseKey) || {};\n          const subContent = this.getDeep(baseContent, remaining.join('.'));\n          const subChanges = getSubObject(changes, key);\n          // give back an object that can further retrieve changes and/or content\n          const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n          return tree.proxy;\n        } else if (typeof result !== 'undefined') {\n          return result;\n        }\n      }\n\n      // this comes after the isObject check to ensure we don't lose remaining keys\n      if (isChange(baseChanges) && remaining.length === 0) {\n        return getChangeValue(baseChanges);\n      }\n    }\n\n    // return getters/setters/methods on BufferedProxy instance\n    if (baseKey in this || key in this) {\n      return this.getDeep(this, key);\n    }\n\n    const subContent = this.maybeUnwrapProxy(this.getDeep(content, key));\n    if (this.isObject(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // if no changes, we need to add the path to the existing changes (mutate)\n        // so further access to nested keys works\n        subChanges = this.getDeep(this.setDeep(changes, key, {}), key);\n      }\n\n      // may still access a value on the changes or content objects\n      const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n      return tree.proxy;\n    } else if (Array.isArray(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // return array of contents. Dont need to worry about further access sibling keys in array case\n        return subContent;\n      }\n\n      if (isObject(subChanges)) {\n        if (isObject(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n          return { ...subContent, ...subChanges };\n        } else if (Array.isArray(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n\n          return objectToArray(mergeDeep(arrayToObject(subContent), subChanges));\n        }\n      }\n\n      return subChanges;\n    }\n\n    return subContent;\n  }\n\n  set<T>(key: string, value: T): void {\n    if (this.hasOwnProperty(key) || keyInObject(this, key)) {\n      this[key] = value;\n    } else {\n      this.setUnknownProperty(key, value);\n    }\n  }\n}\n\n/**\n * Creates new changesets.\n */\nexport function changeset(\n  obj: object,\n  validateFn?: ValidatorAction,\n  validationMap?: ValidatorMap | null | undefined,\n  options?: Config\n): BufferedChangeset {\n  return new BufferedChangeset(obj, validateFn, validationMap, options);\n}\n\ntype T20 = InstanceType<typeof BufferedChangeset>;\n\nexport class ValidatedChangeset {\n  /**\n   * Changeset factory class if you need to extend\n   *\n   * @class ValidatedChangeset\n   * @constructor\n   */\n  constructor(\n    obj: object,\n    validateFn?: ValidatorAction,\n    validationMap?: ValidatorMap | null | undefined,\n    options?: Config\n  ) {\n    const c: BufferedChangeset = changeset(obj, validateFn, validationMap, options);\n\n    return new Proxy(c, {\n      get(targetBuffer, key /*, receiver*/) {\n        const res = targetBuffer.get(key.toString());\n        return res;\n      },\n\n      set(targetBuffer, key, value /*, receiver*/) {\n        targetBuffer.set(key.toString(), value);\n        return true;\n      }\n    }) as T20;\n  }\n}\n\nexport function Changeset(\n  obj: object,\n  validateFn?: ValidatorAction,\n  validationMap?: ValidatorMap | null | undefined,\n  options?: Config\n): BufferedChangeset {\n  const c: BufferedChangeset = changeset(obj, validateFn, validationMap, options);\n\n  return new Proxy(c, {\n    get(targetBuffer, key /*, receiver*/) {\n      const res = targetBuffer.get(key.toString());\n      return res;\n    },\n\n    set(targetBuffer, key, value /*, receiver*/) {\n      targetBuffer.set(key.toString(), value);\n      return true;\n    }\n  });\n}\n\n// determine if two values are equal\nfunction isEqual(v1: unknown, v2: unknown) {\n  if (v1 instanceof Date && v2 instanceof Date) {\n    return v1.getTime() === v2.getTime();\n  }\n\n  return v1 === v2;\n}\n","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n  return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n  return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n  return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n  Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n  var value = obj[key];\n  if (value == null) return undefined;\n  if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n  return value;\n}\n\nfunction getSpecies(obj) {\n  var ctor = obj.constructor;\n\n  if (ctor !== undefined) {\n    ctor = ctor[SymbolSpecies];\n\n    if (ctor === null) {\n      ctor = undefined;\n    }\n  }\n\n  return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n  return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n  if (hostReportError.log) {\n    hostReportError.log(e);\n  } else {\n    setTimeout(function () {\n      throw e;\n    });\n  }\n}\n\nfunction enqueue(fn) {\n  Promise.resolve().then(function () {\n    try {\n      fn();\n    } catch (e) {\n      hostReportError(e);\n    }\n  });\n}\n\nfunction cleanupSubscription(subscription) {\n  var cleanup = subscription._cleanup;\n  if (cleanup === undefined) return;\n  subscription._cleanup = undefined;\n\n  if (!cleanup) {\n    return;\n  }\n\n  try {\n    if (typeof cleanup === 'function') {\n      cleanup();\n    } else {\n      var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n      if (unsubscribe) {\n        unsubscribe.call(cleanup);\n      }\n    }\n  } catch (e) {\n    hostReportError(e);\n  }\n}\n\nfunction closeSubscription(subscription) {\n  subscription._observer = undefined;\n  subscription._queue = undefined;\n  subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n  var queue = subscription._queue;\n\n  if (!queue) {\n    return;\n  }\n\n  subscription._queue = undefined;\n  subscription._state = 'ready';\n\n  for (var i = 0; i < queue.length; ++i) {\n    notifySubscription(subscription, queue[i].type, queue[i].value);\n    if (subscription._state === 'closed') break;\n  }\n}\n\nfunction notifySubscription(subscription, type, value) {\n  subscription._state = 'running';\n  var observer = subscription._observer;\n\n  try {\n    var m = getMethod(observer, type);\n\n    switch (type) {\n      case 'next':\n        if (m) m.call(observer, value);\n        break;\n\n      case 'error':\n        closeSubscription(subscription);\n        if (m) m.call(observer, value);else throw value;\n        break;\n\n      case 'complete':\n        closeSubscription(subscription);\n        if (m) m.call(observer);\n        break;\n    }\n  } catch (e) {\n    hostReportError(e);\n  }\n\n  if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n  if (subscription._state === 'closed') return;\n\n  if (subscription._state === 'buffering') {\n    subscription._queue.push({\n      type: type,\n      value: value\n    });\n\n    return;\n  }\n\n  if (subscription._state !== 'ready') {\n    subscription._state = 'buffering';\n    subscription._queue = [{\n      type: type,\n      value: value\n    }];\n    enqueue(function () {\n      return flushSubscription(subscription);\n    });\n    return;\n  }\n\n  notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n  function Subscription(observer, subscriber) {\n    // ASSERT: observer is an object\n    // ASSERT: subscriber is callable\n    this._cleanup = undefined;\n    this._observer = observer;\n    this._queue = undefined;\n    this._state = 'initializing';\n    var subscriptionObserver = new SubscriptionObserver(this);\n\n    try {\n      this._cleanup = subscriber.call(undefined, subscriptionObserver);\n    } catch (e) {\n      subscriptionObserver.error(e);\n    }\n\n    if (this._state === 'initializing') this._state = 'ready';\n  }\n\n  var _proto = Subscription.prototype;\n\n  _proto.unsubscribe = function unsubscribe() {\n    if (this._state !== 'closed') {\n      closeSubscription(this);\n      cleanupSubscription(this);\n    }\n  };\n\n  _createClass(Subscription, [{\n    key: \"closed\",\n    get: function () {\n      return this._state === 'closed';\n    }\n  }]);\n\n  return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n  function SubscriptionObserver(subscription) {\n    this._subscription = subscription;\n  }\n\n  var _proto2 = SubscriptionObserver.prototype;\n\n  _proto2.next = function next(value) {\n    onNotify(this._subscription, 'next', value);\n  };\n\n  _proto2.error = function error(value) {\n    onNotify(this._subscription, 'error', value);\n  };\n\n  _proto2.complete = function complete() {\n    onNotify(this._subscription, 'complete');\n  };\n\n  _createClass(SubscriptionObserver, [{\n    key: \"closed\",\n    get: function () {\n      return this._subscription._state === 'closed';\n    }\n  }]);\n\n  return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n  function Observable(subscriber) {\n    if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n    if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n    this._subscriber = subscriber;\n  }\n\n  var _proto3 = Observable.prototype;\n\n  _proto3.subscribe = function subscribe(observer) {\n    if (typeof observer !== 'object' || observer === null) {\n      observer = {\n        next: observer,\n        error: arguments[1],\n        complete: arguments[2]\n      };\n    }\n\n    return new Subscription(observer, this._subscriber);\n  };\n\n  _proto3.forEach = function forEach(fn) {\n    var _this = this;\n\n    return new Promise(function (resolve, reject) {\n      if (typeof fn !== 'function') {\n        reject(new TypeError(fn + ' is not a function'));\n        return;\n      }\n\n      function done() {\n        subscription.unsubscribe();\n        resolve();\n      }\n\n      var subscription = _this.subscribe({\n        next: function (value) {\n          try {\n            fn(value, done);\n          } catch (e) {\n            reject(e);\n            subscription.unsubscribe();\n          }\n        },\n        error: reject,\n        complete: resolve\n      });\n    });\n  };\n\n  _proto3.map = function map(fn) {\n    var _this2 = this;\n\n    if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n    var C = getSpecies(this);\n    return new C(function (observer) {\n      return _this2.subscribe({\n        next: function (value) {\n          try {\n            value = fn(value);\n          } catch (e) {\n            return observer.error(e);\n          }\n\n          observer.next(value);\n        },\n        error: function (e) {\n          observer.error(e);\n        },\n        complete: function () {\n          observer.complete();\n        }\n      });\n    });\n  };\n\n  _proto3.filter = function filter(fn) {\n    var _this3 = this;\n\n    if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n    var C = getSpecies(this);\n    return new C(function (observer) {\n      return _this3.subscribe({\n        next: function (value) {\n          try {\n            if (!fn(value)) return;\n          } catch (e) {\n            return observer.error(e);\n          }\n\n          observer.next(value);\n        },\n        error: function (e) {\n          observer.error(e);\n        },\n        complete: function () {\n          observer.complete();\n        }\n      });\n    });\n  };\n\n  _proto3.reduce = function reduce(fn) {\n    var _this4 = this;\n\n    if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n    var C = getSpecies(this);\n    var hasSeed = arguments.length > 1;\n    var hasValue = false;\n    var seed = arguments[1];\n    var acc = seed;\n    return new C(function (observer) {\n      return _this4.subscribe({\n        next: function (value) {\n          var first = !hasValue;\n          hasValue = true;\n\n          if (!first || hasSeed) {\n            try {\n              acc = fn(acc, value);\n            } catch (e) {\n              return observer.error(e);\n            }\n          } else {\n            acc = value;\n          }\n        },\n        error: function (e) {\n          observer.error(e);\n        },\n        complete: function () {\n          if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n          observer.next(acc);\n          observer.complete();\n        }\n      });\n    });\n  };\n\n  _proto3.concat = function concat() {\n    var _this5 = this;\n\n    for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n      sources[_key] = arguments[_key];\n    }\n\n    var C = getSpecies(this);\n    return new C(function (observer) {\n      var subscription;\n      var index = 0;\n\n      function startNext(next) {\n        subscription = next.subscribe({\n          next: function (v) {\n            observer.next(v);\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            if (index === sources.length) {\n              subscription = undefined;\n              observer.complete();\n            } else {\n              startNext(C.from(sources[index++]));\n            }\n          }\n        });\n      }\n\n      startNext(_this5);\n      return function () {\n        if (subscription) {\n          subscription.unsubscribe();\n          subscription = undefined;\n        }\n      };\n    });\n  };\n\n  _proto3.flatMap = function flatMap(fn) {\n    var _this6 = this;\n\n    if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n    var C = getSpecies(this);\n    return new C(function (observer) {\n      var subscriptions = [];\n\n      var outer = _this6.subscribe({\n        next: function (value) {\n          if (fn) {\n            try {\n              value = fn(value);\n            } catch (e) {\n              return observer.error(e);\n            }\n          }\n\n          var inner = C.from(value).subscribe({\n            next: function (value) {\n              observer.next(value);\n            },\n            error: function (e) {\n              observer.error(e);\n            },\n            complete: function () {\n              var i = subscriptions.indexOf(inner);\n              if (i >= 0) subscriptions.splice(i, 1);\n              completeIfDone();\n            }\n          });\n          subscriptions.push(inner);\n        },\n        error: function (e) {\n          observer.error(e);\n        },\n        complete: function () {\n          completeIfDone();\n        }\n      });\n\n      function completeIfDone() {\n        if (outer.closed && subscriptions.length === 0) observer.complete();\n      }\n\n      return function () {\n        subscriptions.forEach(function (s) {\n          return s.unsubscribe();\n        });\n        outer.unsubscribe();\n      };\n    });\n  };\n\n  _proto3[SymbolObservable] = function () {\n    return this;\n  };\n\n  Observable.from = function from(x) {\n    var C = typeof this === 'function' ? this : Observable;\n    if (x == null) throw new TypeError(x + ' is not an object');\n    var method = getMethod(x, SymbolObservable);\n\n    if (method) {\n      var observable = method.call(x);\n      if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n      if (isObservable(observable) && observable.constructor === C) return observable;\n      return new C(function (observer) {\n        return observable.subscribe(observer);\n      });\n    }\n\n    if (hasSymbol('iterator')) {\n      method = getMethod(x, SymbolIterator);\n\n      if (method) {\n        return new C(function (observer) {\n          enqueue(function () {\n            if (observer.closed) return;\n\n            for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n              var item = _step.value;\n              observer.next(item);\n              if (observer.closed) return;\n            }\n\n            observer.complete();\n          });\n        });\n      }\n    }\n\n    if (Array.isArray(x)) {\n      return new C(function (observer) {\n        enqueue(function () {\n          if (observer.closed) return;\n\n          for (var i = 0; i < x.length; ++i) {\n            observer.next(x[i]);\n            if (observer.closed) return;\n          }\n\n          observer.complete();\n        });\n      });\n    }\n\n    throw new TypeError(x + ' is not observable');\n  };\n\n  Observable.of = function of() {\n    for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      items[_key2] = arguments[_key2];\n    }\n\n    var C = typeof this === 'function' ? this : Observable;\n    return new C(function (observer) {\n      enqueue(function () {\n        if (observer.closed) return;\n\n        for (var i = 0; i < items.length; ++i) {\n          observer.next(items[i]);\n          if (observer.closed) return;\n        }\n\n        observer.complete();\n      });\n    });\n  };\n\n  _createClass(Observable, null, [{\n    key: SymbolSpecies,\n    get: function () {\n      return this;\n    }\n  }]);\n\n  return Observable;\n}();\n\nif (hasSymbols()) {\n  Object.defineProperty(Observable, Symbol('extensions'), {\n    value: {\n      symbol: SymbolObservable,\n      hostReportError: hostReportError\n    },\n    configurable: true\n  });\n}\n\nexport { Observable };\n"],"mappings":"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OAAOruJ,CACT,CAQA,SAAS6sQ,EAAcprQ,GACrB,IAAK,IAAIslB,EAAQ,EAAGA,EAAQtlB,EAAMhI,OAAQstB,IAChBolP,EAAqB1qQ,EAAOslB,KAGlDtlB,EAAMslB,GAAS;AAInB,OAAOtlB,CACT,CAQA,SAAS+a,EAAqC6X,GAC5C,MAAMy4O,EAAYpoO,EAAO;AAEzB,IAAK,MAAOtP,EAAU/sB,KAAU87B,EAAQ9P,GACd83O,EAAqB93O,EAAQe,KAG/Cx8B,MAAMF,QAAQ2P,GAChBykQ,EAAU13O,GAAYy3O,EAAWxkQ,GAEjCA,GACiB,iBAAVA,GACPA,EAAM4tB,cAAgBp9B,OAEtBi0Q,EAAU13O,GAAY5Y,EAAMnU,GAE5BykQ,EAAU13O,GAAY/sB;AAK5B,OAAOykQ,CACT,CASA,SAASC,EACP14O,EACA72B,GAEA,KAAkB,OAAX62B,GAAiB,CACtB,MAAM24O,EAAOrpJ,EAAyBtvF,EAAQ72B;AAE9C,GAAIwvQ,EAAM,CACR,GAAIA,EAAK/iQ,IACP,OAAOuhQ,EAAQwB,EAAK/iQ;AAGtB,GAA0B,mBAAf+iQ,EAAK3kQ,MACd,OAAOmjQ,EAAQwB,EAAK3kQ,MAExB,CAEAgsB,EAAS2B,EAAe3B,EAC1B,CAMA,OAJA,WACE,OAAO,IACT,CAGF,CCjNO,MAAM44O,EAAOzhN,EAAO,CACzB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAGW0hN,EAAM1hN,EAAO,CACxB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,eACA,cACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,YACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAGW2hN,EAAa3hN,EAAO,CAC/B,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAOW4hN,EAAgB5hN,EAAO,CAClC,UACA,gBACA,SACA,UACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAGW6hN,EAAS7hN,EAAO,CAC3B,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,aACA,gBAKW8hN,EAAmB9hN,EAAO,CACrC,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAGWmB,EAAOnB,EAAO,CAAC,UC1Rf+hN,EAAO/hN,EAAO,CACzB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,cACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,QACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,OACA,UACA,cACA,cACA,UACA,gBACA,sBACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,OACA,QACA,SAGWgiN,EAAMhiN,EAAO,CACxB,gBACA,aACA,WACA,qBACA,YACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,WACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,YACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,YACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,QACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iB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"}