{"version":3,"file":"../moment.js","names":["global","factory","exports","module","define","amd","moment","this","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","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","createInvalid","NaN","fun","t","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","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","makeGetSet","keepTime","set$1","get","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","s","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","indexOf","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","y","parseTwoDigitYear","parseInt","getSetYear","createDate","d","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","getSetHour","globalLocale","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","w","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","isLocaleNameSane","_abbr","require","getSetGlobalLocale","e","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","names","j","next","chooseLocale","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","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","configFromInput","isUTC","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","orderLen","parseFloat","isDurationValid","_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","parseIso","base","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","isNumberOrStringArray","property","objectTest","propertyTest","properties","propertyLen","isMomentInputObject","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","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","isCalendarSpec","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","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","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","Infinity","isFormat","_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","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","posNegDuration","relativeTime$1","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"],"sources":["moment.js"],"sourcesContent":["//! moment.js\r\n//! version : 2.29.3\r\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\r\n//! license : MIT\r\n//! momentjs.com\r\n\r\n;(function (global, factory) {\r\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n typeof define === 'function' && define.amd ? define(factory) :\r\n global.moment = factory()\r\n}(this, (function () { 'use strict';\r\n\r\n var hookCallback;\r\n\r\n function hooks() {\r\n return hookCallback.apply(null, arguments);\r\n }\r\n\r\n // This is done to register the method called with moment()\r\n // without creating circular dependencies.\r\n function setHookCallback(callback) {\r\n hookCallback = callback;\r\n }\r\n\r\n function isArray(input) {\r\n return (\r\n input instanceof Array ||\r\n Object.prototype.toString.call(input) === '[object Array]'\r\n );\r\n }\r\n\r\n function isObject(input) {\r\n // IE8 will treat undefined and null as object if it wasn't for\r\n // input != null\r\n return (\r\n input != null &&\r\n Object.prototype.toString.call(input) === '[object Object]'\r\n );\r\n }\r\n\r\n function hasOwnProp(a, b) {\r\n return Object.prototype.hasOwnProperty.call(a, b);\r\n }\r\n\r\n function isObjectEmpty(obj) {\r\n if (Object.getOwnPropertyNames) {\r\n return Object.getOwnPropertyNames(obj).length === 0;\r\n } else {\r\n var k;\r\n for (k in obj) {\r\n if (hasOwnProp(obj, k)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n function isUndefined(input) {\r\n return input === void 0;\r\n }\r\n\r\n function isNumber(input) {\r\n return (\r\n typeof input === 'number' ||\r\n Object.prototype.toString.call(input) === '[object Number]'\r\n );\r\n }\r\n\r\n function isDate(input) {\r\n return (\r\n input instanceof Date ||\r\n Object.prototype.toString.call(input) === '[object Date]'\r\n );\r\n }\r\n\r\n function map(arr, fn) {\r\n var res = [],\r\n i,\r\n arrLen = arr.length;\r\n for (i = 0; i < arrLen; ++i) {\r\n res.push(fn(arr[i], i));\r\n }\r\n return res;\r\n }\r\n\r\n function extend(a, b) {\r\n for (var i in b) {\r\n if (hasOwnProp(b, i)) {\r\n a[i] = b[i];\r\n }\r\n }\r\n\r\n if (hasOwnProp(b, 'toString')) {\r\n a.toString = b.toString;\r\n }\r\n\r\n if (hasOwnProp(b, 'valueOf')) {\r\n a.valueOf = b.valueOf;\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function createUTC(input, format, locale, strict) {\r\n return createLocalOrUTC(input, format, locale, strict, true).utc();\r\n }\r\n\r\n function defaultParsingFlags() {\r\n // We need to deep clone this object.\r\n return {\r\n empty: false,\r\n unusedTokens: [],\r\n unusedInput: [],\r\n overflow: -2,\r\n charsLeftOver: 0,\r\n nullInput: false,\r\n invalidEra: null,\r\n invalidMonth: null,\r\n invalidFormat: false,\r\n userInvalidated: false,\r\n iso: false,\r\n parsedDateParts: [],\r\n era: null,\r\n meridiem: null,\r\n rfc2822: false,\r\n weekdayMismatch: false,\r\n };\r\n }\r\n\r\n function getParsingFlags(m) {\r\n if (m._pf == null) {\r\n m._pf = defaultParsingFlags();\r\n }\r\n return m._pf;\r\n }\r\n\r\n var some;\r\n if (Array.prototype.some) {\r\n some = Array.prototype.some;\r\n } else {\r\n some = function (fun) {\r\n var t = Object(this),\r\n len = t.length >>> 0,\r\n i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (i in t && fun.call(this, t[i], i, t)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n }\r\n\r\n function isValid(m) {\r\n if (m._isValid == null) {\r\n var flags = getParsingFlags(m),\r\n parsedParts = some.call(flags.parsedDateParts, function (i) {\r\n return i != null;\r\n }),\r\n isNowValid =\r\n !isNaN(m._d.getTime()) &&\r\n flags.overflow < 0 &&\r\n !flags.empty &&\r\n !flags.invalidEra &&\r\n !flags.invalidMonth &&\r\n !flags.invalidWeekday &&\r\n !flags.weekdayMismatch &&\r\n !flags.nullInput &&\r\n !flags.invalidFormat &&\r\n !flags.userInvalidated &&\r\n (!flags.meridiem || (flags.meridiem && parsedParts));\r\n\r\n if (m._strict) {\r\n isNowValid =\r\n isNowValid &&\r\n flags.charsLeftOver === 0 &&\r\n flags.unusedTokens.length === 0 &&\r\n flags.bigHour === undefined;\r\n }\r\n\r\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\r\n m._isValid = isNowValid;\r\n } else {\r\n return isNowValid;\r\n }\r\n }\r\n return m._isValid;\r\n }\r\n\r\n function createInvalid(flags) {\r\n var m = createUTC(NaN);\r\n if (flags != null) {\r\n extend(getParsingFlags(m), flags);\r\n } else {\r\n getParsingFlags(m).userInvalidated = true;\r\n }\r\n\r\n return m;\r\n }\r\n\r\n // Plugins that add properties should also add the key here (null value),\r\n // so we can properly clone ourselves.\r\n var momentProperties = (hooks.momentProperties = []),\r\n updateInProgress = false;\r\n\r\n function copyConfig(to, from) {\r\n var i,\r\n prop,\r\n val,\r\n momentPropertiesLen = momentProperties.length;\r\n\r\n if (!isUndefined(from._isAMomentObject)) {\r\n to._isAMomentObject = from._isAMomentObject;\r\n }\r\n if (!isUndefined(from._i)) {\r\n to._i = from._i;\r\n }\r\n if (!isUndefined(from._f)) {\r\n to._f = from._f;\r\n }\r\n if (!isUndefined(from._l)) {\r\n to._l = from._l;\r\n }\r\n if (!isUndefined(from._strict)) {\r\n to._strict = from._strict;\r\n }\r\n if (!isUndefined(from._tzm)) {\r\n to._tzm = from._tzm;\r\n }\r\n if (!isUndefined(from._isUTC)) {\r\n to._isUTC = from._isUTC;\r\n }\r\n if (!isUndefined(from._offset)) {\r\n to._offset = from._offset;\r\n }\r\n if (!isUndefined(from._pf)) {\r\n to._pf = getParsingFlags(from);\r\n }\r\n if (!isUndefined(from._locale)) {\r\n to._locale = from._locale;\r\n }\r\n\r\n if (momentPropertiesLen > 0) {\r\n for (i = 0; i < momentPropertiesLen; i++) {\r\n prop = momentProperties[i];\r\n val = from[prop];\r\n if (!isUndefined(val)) {\r\n to[prop] = val;\r\n }\r\n }\r\n }\r\n\r\n return to;\r\n }\r\n\r\n // Moment prototype object\r\n function Moment(config) {\r\n copyConfig(this, config);\r\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\r\n if (!this.isValid()) {\r\n this._d = new Date(NaN);\r\n }\r\n // Prevent infinite loop in case updateOffset creates new moment\r\n // objects.\r\n if (updateInProgress === false) {\r\n updateInProgress = true;\r\n hooks.updateOffset(this);\r\n updateInProgress = false;\r\n }\r\n }\r\n\r\n function isMoment(obj) {\r\n return (\r\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\r\n );\r\n }\r\n\r\n function warn(msg) {\r\n if (\r\n hooks.suppressDeprecationWarnings === false &&\r\n typeof console !== 'undefined' &&\r\n console.warn\r\n ) {\r\n console.warn('Deprecation warning: ' + msg);\r\n }\r\n }\r\n\r\n function deprecate(msg, fn) {\r\n var firstTime = true;\r\n\r\n return extend(function () {\r\n if (hooks.deprecationHandler != null) {\r\n hooks.deprecationHandler(null, msg);\r\n }\r\n if (firstTime) {\r\n var args = [],\r\n arg,\r\n i,\r\n key,\r\n argLen = arguments.length;\r\n for (i = 0; i < argLen; i++) {\r\n arg = '';\r\n if (typeof arguments[i] === 'object') {\r\n arg += '\\n[' + i + '] ';\r\n for (key in arguments[0]) {\r\n if (hasOwnProp(arguments[0], key)) {\r\n arg += key + ': ' + arguments[0][key] + ', ';\r\n }\r\n }\r\n arg = arg.slice(0, -2); // Remove trailing comma and space\r\n } else {\r\n arg = arguments[i];\r\n }\r\n args.push(arg);\r\n }\r\n warn(\r\n msg +\r\n '\\nArguments: ' +\r\n Array.prototype.slice.call(args).join('') +\r\n '\\n' +\r\n new Error().stack\r\n );\r\n firstTime = false;\r\n }\r\n return fn.apply(this, arguments);\r\n }, fn);\r\n }\r\n\r\n var deprecations = {};\r\n\r\n function deprecateSimple(name, msg) {\r\n if (hooks.deprecationHandler != null) {\r\n hooks.deprecationHandler(name, msg);\r\n }\r\n if (!deprecations[name]) {\r\n warn(msg);\r\n deprecations[name] = true;\r\n }\r\n }\r\n\r\n hooks.suppressDeprecationWarnings = false;\r\n hooks.deprecationHandler = null;\r\n\r\n function isFunction(input) {\r\n return (\r\n (typeof Function !== 'undefined' && input instanceof Function) ||\r\n Object.prototype.toString.call(input) === '[object Function]'\r\n );\r\n }\r\n\r\n function set(config) {\r\n var prop, i;\r\n for (i in config) {\r\n if (hasOwnProp(config, i)) {\r\n prop = config[i];\r\n if (isFunction(prop)) {\r\n this[i] = prop;\r\n } else {\r\n this['_' + i] = prop;\r\n }\r\n }\r\n }\r\n this._config = config;\r\n // Lenient ordinal parsing accepts just a number in addition to\r\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\r\n // TODO: Remove \"ordinalParse\" fallback in next major release.\r\n this._dayOfMonthOrdinalParseLenient = new RegExp(\r\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\r\n '|' +\r\n /\\d{1,2}/.source\r\n );\r\n }\r\n\r\n function mergeConfigs(parentConfig, childConfig) {\r\n var res = extend({}, parentConfig),\r\n prop;\r\n for (prop in childConfig) {\r\n if (hasOwnProp(childConfig, prop)) {\r\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\r\n res[prop] = {};\r\n extend(res[prop], parentConfig[prop]);\r\n extend(res[prop], childConfig[prop]);\r\n } else if (childConfig[prop] != null) {\r\n res[prop] = childConfig[prop];\r\n } else {\r\n delete res[prop];\r\n }\r\n }\r\n }\r\n for (prop in parentConfig) {\r\n if (\r\n hasOwnProp(parentConfig, prop) &&\r\n !hasOwnProp(childConfig, prop) &&\r\n isObject(parentConfig[prop])\r\n ) {\r\n // make sure changes to properties don't modify parent config\r\n res[prop] = extend({}, res[prop]);\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n function Locale(config) {\r\n if (config != null) {\r\n this.set(config);\r\n }\r\n }\r\n\r\n var keys;\r\n\r\n if (Object.keys) {\r\n keys = Object.keys;\r\n } else {\r\n keys = function (obj) {\r\n var i,\r\n res = [];\r\n for (i in obj) {\r\n if (hasOwnProp(obj, i)) {\r\n res.push(i);\r\n }\r\n }\r\n return res;\r\n };\r\n }\r\n\r\n var defaultCalendar = {\r\n sameDay: '[Today at] LT',\r\n nextDay: '[Tomorrow at] LT',\r\n nextWeek: 'dddd [at] LT',\r\n lastDay: '[Yesterday at] LT',\r\n lastWeek: '[Last] dddd [at] LT',\r\n sameElse: 'L',\r\n };\r\n\r\n function calendar(key, mom, now) {\r\n var output = this._calendar[key] || this._calendar['sameElse'];\r\n return isFunction(output) ? output.call(mom, now) : output;\r\n }\r\n\r\n function zeroFill(number, targetLength, forceSign) {\r\n var absNumber = '' + Math.abs(number),\r\n zerosToFill = targetLength - absNumber.length,\r\n sign = number >= 0;\r\n return (\r\n (sign ? (forceSign ? '+' : '') : '-') +\r\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\r\n absNumber\r\n );\r\n }\r\n\r\n var formattingTokens =\r\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,\r\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\r\n formatFunctions = {},\r\n formatTokenFunctions = {};\r\n\r\n // token: 'M'\r\n // padded: ['MM', 2]\r\n // ordinal: 'Mo'\r\n // callback: function () { this.month() + 1 }\r\n function addFormatToken(token, padded, ordinal, callback) {\r\n var func = callback;\r\n if (typeof callback === 'string') {\r\n func = function () {\r\n return this[callback]();\r\n };\r\n }\r\n if (token) {\r\n formatTokenFunctions[token] = func;\r\n }\r\n if (padded) {\r\n formatTokenFunctions[padded[0]] = function () {\r\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\r\n };\r\n }\r\n if (ordinal) {\r\n formatTokenFunctions[ordinal] = function () {\r\n return this.localeData().ordinal(\r\n func.apply(this, arguments),\r\n token\r\n );\r\n };\r\n }\r\n }\r\n\r\n function removeFormattingTokens(input) {\r\n if (input.match(/\\[[\\s\\S]/)) {\r\n return input.replace(/^\\[|\\]$/g, '');\r\n }\r\n return input.replace(/\\\\/g, '');\r\n }\r\n\r\n function makeFormatFunction(format) {\r\n var array = format.match(formattingTokens),\r\n i,\r\n length;\r\n\r\n for (i = 0, length = array.length; i < length; i++) {\r\n if (formatTokenFunctions[array[i]]) {\r\n array[i] = formatTokenFunctions[array[i]];\r\n } else {\r\n array[i] = removeFormattingTokens(array[i]);\r\n }\r\n }\r\n\r\n return function (mom) {\r\n var output = '',\r\n i;\r\n for (i = 0; i < length; i++) {\r\n output += isFunction(array[i])\r\n ? array[i].call(mom, format)\r\n : array[i];\r\n }\r\n return output;\r\n };\r\n }\r\n\r\n // format date using native date object\r\n function formatMoment(m, format) {\r\n if (!m.isValid()) {\r\n return m.localeData().invalidDate();\r\n }\r\n\r\n format = expandFormat(format, m.localeData());\r\n formatFunctions[format] =\r\n formatFunctions[format] || makeFormatFunction(format);\r\n\r\n return formatFunctions[format](m);\r\n }\r\n\r\n function expandFormat(format, locale) {\r\n var i = 5;\r\n\r\n function replaceLongDateFormatTokens(input) {\r\n return locale.longDateFormat(input) || input;\r\n }\r\n\r\n localFormattingTokens.lastIndex = 0;\r\n while (i >= 0 && localFormattingTokens.test(format)) {\r\n format = format.replace(\r\n localFormattingTokens,\r\n replaceLongDateFormatTokens\r\n );\r\n localFormattingTokens.lastIndex = 0;\r\n i -= 1;\r\n }\r\n\r\n return format;\r\n }\r\n\r\n var defaultLongDateFormat = {\r\n LTS: 'h:mm:ss A',\r\n LT: 'h:mm A',\r\n L: 'MM/DD/YYYY',\r\n LL: 'MMMM D, YYYY',\r\n LLL: 'MMMM D, YYYY h:mm A',\r\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\r\n };\r\n\r\n function longDateFormat(key) {\r\n var format = this._longDateFormat[key],\r\n formatUpper = this._longDateFormat[key.toUpperCase()];\r\n\r\n if (format || !formatUpper) {\r\n return format;\r\n }\r\n\r\n this._longDateFormat[key] = formatUpper\r\n .match(formattingTokens)\r\n .map(function (tok) {\r\n if (\r\n tok === 'MMMM' ||\r\n tok === 'MM' ||\r\n tok === 'DD' ||\r\n tok === 'dddd'\r\n ) {\r\n return tok.slice(1);\r\n }\r\n return tok;\r\n })\r\n .join('');\r\n\r\n return this._longDateFormat[key];\r\n }\r\n\r\n var defaultInvalidDate = 'Invalid date';\r\n\r\n function invalidDate() {\r\n return this._invalidDate;\r\n }\r\n\r\n var defaultOrdinal = '%d',\r\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\r\n\r\n function ordinal(number) {\r\n return this._ordinal.replace('%d', number);\r\n }\r\n\r\n var defaultRelativeTime = {\r\n future: 'in %s',\r\n past: '%s ago',\r\n s: 'a few seconds',\r\n ss: '%d seconds',\r\n m: 'a minute',\r\n mm: '%d minutes',\r\n h: 'an hour',\r\n hh: '%d hours',\r\n d: 'a day',\r\n dd: '%d days',\r\n w: 'a week',\r\n ww: '%d weeks',\r\n M: 'a month',\r\n MM: '%d months',\r\n y: 'a year',\r\n yy: '%d years',\r\n };\r\n\r\n function relativeTime(number, withoutSuffix, string, isFuture) {\r\n var output = this._relativeTime[string];\r\n return isFunction(output)\r\n ? output(number, withoutSuffix, string, isFuture)\r\n : output.replace(/%d/i, number);\r\n }\r\n\r\n function pastFuture(diff, output) {\r\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\r\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\r\n }\r\n\r\n var aliases = {};\r\n\r\n function addUnitAlias(unit, shorthand) {\r\n var lowerCase = unit.toLowerCase();\r\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\r\n }\r\n\r\n function normalizeUnits(units) {\r\n return typeof units === 'string'\r\n ? aliases[units] || aliases[units.toLowerCase()]\r\n : undefined;\r\n }\r\n\r\n function normalizeObjectUnits(inputObject) {\r\n var normalizedInput = {},\r\n normalizedProp,\r\n prop;\r\n\r\n for (prop in inputObject) {\r\n if (hasOwnProp(inputObject, prop)) {\r\n normalizedProp = normalizeUnits(prop);\r\n if (normalizedProp) {\r\n normalizedInput[normalizedProp] = inputObject[prop];\r\n }\r\n }\r\n }\r\n\r\n return normalizedInput;\r\n }\r\n\r\n var priorities = {};\r\n\r\n function addUnitPriority(unit, priority) {\r\n priorities[unit] = priority;\r\n }\r\n\r\n function getPrioritizedUnits(unitsObj) {\r\n var units = [],\r\n u;\r\n for (u in unitsObj) {\r\n if (hasOwnProp(unitsObj, u)) {\r\n units.push({ unit: u, priority: priorities[u] });\r\n }\r\n }\r\n units.sort(function (a, b) {\r\n return a.priority - b.priority;\r\n });\r\n return units;\r\n }\r\n\r\n function isLeapYear(year) {\r\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n }\r\n\r\n function absFloor(number) {\r\n if (number < 0) {\r\n // -0 -> 0\r\n return Math.ceil(number) || 0;\r\n } else {\r\n return Math.floor(number);\r\n }\r\n }\r\n\r\n function toInt(argumentForCoercion) {\r\n var coercedNumber = +argumentForCoercion,\r\n value = 0;\r\n\r\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\r\n value = absFloor(coercedNumber);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function makeGetSet(unit, keepTime) {\r\n return function (value) {\r\n if (value != null) {\r\n set$1(this, unit, value);\r\n hooks.updateOffset(this, keepTime);\r\n return this;\r\n } else {\r\n return get(this, unit);\r\n }\r\n };\r\n }\r\n\r\n function get(mom, unit) {\r\n return mom.isValid()\r\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\r\n : NaN;\r\n }\r\n\r\n function set$1(mom, unit, value) {\r\n if (mom.isValid() && !isNaN(value)) {\r\n if (\r\n unit === 'FullYear' &&\r\n isLeapYear(mom.year()) &&\r\n mom.month() === 1 &&\r\n mom.date() === 29\r\n ) {\r\n value = toInt(value);\r\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\r\n value,\r\n mom.month(),\r\n daysInMonth(value, mom.month())\r\n );\r\n } else {\r\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\r\n }\r\n }\r\n }\r\n\r\n // MOMENTS\r\n\r\n function stringGet(units) {\r\n units = normalizeUnits(units);\r\n if (isFunction(this[units])) {\r\n return this[units]();\r\n }\r\n return this;\r\n }\r\n\r\n function stringSet(units, value) {\r\n if (typeof units === 'object') {\r\n units = normalizeObjectUnits(units);\r\n var prioritized = getPrioritizedUnits(units),\r\n i,\r\n prioritizedLen = prioritized.length;\r\n for (i = 0; i < prioritizedLen; i++) {\r\n this[prioritized[i].unit](units[prioritized[i].unit]);\r\n }\r\n } else {\r\n units = normalizeUnits(units);\r\n if (isFunction(this[units])) {\r\n return this[units](value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n var match1 = /\\d/, // 0 - 9\r\n match2 = /\\d\\d/, // 00 - 99\r\n match3 = /\\d{3}/, // 000 - 999\r\n match4 = /\\d{4}/, // 0000 - 9999\r\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\r\n match1to2 = /\\d\\d?/, // 0 - 99\r\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\r\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\r\n match1to3 = /\\d{1,3}/, // 0 - 999\r\n match1to4 = /\\d{1,4}/, // 0 - 9999\r\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\r\n matchUnsigned = /\\d+/, // 0 - inf\r\n matchSigned = /[+-]?\\d+/, // -inf - inf\r\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\r\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\r\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\r\n // any word (or two) characters or numbers including two/three word month in arabic.\r\n // includes scottish gaelic two word and hyphenated months\r\n matchWord =\r\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,\r\n regexes;\r\n\r\n regexes = {};\r\n\r\n function addRegexToken(token, regex, strictRegex) {\r\n regexes[token] = isFunction(regex)\r\n ? regex\r\n : function (isStrict, localeData) {\r\n return isStrict && strictRegex ? strictRegex : regex;\r\n };\r\n }\r\n\r\n function getParseRegexForToken(token, config) {\r\n if (!hasOwnProp(regexes, token)) {\r\n return new RegExp(unescapeFormat(token));\r\n }\r\n\r\n return regexes[token](config._strict, config._locale);\r\n }\r\n\r\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\r\n function unescapeFormat(s) {\r\n return regexEscape(\r\n s\r\n .replace('\\\\', '')\r\n .replace(\r\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\r\n function (matched, p1, p2, p3, p4) {\r\n return p1 || p2 || p3 || p4;\r\n }\r\n )\r\n );\r\n }\r\n\r\n function regexEscape(s) {\r\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n }\r\n\r\n var tokens = {};\r\n\r\n function addParseToken(token, callback) {\r\n var i,\r\n func = callback,\r\n tokenLen;\r\n if (typeof token === 'string') {\r\n token = [token];\r\n }\r\n if (isNumber(callback)) {\r\n func = function (input, array) {\r\n array[callback] = toInt(input);\r\n };\r\n }\r\n tokenLen = token.length;\r\n for (i = 0; i < tokenLen; i++) {\r\n tokens[token[i]] = func;\r\n }\r\n }\r\n\r\n function addWeekParseToken(token, callback) {\r\n addParseToken(token, function (input, array, config, token) {\r\n config._w = config._w || {};\r\n callback(input, config._w, config, token);\r\n });\r\n }\r\n\r\n function addTimeToArrayFromToken(token, input, config) {\r\n if (input != null && hasOwnProp(tokens, token)) {\r\n tokens[token](input, config._a, config, token);\r\n }\r\n }\r\n\r\n var YEAR = 0,\r\n MONTH = 1,\r\n DATE = 2,\r\n HOUR = 3,\r\n MINUTE = 4,\r\n SECOND = 5,\r\n MILLISECOND = 6,\r\n WEEK = 7,\r\n WEEKDAY = 8;\r\n\r\n function mod(n, x) {\r\n return ((n % x) + x) % x;\r\n }\r\n\r\n var indexOf;\r\n\r\n if (Array.prototype.indexOf) {\r\n indexOf = Array.prototype.indexOf;\r\n } else {\r\n indexOf = function (o) {\r\n // I know\r\n var i;\r\n for (i = 0; i < this.length; ++i) {\r\n if (this[i] === o) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n }\r\n\r\n function daysInMonth(year, month) {\r\n if (isNaN(year) || isNaN(month)) {\r\n return NaN;\r\n }\r\n var modMonth = mod(month, 12);\r\n year += (month - modMonth) / 12;\r\n return modMonth === 1\r\n ? isLeapYear(year)\r\n ? 29\r\n : 28\r\n : 31 - ((modMonth % 7) % 2);\r\n }\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('M', ['MM', 2], 'Mo', function () {\r\n return this.month() + 1;\r\n });\r\n\r\n addFormatToken('MMM', 0, 0, function (format) {\r\n return this.localeData().monthsShort(this, format);\r\n });\r\n\r\n addFormatToken('MMMM', 0, 0, function (format) {\r\n return this.localeData().months(this, format);\r\n });\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('month', 'M');\r\n\r\n // PRIORITY\r\n\r\n addUnitPriority('month', 8);\r\n\r\n // PARSING\r\n\r\n addRegexToken('M', match1to2);\r\n addRegexToken('MM', match1to2, match2);\r\n addRegexToken('MMM', function (isStrict, locale) {\r\n return locale.monthsShortRegex(isStrict);\r\n });\r\n addRegexToken('MMMM', function (isStrict, locale) {\r\n return locale.monthsRegex(isStrict);\r\n });\r\n\r\n addParseToken(['M', 'MM'], function (input, array) {\r\n array[MONTH] = toInt(input) - 1;\r\n });\r\n\r\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\r\n var month = config._locale.monthsParse(input, token, config._strict);\r\n // if we didn't find a month name, mark the date as invalid.\r\n if (month != null) {\r\n array[MONTH] = month;\r\n } else {\r\n getParsingFlags(config).invalidMonth = input;\r\n }\r\n });\r\n\r\n // LOCALES\r\n\r\n var defaultLocaleMonths =\r\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\r\n '_'\r\n ),\r\n defaultLocaleMonthsShort =\r\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\r\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\r\n defaultMonthsShortRegex = matchWord,\r\n defaultMonthsRegex = matchWord;\r\n\r\n function localeMonths(m, format) {\r\n if (!m) {\r\n return isArray(this._months)\r\n ? this._months\r\n : this._months['standalone'];\r\n }\r\n return isArray(this._months)\r\n ? this._months[m.month()]\r\n : this._months[\r\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\r\n ? 'format'\r\n : 'standalone'\r\n ][m.month()];\r\n }\r\n\r\n function localeMonthsShort(m, format) {\r\n if (!m) {\r\n return isArray(this._monthsShort)\r\n ? this._monthsShort\r\n : this._monthsShort['standalone'];\r\n }\r\n return isArray(this._monthsShort)\r\n ? this._monthsShort[m.month()]\r\n : this._monthsShort[\r\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\r\n ][m.month()];\r\n }\r\n\r\n function handleStrictParse(monthName, format, strict) {\r\n var i,\r\n ii,\r\n mom,\r\n llc = monthName.toLocaleLowerCase();\r\n if (!this._monthsParse) {\r\n // this is not used\r\n this._monthsParse = [];\r\n this._longMonthsParse = [];\r\n this._shortMonthsParse = [];\r\n for (i = 0; i < 12; ++i) {\r\n mom = createUTC([2000, i]);\r\n this._shortMonthsParse[i] = this.monthsShort(\r\n mom,\r\n ''\r\n ).toLocaleLowerCase();\r\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\r\n }\r\n }\r\n\r\n if (strict) {\r\n if (format === 'MMM') {\r\n ii = indexOf.call(this._shortMonthsParse, llc);\r\n return ii !== -1 ? ii : null;\r\n } else {\r\n ii = indexOf.call(this._longMonthsParse, llc);\r\n return ii !== -1 ? ii : null;\r\n }\r\n } else {\r\n if (format === 'MMM') {\r\n ii = indexOf.call(this._shortMonthsParse, llc);\r\n if (ii !== -1) {\r\n return ii;\r\n }\r\n ii = indexOf.call(this._longMonthsParse, llc);\r\n return ii !== -1 ? ii : null;\r\n } else {\r\n ii = indexOf.call(this._longMonthsParse, llc);\r\n if (ii !== -1) {\r\n return ii;\r\n }\r\n ii = indexOf.call(this._shortMonthsParse, llc);\r\n return ii !== -1 ? ii : null;\r\n }\r\n }\r\n }\r\n\r\n function localeMonthsParse(monthName, format, strict) {\r\n var i, mom, regex;\r\n\r\n if (this._monthsParseExact) {\r\n return handleStrictParse.call(this, monthName, format, strict);\r\n }\r\n\r\n if (!this._monthsParse) {\r\n this._monthsParse = [];\r\n this._longMonthsParse = [];\r\n this._shortMonthsParse = [];\r\n }\r\n\r\n // TODO: add sorting\r\n // Sorting makes sure if one month (or abbr) is a prefix of another\r\n // see sorting in computeMonthsParse\r\n for (i = 0; i < 12; i++) {\r\n // make the regex if we don't have it already\r\n mom = createUTC([2000, i]);\r\n if (strict && !this._longMonthsParse[i]) {\r\n this._longMonthsParse[i] = new RegExp(\r\n '^' + this.months(mom, '').replace('.', '') + '$',\r\n 'i'\r\n );\r\n this._shortMonthsParse[i] = new RegExp(\r\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\r\n 'i'\r\n );\r\n }\r\n if (!strict && !this._monthsParse[i]) {\r\n regex =\r\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\r\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\r\n }\r\n // test the regex\r\n if (\r\n strict &&\r\n format === 'MMMM' &&\r\n this._longMonthsParse[i].test(monthName)\r\n ) {\r\n return i;\r\n } else if (\r\n strict &&\r\n format === 'MMM' &&\r\n this._shortMonthsParse[i].test(monthName)\r\n ) {\r\n return i;\r\n } else if (!strict && this._monthsParse[i].test(monthName)) {\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n // MOMENTS\r\n\r\n function setMonth(mom, value) {\r\n var dayOfMonth;\r\n\r\n if (!mom.isValid()) {\r\n // No op\r\n return mom;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n if (/^\\d+$/.test(value)) {\r\n value = toInt(value);\r\n } else {\r\n value = mom.localeData().monthsParse(value);\r\n // TODO: Another silent failure?\r\n if (!isNumber(value)) {\r\n return mom;\r\n }\r\n }\r\n }\r\n\r\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\r\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\r\n return mom;\r\n }\r\n\r\n function getSetMonth(value) {\r\n if (value != null) {\r\n setMonth(this, value);\r\n hooks.updateOffset(this, true);\r\n return this;\r\n } else {\r\n return get(this, 'Month');\r\n }\r\n }\r\n\r\n function getDaysInMonth() {\r\n return daysInMonth(this.year(), this.month());\r\n }\r\n\r\n function monthsShortRegex(isStrict) {\r\n if (this._monthsParseExact) {\r\n if (!hasOwnProp(this, '_monthsRegex')) {\r\n computeMonthsParse.call(this);\r\n }\r\n if (isStrict) {\r\n return this._monthsShortStrictRegex;\r\n } else {\r\n return this._monthsShortRegex;\r\n }\r\n } else {\r\n if (!hasOwnProp(this, '_monthsShortRegex')) {\r\n this._monthsShortRegex = defaultMonthsShortRegex;\r\n }\r\n return this._monthsShortStrictRegex && isStrict\r\n ? this._monthsShortStrictRegex\r\n : this._monthsShortRegex;\r\n }\r\n }\r\n\r\n function monthsRegex(isStrict) {\r\n if (this._monthsParseExact) {\r\n if (!hasOwnProp(this, '_monthsRegex')) {\r\n computeMonthsParse.call(this);\r\n }\r\n if (isStrict) {\r\n return this._monthsStrictRegex;\r\n } else {\r\n return this._monthsRegex;\r\n }\r\n } else {\r\n if (!hasOwnProp(this, '_monthsRegex')) {\r\n this._monthsRegex = defaultMonthsRegex;\r\n }\r\n return this._monthsStrictRegex && isStrict\r\n ? this._monthsStrictRegex\r\n : this._monthsRegex;\r\n }\r\n }\r\n\r\n function computeMonthsParse() {\r\n function cmpLenRev(a, b) {\r\n return b.length - a.length;\r\n }\r\n\r\n var shortPieces = [],\r\n longPieces = [],\r\n mixedPieces = [],\r\n i,\r\n mom;\r\n for (i = 0; i < 12; i++) {\r\n // make the regex if we don't have it already\r\n mom = createUTC([2000, i]);\r\n shortPieces.push(this.monthsShort(mom, ''));\r\n longPieces.push(this.months(mom, ''));\r\n mixedPieces.push(this.months(mom, ''));\r\n mixedPieces.push(this.monthsShort(mom, ''));\r\n }\r\n // Sorting makes sure if one month (or abbr) is a prefix of another it\r\n // will match the longer piece.\r\n shortPieces.sort(cmpLenRev);\r\n longPieces.sort(cmpLenRev);\r\n mixedPieces.sort(cmpLenRev);\r\n for (i = 0; i < 12; i++) {\r\n shortPieces[i] = regexEscape(shortPieces[i]);\r\n longPieces[i] = regexEscape(longPieces[i]);\r\n }\r\n for (i = 0; i < 24; i++) {\r\n mixedPieces[i] = regexEscape(mixedPieces[i]);\r\n }\r\n\r\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\r\n this._monthsShortRegex = this._monthsRegex;\r\n this._monthsStrictRegex = new RegExp(\r\n '^(' + longPieces.join('|') + ')',\r\n 'i'\r\n );\r\n this._monthsShortStrictRegex = new RegExp(\r\n '^(' + shortPieces.join('|') + ')',\r\n 'i'\r\n );\r\n }\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('Y', 0, 0, function () {\r\n var y = this.year();\r\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\r\n });\r\n\r\n addFormatToken(0, ['YY', 2], 0, function () {\r\n return this.year() % 100;\r\n });\r\n\r\n addFormatToken(0, ['YYYY', 4], 0, 'year');\r\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\r\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('year', 'y');\r\n\r\n // PRIORITIES\r\n\r\n addUnitPriority('year', 1);\r\n\r\n // PARSING\r\n\r\n addRegexToken('Y', matchSigned);\r\n addRegexToken('YY', match1to2, match2);\r\n addRegexToken('YYYY', match1to4, match4);\r\n addRegexToken('YYYYY', match1to6, match6);\r\n addRegexToken('YYYYYY', match1to6, match6);\r\n\r\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\r\n addParseToken('YYYY', function (input, array) {\r\n array[YEAR] =\r\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\r\n });\r\n addParseToken('YY', function (input, array) {\r\n array[YEAR] = hooks.parseTwoDigitYear(input);\r\n });\r\n addParseToken('Y', function (input, array) {\r\n array[YEAR] = parseInt(input, 10);\r\n });\r\n\r\n // HELPERS\r\n\r\n function daysInYear(year) {\r\n return isLeapYear(year) ? 366 : 365;\r\n }\r\n\r\n // HOOKS\r\n\r\n hooks.parseTwoDigitYear = function (input) {\r\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\r\n };\r\n\r\n // MOMENTS\r\n\r\n var getSetYear = makeGetSet('FullYear', true);\r\n\r\n function getIsLeapYear() {\r\n return isLeapYear(this.year());\r\n }\r\n\r\n function createDate(y, m, d, h, M, s, ms) {\r\n // can't just apply() to create a date:\r\n // https://stackoverflow.com/q/181348\r\n var date;\r\n // the date constructor remaps years 0-99 to 1900-1999\r\n if (y < 100 && y >= 0) {\r\n // preserve leap years using a full 400 year cycle, then reset\r\n date = new Date(y + 400, m, d, h, M, s, ms);\r\n if (isFinite(date.getFullYear())) {\r\n date.setFullYear(y);\r\n }\r\n } else {\r\n date = new Date(y, m, d, h, M, s, ms);\r\n }\r\n\r\n return date;\r\n }\r\n\r\n function createUTCDate(y) {\r\n var date, args;\r\n // the Date.UTC function remaps years 0-99 to 1900-1999\r\n if (y < 100 && y >= 0) {\r\n args = Array.prototype.slice.call(arguments);\r\n // preserve leap years using a full 400 year cycle, then reset\r\n args[0] = y + 400;\r\n date = new Date(Date.UTC.apply(null, args));\r\n if (isFinite(date.getUTCFullYear())) {\r\n date.setUTCFullYear(y);\r\n }\r\n } else {\r\n date = new Date(Date.UTC.apply(null, arguments));\r\n }\r\n\r\n return date;\r\n }\r\n\r\n // start-of-first-week - start-of-year\r\n function firstWeekOffset(year, dow, doy) {\r\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\r\n fwd = 7 + dow - doy,\r\n // first-week day local weekday -- which local weekday is fwd\r\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\r\n\r\n return -fwdlw + fwd - 1;\r\n }\r\n\r\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\r\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\r\n var localWeekday = (7 + weekday - dow) % 7,\r\n weekOffset = firstWeekOffset(year, dow, doy),\r\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\r\n resYear,\r\n resDayOfYear;\r\n\r\n if (dayOfYear <= 0) {\r\n resYear = year - 1;\r\n resDayOfYear = daysInYear(resYear) + dayOfYear;\r\n } else if (dayOfYear > daysInYear(year)) {\r\n resYear = year + 1;\r\n resDayOfYear = dayOfYear - daysInYear(year);\r\n } else {\r\n resYear = year;\r\n resDayOfYear = dayOfYear;\r\n }\r\n\r\n return {\r\n year: resYear,\r\n dayOfYear: resDayOfYear,\r\n };\r\n }\r\n\r\n function weekOfYear(mom, dow, doy) {\r\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\r\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\r\n resWeek,\r\n resYear;\r\n\r\n if (week < 1) {\r\n resYear = mom.year() - 1;\r\n resWeek = week + weeksInYear(resYear, dow, doy);\r\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\r\n resWeek = week - weeksInYear(mom.year(), dow, doy);\r\n resYear = mom.year() + 1;\r\n } else {\r\n resYear = mom.year();\r\n resWeek = week;\r\n }\r\n\r\n return {\r\n week: resWeek,\r\n year: resYear,\r\n };\r\n }\r\n\r\n function weeksInYear(year, dow, doy) {\r\n var weekOffset = firstWeekOffset(year, dow, doy),\r\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\r\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\r\n }\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('w', ['ww', 2], 'wo', 'week');\r\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('week', 'w');\r\n addUnitAlias('isoWeek', 'W');\r\n\r\n // PRIORITIES\r\n\r\n addUnitPriority('week', 5);\r\n addUnitPriority('isoWeek', 5);\r\n\r\n // PARSING\r\n\r\n addRegexToken('w', match1to2);\r\n addRegexToken('ww', match1to2, match2);\r\n addRegexToken('W', match1to2);\r\n addRegexToken('WW', match1to2, match2);\r\n\r\n addWeekParseToken(\r\n ['w', 'ww', 'W', 'WW'],\r\n function (input, week, config, token) {\r\n week[token.substr(0, 1)] = toInt(input);\r\n }\r\n );\r\n\r\n // HELPERS\r\n\r\n // LOCALES\r\n\r\n function localeWeek(mom) {\r\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\r\n }\r\n\r\n var defaultLocaleWeek = {\r\n dow: 0, // Sunday is the first day of the week.\r\n doy: 6, // The week that contains Jan 6th is the first week of the year.\r\n };\r\n\r\n function localeFirstDayOfWeek() {\r\n return this._week.dow;\r\n }\r\n\r\n function localeFirstDayOfYear() {\r\n return this._week.doy;\r\n }\r\n\r\n // MOMENTS\r\n\r\n function getSetWeek(input) {\r\n var week = this.localeData().week(this);\r\n return input == null ? week : this.add((input - week) * 7, 'd');\r\n }\r\n\r\n function getSetISOWeek(input) {\r\n var week = weekOfYear(this, 1, 4).week;\r\n return input == null ? week : this.add((input - week) * 7, 'd');\r\n }\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('d', 0, 'do', 'day');\r\n\r\n addFormatToken('dd', 0, 0, function (format) {\r\n return this.localeData().weekdaysMin(this, format);\r\n });\r\n\r\n addFormatToken('ddd', 0, 0, function (format) {\r\n return this.localeData().weekdaysShort(this, format);\r\n });\r\n\r\n addFormatToken('dddd', 0, 0, function (format) {\r\n return this.localeData().weekdays(this, format);\r\n });\r\n\r\n addFormatToken('e', 0, 0, 'weekday');\r\n addFormatToken('E', 0, 0, 'isoWeekday');\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('day', 'd');\r\n addUnitAlias('weekday', 'e');\r\n addUnitAlias('isoWeekday', 'E');\r\n\r\n // PRIORITY\r\n addUnitPriority('day', 11);\r\n addUnitPriority('weekday', 11);\r\n addUnitPriority('isoWeekday', 11);\r\n\r\n // PARSING\r\n\r\n addRegexToken('d', match1to2);\r\n addRegexToken('e', match1to2);\r\n addRegexToken('E', match1to2);\r\n addRegexToken('dd', function (isStrict, locale) {\r\n return locale.weekdaysMinRegex(isStrict);\r\n });\r\n addRegexToken('ddd', function (isStrict, locale) {\r\n return locale.weekdaysShortRegex(isStrict);\r\n });\r\n addRegexToken('dddd', function (isStrict, locale) {\r\n return locale.weekdaysRegex(isStrict);\r\n });\r\n\r\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\r\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\r\n // if we didn't get a weekday name, mark the date as invalid\r\n if (weekday != null) {\r\n week.d = weekday;\r\n } else {\r\n getParsingFlags(config).invalidWeekday = input;\r\n }\r\n });\r\n\r\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\r\n week[token] = toInt(input);\r\n });\r\n\r\n // HELPERS\r\n\r\n function parseWeekday(input, locale) {\r\n if (typeof input !== 'string') {\r\n return input;\r\n }\r\n\r\n if (!isNaN(input)) {\r\n return parseInt(input, 10);\r\n }\r\n\r\n input = locale.weekdaysParse(input);\r\n if (typeof input === 'number') {\r\n return input;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function parseIsoWeekday(input, locale) {\r\n if (typeof input === 'string') {\r\n return locale.weekdaysParse(input) % 7 || 7;\r\n }\r\n return isNaN(input) ? null : input;\r\n }\r\n\r\n // LOCALES\r\n function shiftWeekdays(ws, n) {\r\n return ws.slice(n, 7).concat(ws.slice(0, n));\r\n }\r\n\r\n var defaultLocaleWeekdays =\r\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\r\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\r\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\r\n defaultWeekdaysRegex = matchWord,\r\n defaultWeekdaysShortRegex = matchWord,\r\n defaultWeekdaysMinRegex = matchWord;\r\n\r\n function localeWeekdays(m, format) {\r\n var weekdays = isArray(this._weekdays)\r\n ? this._weekdays\r\n : this._weekdays[\r\n m && m !== true && this._weekdays.isFormat.test(format)\r\n ? 'format'\r\n : 'standalone'\r\n ];\r\n return m === true\r\n ? shiftWeekdays(weekdays, this._week.dow)\r\n : m\r\n ? weekdays[m.day()]\r\n : weekdays;\r\n }\r\n\r\n function localeWeekdaysShort(m) {\r\n return m === true\r\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\r\n : m\r\n ? this._weekdaysShort[m.day()]\r\n : this._weekdaysShort;\r\n }\r\n\r\n function localeWeekdaysMin(m) {\r\n return m === true\r\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\r\n : m\r\n ? this._weekdaysMin[m.day()]\r\n : this._weekdaysMin;\r\n }\r\n\r\n function handleStrictParse$1(weekdayName, format, strict) {\r\n var i,\r\n ii,\r\n mom,\r\n llc = weekdayName.toLocaleLowerCase();\r\n if (!this._weekdaysParse) {\r\n this._weekdaysParse = [];\r\n this._shortWeekdaysParse = [];\r\n this._minWeekdaysParse = [];\r\n\r\n for (i = 0; i < 7; ++i) {\r\n mom = createUTC([2000, 1]).day(i);\r\n this._minWeekdaysParse[i] = this.weekdaysMin(\r\n mom,\r\n ''\r\n ).toLocaleLowerCase();\r\n this._shortWeekdaysParse[i] = this.weekdaysShort(\r\n mom,\r\n ''\r\n ).toLocaleLowerCase();\r\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\r\n }\r\n }\r\n\r\n if (strict) {\r\n if (format === 'dddd') {\r\n ii = indexOf.call(this._weekdaysParse, llc);\r\n return ii !== -1 ? ii : null;\r\n } else if (format === 'ddd') {\r\n ii = indexOf.call(this._shortWeekdaysParse, llc);\r\n return ii !== -1 ? ii : null;\r\n } else {\r\n ii = indexOf.call(this._minWeekdaysParse, llc);\r\n return ii !== -1 ? ii : null;\r\n }\r\n } else {\r\n if (format === 'dddd') {\r\n ii = indexOf.call(this._weekdaysParse, llc);\r\n if (ii !== -1) {\r\n return ii;\r\n }\r\n ii = indexOf.call(this._shortWeekdaysParse, llc);\r\n if (ii !== -1) {\r\n return ii;\r\n }\r\n ii = indexOf.call(this._minWeekdaysParse, llc);\r\n return ii !== -1 ? ii : null;\r\n } else if (format === 'ddd') {\r\n ii = indexOf.call(this._shortWeekdaysParse, llc);\r\n if (ii !== -1) {\r\n return ii;\r\n }\r\n ii = indexOf.call(this._weekdaysParse, llc);\r\n if (ii !== -1) {\r\n return ii;\r\n }\r\n ii = indexOf.call(this._minWeekdaysParse, llc);\r\n return ii !== -1 ? ii : null;\r\n } else {\r\n ii = indexOf.call(this._minWeekdaysParse, llc);\r\n if (ii !== -1) {\r\n return ii;\r\n }\r\n ii = indexOf.call(this._weekdaysParse, llc);\r\n if (ii !== -1) {\r\n return ii;\r\n }\r\n ii = indexOf.call(this._shortWeekdaysParse, llc);\r\n return ii !== -1 ? ii : null;\r\n }\r\n }\r\n }\r\n\r\n function localeWeekdaysParse(weekdayName, format, strict) {\r\n var i, mom, regex;\r\n\r\n if (this._weekdaysParseExact) {\r\n return handleStrictParse$1.call(this, weekdayName, format, strict);\r\n }\r\n\r\n if (!this._weekdaysParse) {\r\n this._weekdaysParse = [];\r\n this._minWeekdaysParse = [];\r\n this._shortWeekdaysParse = [];\r\n this._fullWeekdaysParse = [];\r\n }\r\n\r\n for (i = 0; i < 7; i++) {\r\n // make the regex if we don't have it already\r\n\r\n mom = createUTC([2000, 1]).day(i);\r\n if (strict && !this._fullWeekdaysParse[i]) {\r\n this._fullWeekdaysParse[i] = new RegExp(\r\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\r\n 'i'\r\n );\r\n this._shortWeekdaysParse[i] = new RegExp(\r\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\r\n 'i'\r\n );\r\n this._minWeekdaysParse[i] = new RegExp(\r\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\r\n 'i'\r\n );\r\n }\r\n if (!this._weekdaysParse[i]) {\r\n regex =\r\n '^' +\r\n this.weekdays(mom, '') +\r\n '|^' +\r\n this.weekdaysShort(mom, '') +\r\n '|^' +\r\n this.weekdaysMin(mom, '');\r\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\r\n }\r\n // test the regex\r\n if (\r\n strict &&\r\n format === 'dddd' &&\r\n this._fullWeekdaysParse[i].test(weekdayName)\r\n ) {\r\n return i;\r\n } else if (\r\n strict &&\r\n format === 'ddd' &&\r\n this._shortWeekdaysParse[i].test(weekdayName)\r\n ) {\r\n return i;\r\n } else if (\r\n strict &&\r\n format === 'dd' &&\r\n this._minWeekdaysParse[i].test(weekdayName)\r\n ) {\r\n return i;\r\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n // MOMENTS\r\n\r\n function getSetDayOfWeek(input) {\r\n if (!this.isValid()) {\r\n return input != null ? this : NaN;\r\n }\r\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\r\n if (input != null) {\r\n input = parseWeekday(input, this.localeData());\r\n return this.add(input - day, 'd');\r\n } else {\r\n return day;\r\n }\r\n }\r\n\r\n function getSetLocaleDayOfWeek(input) {\r\n if (!this.isValid()) {\r\n return input != null ? this : NaN;\r\n }\r\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\r\n return input == null ? weekday : this.add(input - weekday, 'd');\r\n }\r\n\r\n function getSetISODayOfWeek(input) {\r\n if (!this.isValid()) {\r\n return input != null ? this : NaN;\r\n }\r\n\r\n // behaves the same as moment#day except\r\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\r\n // as a setter, sunday should belong to the previous week.\r\n\r\n if (input != null) {\r\n var weekday = parseIsoWeekday(input, this.localeData());\r\n return this.day(this.day() % 7 ? weekday : weekday - 7);\r\n } else {\r\n return this.day() || 7;\r\n }\r\n }\r\n\r\n function weekdaysRegex(isStrict) {\r\n if (this._weekdaysParseExact) {\r\n if (!hasOwnProp(this, '_weekdaysRegex')) {\r\n computeWeekdaysParse.call(this);\r\n }\r\n if (isStrict) {\r\n return this._weekdaysStrictRegex;\r\n } else {\r\n return this._weekdaysRegex;\r\n }\r\n } else {\r\n if (!hasOwnProp(this, '_weekdaysRegex')) {\r\n this._weekdaysRegex = defaultWeekdaysRegex;\r\n }\r\n return this._weekdaysStrictRegex && isStrict\r\n ? this._weekdaysStrictRegex\r\n : this._weekdaysRegex;\r\n }\r\n }\r\n\r\n function weekdaysShortRegex(isStrict) {\r\n if (this._weekdaysParseExact) {\r\n if (!hasOwnProp(this, '_weekdaysRegex')) {\r\n computeWeekdaysParse.call(this);\r\n }\r\n if (isStrict) {\r\n return this._weekdaysShortStrictRegex;\r\n } else {\r\n return this._weekdaysShortRegex;\r\n }\r\n } else {\r\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\r\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\r\n }\r\n return this._weekdaysShortStrictRegex && isStrict\r\n ? this._weekdaysShortStrictRegex\r\n : this._weekdaysShortRegex;\r\n }\r\n }\r\n\r\n function weekdaysMinRegex(isStrict) {\r\n if (this._weekdaysParseExact) {\r\n if (!hasOwnProp(this, '_weekdaysRegex')) {\r\n computeWeekdaysParse.call(this);\r\n }\r\n if (isStrict) {\r\n return this._weekdaysMinStrictRegex;\r\n } else {\r\n return this._weekdaysMinRegex;\r\n }\r\n } else {\r\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\r\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\r\n }\r\n return this._weekdaysMinStrictRegex && isStrict\r\n ? this._weekdaysMinStrictRegex\r\n : this._weekdaysMinRegex;\r\n }\r\n }\r\n\r\n function computeWeekdaysParse() {\r\n function cmpLenRev(a, b) {\r\n return b.length - a.length;\r\n }\r\n\r\n var minPieces = [],\r\n shortPieces = [],\r\n longPieces = [],\r\n mixedPieces = [],\r\n i,\r\n mom,\r\n minp,\r\n shortp,\r\n longp;\r\n for (i = 0; i < 7; i++) {\r\n // make the regex if we don't have it already\r\n mom = createUTC([2000, 1]).day(i);\r\n minp = regexEscape(this.weekdaysMin(mom, ''));\r\n shortp = regexEscape(this.weekdaysShort(mom, ''));\r\n longp = regexEscape(this.weekdays(mom, ''));\r\n minPieces.push(minp);\r\n shortPieces.push(shortp);\r\n longPieces.push(longp);\r\n mixedPieces.push(minp);\r\n mixedPieces.push(shortp);\r\n mixedPieces.push(longp);\r\n }\r\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\r\n // will match the longer piece.\r\n minPieces.sort(cmpLenRev);\r\n shortPieces.sort(cmpLenRev);\r\n longPieces.sort(cmpLenRev);\r\n mixedPieces.sort(cmpLenRev);\r\n\r\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\r\n this._weekdaysShortRegex = this._weekdaysRegex;\r\n this._weekdaysMinRegex = this._weekdaysRegex;\r\n\r\n this._weekdaysStrictRegex = new RegExp(\r\n '^(' + longPieces.join('|') + ')',\r\n 'i'\r\n );\r\n this._weekdaysShortStrictRegex = new RegExp(\r\n '^(' + shortPieces.join('|') + ')',\r\n 'i'\r\n );\r\n this._weekdaysMinStrictRegex = new RegExp(\r\n '^(' + minPieces.join('|') + ')',\r\n 'i'\r\n );\r\n }\r\n\r\n // FORMATTING\r\n\r\n function hFormat() {\r\n return this.hours() % 12 || 12;\r\n }\r\n\r\n function kFormat() {\r\n return this.hours() || 24;\r\n }\r\n\r\n addFormatToken('H', ['HH', 2], 0, 'hour');\r\n addFormatToken('h', ['hh', 2], 0, hFormat);\r\n addFormatToken('k', ['kk', 2], 0, kFormat);\r\n\r\n addFormatToken('hmm', 0, 0, function () {\r\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\r\n });\r\n\r\n addFormatToken('hmmss', 0, 0, function () {\r\n return (\r\n '' +\r\n hFormat.apply(this) +\r\n zeroFill(this.minutes(), 2) +\r\n zeroFill(this.seconds(), 2)\r\n );\r\n });\r\n\r\n addFormatToken('Hmm', 0, 0, function () {\r\n return '' + this.hours() + zeroFill(this.minutes(), 2);\r\n });\r\n\r\n addFormatToken('Hmmss', 0, 0, function () {\r\n return (\r\n '' +\r\n this.hours() +\r\n zeroFill(this.minutes(), 2) +\r\n zeroFill(this.seconds(), 2)\r\n );\r\n });\r\n\r\n function meridiem(token, lowercase) {\r\n addFormatToken(token, 0, 0, function () {\r\n return this.localeData().meridiem(\r\n this.hours(),\r\n this.minutes(),\r\n lowercase\r\n );\r\n });\r\n }\r\n\r\n meridiem('a', true);\r\n meridiem('A', false);\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('hour', 'h');\r\n\r\n // PRIORITY\r\n addUnitPriority('hour', 13);\r\n\r\n // PARSING\r\n\r\n function matchMeridiem(isStrict, locale) {\r\n return locale._meridiemParse;\r\n }\r\n\r\n addRegexToken('a', matchMeridiem);\r\n addRegexToken('A', matchMeridiem);\r\n addRegexToken('H', match1to2);\r\n addRegexToken('h', match1to2);\r\n addRegexToken('k', match1to2);\r\n addRegexToken('HH', match1to2, match2);\r\n addRegexToken('hh', match1to2, match2);\r\n addRegexToken('kk', match1to2, match2);\r\n\r\n addRegexToken('hmm', match3to4);\r\n addRegexToken('hmmss', match5to6);\r\n addRegexToken('Hmm', match3to4);\r\n addRegexToken('Hmmss', match5to6);\r\n\r\n addParseToken(['H', 'HH'], HOUR);\r\n addParseToken(['k', 'kk'], function (input, array, config) {\r\n var kInput = toInt(input);\r\n array[HOUR] = kInput === 24 ? 0 : kInput;\r\n });\r\n addParseToken(['a', 'A'], function (input, array, config) {\r\n config._isPm = config._locale.isPM(input);\r\n config._meridiem = input;\r\n });\r\n addParseToken(['h', 'hh'], function (input, array, config) {\r\n array[HOUR] = toInt(input);\r\n getParsingFlags(config).bigHour = true;\r\n });\r\n addParseToken('hmm', function (input, array, config) {\r\n var pos = input.length - 2;\r\n array[HOUR] = toInt(input.substr(0, pos));\r\n array[MINUTE] = toInt(input.substr(pos));\r\n getParsingFlags(config).bigHour = true;\r\n });\r\n addParseToken('hmmss', function (input, array, config) {\r\n var pos1 = input.length - 4,\r\n pos2 = input.length - 2;\r\n array[HOUR] = toInt(input.substr(0, pos1));\r\n array[MINUTE] = toInt(input.substr(pos1, 2));\r\n array[SECOND] = toInt(input.substr(pos2));\r\n getParsingFlags(config).bigHour = true;\r\n });\r\n addParseToken('Hmm', function (input, array, config) {\r\n var pos = input.length - 2;\r\n array[HOUR] = toInt(input.substr(0, pos));\r\n array[MINUTE] = toInt(input.substr(pos));\r\n });\r\n addParseToken('Hmmss', function (input, array, config) {\r\n var pos1 = input.length - 4,\r\n pos2 = input.length - 2;\r\n array[HOUR] = toInt(input.substr(0, pos1));\r\n array[MINUTE] = toInt(input.substr(pos1, 2));\r\n array[SECOND] = toInt(input.substr(pos2));\r\n });\r\n\r\n // LOCALES\r\n\r\n function localeIsPM(input) {\r\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\r\n // Using charAt should be more compatible.\r\n return (input + '').toLowerCase().charAt(0) === 'p';\r\n }\r\n\r\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\r\n // Setting the hour should keep the time, because the user explicitly\r\n // specified which hour they want. So trying to maintain the same hour (in\r\n // a new timezone) makes sense. Adding/subtracting hours does not follow\r\n // this rule.\r\n getSetHour = makeGetSet('Hours', true);\r\n\r\n function localeMeridiem(hours, minutes, isLower) {\r\n if (hours > 11) {\r\n return isLower ? 'pm' : 'PM';\r\n } else {\r\n return isLower ? 'am' : 'AM';\r\n }\r\n }\r\n\r\n var baseConfig = {\r\n calendar: defaultCalendar,\r\n longDateFormat: defaultLongDateFormat,\r\n invalidDate: defaultInvalidDate,\r\n ordinal: defaultOrdinal,\r\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\r\n relativeTime: defaultRelativeTime,\r\n\r\n months: defaultLocaleMonths,\r\n monthsShort: defaultLocaleMonthsShort,\r\n\r\n week: defaultLocaleWeek,\r\n\r\n weekdays: defaultLocaleWeekdays,\r\n weekdaysMin: defaultLocaleWeekdaysMin,\r\n weekdaysShort: defaultLocaleWeekdaysShort,\r\n\r\n meridiemParse: defaultLocaleMeridiemParse,\r\n };\r\n\r\n // internal storage for locale config files\r\n var locales = {},\r\n localeFamilies = {},\r\n globalLocale;\r\n\r\n function commonPrefix(arr1, arr2) {\r\n var i,\r\n minl = Math.min(arr1.length, arr2.length);\r\n for (i = 0; i < minl; i += 1) {\r\n if (arr1[i] !== arr2[i]) {\r\n return i;\r\n }\r\n }\r\n return minl;\r\n }\r\n\r\n function normalizeLocale(key) {\r\n return key ? key.toLowerCase().replace('_', '-') : key;\r\n }\r\n\r\n // pick the locale from the array\r\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\r\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\r\n function chooseLocale(names) {\r\n var i = 0,\r\n j,\r\n next,\r\n locale,\r\n split;\r\n\r\n while (i < names.length) {\r\n split = normalizeLocale(names[i]).split('-');\r\n j = split.length;\r\n next = normalizeLocale(names[i + 1]);\r\n next = next ? next.split('-') : null;\r\n while (j > 0) {\r\n locale = loadLocale(split.slice(0, j).join('-'));\r\n if (locale) {\r\n return locale;\r\n }\r\n if (\r\n next &&\r\n next.length >= j &&\r\n commonPrefix(split, next) >= j - 1\r\n ) {\r\n //the next array item is better than a shallower substring of this one\r\n break;\r\n }\r\n j--;\r\n }\r\n i++;\r\n }\r\n return globalLocale;\r\n }\r\n\r\n function isLocaleNameSane(name) {\r\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\r\n return name.match('^[^/\\\\\\\\]*$') != null;\r\n }\r\n\r\n function loadLocale(name) {\r\n var oldLocale = null,\r\n aliasedRequire;\r\n // TODO: Find a better way to register and load all the locales in Node\r\n if (\r\n locales[name] === undefined &&\r\n typeof module !== 'undefined' &&\r\n module &&\r\n module.exports &&\r\n isLocaleNameSane(name)\r\n ) {\r\n try {\r\n oldLocale = globalLocale._abbr;\r\n aliasedRequire = require;\r\n aliasedRequire('./locale/' + name);\r\n getSetGlobalLocale(oldLocale);\r\n } catch (e) {\r\n // mark as not found to avoid repeating expensive file require call causing high CPU\r\n // when trying to find en-US, en_US, en-us for every format call\r\n locales[name] = null; // null means not found\r\n }\r\n }\r\n return locales[name];\r\n }\r\n\r\n // This function will load locale and then set the global locale. If\r\n // no arguments are passed in, it will simply return the current global\r\n // locale key.\r\n function getSetGlobalLocale(key, values) {\r\n var data;\r\n if (key) {\r\n if (isUndefined(values)) {\r\n data = getLocale(key);\r\n } else {\r\n data = defineLocale(key, values);\r\n }\r\n\r\n if (data) {\r\n // moment.duration._locale = moment._locale = data;\r\n globalLocale = data;\r\n } else {\r\n if (typeof console !== 'undefined' && console.warn) {\r\n //warn user if arguments are passed but the locale could not be set\r\n console.warn(\r\n 'Locale ' + key + ' not found. Did you forget to load it?'\r\n );\r\n }\r\n }\r\n }\r\n\r\n return globalLocale._abbr;\r\n }\r\n\r\n function defineLocale(name, config) {\r\n if (config !== null) {\r\n var locale,\r\n parentConfig = baseConfig;\r\n config.abbr = name;\r\n if (locales[name] != null) {\r\n deprecateSimple(\r\n 'defineLocaleOverride',\r\n 'use moment.updateLocale(localeName, config) to change ' +\r\n 'an existing locale. moment.defineLocale(localeName, ' +\r\n 'config) should only be used for creating a new locale ' +\r\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\r\n );\r\n parentConfig = locales[name]._config;\r\n } else if (config.parentLocale != null) {\r\n if (locales[config.parentLocale] != null) {\r\n parentConfig = locales[config.parentLocale]._config;\r\n } else {\r\n locale = loadLocale(config.parentLocale);\r\n if (locale != null) {\r\n parentConfig = locale._config;\r\n } else {\r\n if (!localeFamilies[config.parentLocale]) {\r\n localeFamilies[config.parentLocale] = [];\r\n }\r\n localeFamilies[config.parentLocale].push({\r\n name: name,\r\n config: config,\r\n });\r\n return null;\r\n }\r\n }\r\n }\r\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\r\n\r\n if (localeFamilies[name]) {\r\n localeFamilies[name].forEach(function (x) {\r\n defineLocale(x.name, x.config);\r\n });\r\n }\r\n\r\n // backwards compat for now: also set the locale\r\n // make sure we set the locale AFTER all child locales have been\r\n // created, so we won't end up with the child locale set.\r\n getSetGlobalLocale(name);\r\n\r\n return locales[name];\r\n } else {\r\n // useful for testing\r\n delete locales[name];\r\n return null;\r\n }\r\n }\r\n\r\n function updateLocale(name, config) {\r\n if (config != null) {\r\n var locale,\r\n tmpLocale,\r\n parentConfig = baseConfig;\r\n\r\n if (locales[name] != null && locales[name].parentLocale != null) {\r\n // Update existing child locale in-place to avoid memory-leaks\r\n locales[name].set(mergeConfigs(locales[name]._config, config));\r\n } else {\r\n // MERGE\r\n tmpLocale = loadLocale(name);\r\n if (tmpLocale != null) {\r\n parentConfig = tmpLocale._config;\r\n }\r\n config = mergeConfigs(parentConfig, config);\r\n if (tmpLocale == null) {\r\n // updateLocale is called for creating a new locale\r\n // Set abbr so it will have a name (getters return\r\n // undefined otherwise).\r\n config.abbr = name;\r\n }\r\n locale = new Locale(config);\r\n locale.parentLocale = locales[name];\r\n locales[name] = locale;\r\n }\r\n\r\n // backwards compat for now: also set the locale\r\n getSetGlobalLocale(name);\r\n } else {\r\n // pass null for config to unupdate, useful for tests\r\n if (locales[name] != null) {\r\n if (locales[name].parentLocale != null) {\r\n locales[name] = locales[name].parentLocale;\r\n if (name === getSetGlobalLocale()) {\r\n getSetGlobalLocale(name);\r\n }\r\n } else if (locales[name] != null) {\r\n delete locales[name];\r\n }\r\n }\r\n }\r\n return locales[name];\r\n }\r\n\r\n // returns locale data\r\n function getLocale(key) {\r\n var locale;\r\n\r\n if (key && key._locale && key._locale._abbr) {\r\n key = key._locale._abbr;\r\n }\r\n\r\n if (!key) {\r\n return globalLocale;\r\n }\r\n\r\n if (!isArray(key)) {\r\n //short-circuit everything else\r\n locale = loadLocale(key);\r\n if (locale) {\r\n return locale;\r\n }\r\n key = [key];\r\n }\r\n\r\n return chooseLocale(key);\r\n }\r\n\r\n function listLocales() {\r\n return keys(locales);\r\n }\r\n\r\n function checkOverflow(m) {\r\n var overflow,\r\n a = m._a;\r\n\r\n if (a && getParsingFlags(m).overflow === -2) {\r\n overflow =\r\n a[MONTH] < 0 || a[MONTH] > 11\r\n ? MONTH\r\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\r\n ? DATE\r\n : a[HOUR] < 0 ||\r\n a[HOUR] > 24 ||\r\n (a[HOUR] === 24 &&\r\n (a[MINUTE] !== 0 ||\r\n a[SECOND] !== 0 ||\r\n a[MILLISECOND] !== 0))\r\n ? HOUR\r\n : a[MINUTE] < 0 || a[MINUTE] > 59\r\n ? MINUTE\r\n : a[SECOND] < 0 || a[SECOND] > 59\r\n ? SECOND\r\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\r\n ? MILLISECOND\r\n : -1;\r\n\r\n if (\r\n getParsingFlags(m)._overflowDayOfYear &&\r\n (overflow < YEAR || overflow > DATE)\r\n ) {\r\n overflow = DATE;\r\n }\r\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\r\n overflow = WEEK;\r\n }\r\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\r\n overflow = WEEKDAY;\r\n }\r\n\r\n getParsingFlags(m).overflow = overflow;\r\n }\r\n\r\n return m;\r\n }\r\n\r\n // iso 8601 regex\r\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)\r\n var extendedIsoRegex =\r\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)?)?$/,\r\n basicIsoRegex =\r\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)?)?$/,\r\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\r\n isoDates = [\r\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\r\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\r\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\r\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\r\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\r\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\r\n ['YYYYYYMMDD', /[+-]\\d{10}/],\r\n ['YYYYMMDD', /\\d{8}/],\r\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\r\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\r\n ['YYYYDDD', /\\d{7}/],\r\n ['YYYYMM', /\\d{6}/, false],\r\n ['YYYY', /\\d{4}/, false],\r\n ],\r\n // iso time formats and regexes\r\n isoTimes = [\r\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\r\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\r\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\r\n ['HH:mm', /\\d\\d:\\d\\d/],\r\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\r\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\r\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\r\n ['HHmm', /\\d\\d\\d\\d/],\r\n ['HH', /\\d\\d/],\r\n ],\r\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\r\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\r\n rfc2822 =\r\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}))$/,\r\n obsOffsets = {\r\n UT: 0,\r\n GMT: 0,\r\n EDT: -4 * 60,\r\n EST: -5 * 60,\r\n CDT: -5 * 60,\r\n CST: -6 * 60,\r\n MDT: -6 * 60,\r\n MST: -7 * 60,\r\n PDT: -7 * 60,\r\n PST: -8 * 60,\r\n };\r\n\r\n // date from iso format\r\n function configFromISO(config) {\r\n var i,\r\n l,\r\n string = config._i,\r\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\r\n allowTime,\r\n dateFormat,\r\n timeFormat,\r\n tzFormat,\r\n isoDatesLen = isoDates.length,\r\n isoTimesLen = isoTimes.length;\r\n\r\n if (match) {\r\n getParsingFlags(config).iso = true;\r\n for (i = 0, l = isoDatesLen; i < l; i++) {\r\n if (isoDates[i][1].exec(match[1])) {\r\n dateFormat = isoDates[i][0];\r\n allowTime = isoDates[i][2] !== false;\r\n break;\r\n }\r\n }\r\n if (dateFormat == null) {\r\n config._isValid = false;\r\n return;\r\n }\r\n if (match[3]) {\r\n for (i = 0, l = isoTimesLen; i < l; i++) {\r\n if (isoTimes[i][1].exec(match[3])) {\r\n // match[2] should be 'T' or space\r\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\r\n break;\r\n }\r\n }\r\n if (timeFormat == null) {\r\n config._isValid = false;\r\n return;\r\n }\r\n }\r\n if (!allowTime && timeFormat != null) {\r\n config._isValid = false;\r\n return;\r\n }\r\n if (match[4]) {\r\n if (tzRegex.exec(match[4])) {\r\n tzFormat = 'Z';\r\n } else {\r\n config._isValid = false;\r\n return;\r\n }\r\n }\r\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\r\n configFromStringAndFormat(config);\r\n } else {\r\n config._isValid = false;\r\n }\r\n }\r\n\r\n function extractFromRFC2822Strings(\r\n yearStr,\r\n monthStr,\r\n dayStr,\r\n hourStr,\r\n minuteStr,\r\n secondStr\r\n ) {\r\n var result = [\r\n untruncateYear(yearStr),\r\n defaultLocaleMonthsShort.indexOf(monthStr),\r\n parseInt(dayStr, 10),\r\n parseInt(hourStr, 10),\r\n parseInt(minuteStr, 10),\r\n ];\r\n\r\n if (secondStr) {\r\n result.push(parseInt(secondStr, 10));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function untruncateYear(yearStr) {\r\n var year = parseInt(yearStr, 10);\r\n if (year <= 49) {\r\n return 2000 + year;\r\n } else if (year <= 999) {\r\n return 1900 + year;\r\n }\r\n return year;\r\n }\r\n\r\n function preprocessRFC2822(s) {\r\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\r\n return s\r\n .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\r\n .replace(/(\\s\\s+)/g, ' ')\r\n .replace(/^\\s\\s*/, '')\r\n .replace(/\\s\\s*$/, '');\r\n }\r\n\r\n function checkWeekday(weekdayStr, parsedInput, config) {\r\n if (weekdayStr) {\r\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\r\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\r\n weekdayActual = new Date(\r\n parsedInput[0],\r\n parsedInput[1],\r\n parsedInput[2]\r\n ).getDay();\r\n if (weekdayProvided !== weekdayActual) {\r\n getParsingFlags(config).weekdayMismatch = true;\r\n config._isValid = false;\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\r\n if (obsOffset) {\r\n return obsOffsets[obsOffset];\r\n } else if (militaryOffset) {\r\n // the only allowed military tz is Z\r\n return 0;\r\n } else {\r\n var hm = parseInt(numOffset, 10),\r\n m = hm % 100,\r\n h = (hm - m) / 100;\r\n return h * 60 + m;\r\n }\r\n }\r\n\r\n // date and time from ref 2822 format\r\n function configFromRFC2822(config) {\r\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\r\n parsedArray;\r\n if (match) {\r\n parsedArray = extractFromRFC2822Strings(\r\n match[4],\r\n match[3],\r\n match[2],\r\n match[5],\r\n match[6],\r\n match[7]\r\n );\r\n if (!checkWeekday(match[1], parsedArray, config)) {\r\n return;\r\n }\r\n\r\n config._a = parsedArray;\r\n config._tzm = calculateOffset(match[8], match[9], match[10]);\r\n\r\n config._d = createUTCDate.apply(null, config._a);\r\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\r\n\r\n getParsingFlags(config).rfc2822 = true;\r\n } else {\r\n config._isValid = false;\r\n }\r\n }\r\n\r\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\r\n function configFromString(config) {\r\n var matched = aspNetJsonRegex.exec(config._i);\r\n if (matched !== null) {\r\n config._d = new Date(+matched[1]);\r\n return;\r\n }\r\n\r\n configFromISO(config);\r\n if (config._isValid === false) {\r\n delete config._isValid;\r\n } else {\r\n return;\r\n }\r\n\r\n configFromRFC2822(config);\r\n if (config._isValid === false) {\r\n delete config._isValid;\r\n } else {\r\n return;\r\n }\r\n\r\n if (config._strict) {\r\n config._isValid = false;\r\n } else {\r\n // Final attempt, use Input Fallback\r\n hooks.createFromInputFallback(config);\r\n }\r\n }\r\n\r\n hooks.createFromInputFallback = deprecate(\r\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\r\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\r\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\r\n function (config) {\r\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\r\n }\r\n );\r\n\r\n // Pick the first defined of two or three arguments.\r\n function defaults(a, b, c) {\r\n if (a != null) {\r\n return a;\r\n }\r\n if (b != null) {\r\n return b;\r\n }\r\n return c;\r\n }\r\n\r\n function currentDateArray(config) {\r\n // hooks is actually the exported moment object\r\n var nowValue = new Date(hooks.now());\r\n if (config._useUTC) {\r\n return [\r\n nowValue.getUTCFullYear(),\r\n nowValue.getUTCMonth(),\r\n nowValue.getUTCDate(),\r\n ];\r\n }\r\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\r\n }\r\n\r\n // convert an array to a date.\r\n // the array should mirror the parameters below\r\n // note: all values past the year are optional and will default to the lowest possible value.\r\n // [year, month, day , hour, minute, second, millisecond]\r\n function configFromArray(config) {\r\n var i,\r\n date,\r\n input = [],\r\n currentDate,\r\n expectedWeekday,\r\n yearToUse;\r\n\r\n if (config._d) {\r\n return;\r\n }\r\n\r\n currentDate = currentDateArray(config);\r\n\r\n //compute day of the year from weeks and weekdays\r\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\r\n dayOfYearFromWeekInfo(config);\r\n }\r\n\r\n //if the day of the year is set, figure out what it is\r\n if (config._dayOfYear != null) {\r\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\r\n\r\n if (\r\n config._dayOfYear > daysInYear(yearToUse) ||\r\n config._dayOfYear === 0\r\n ) {\r\n getParsingFlags(config)._overflowDayOfYear = true;\r\n }\r\n\r\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\r\n config._a[MONTH] = date.getUTCMonth();\r\n config._a[DATE] = date.getUTCDate();\r\n }\r\n\r\n // Default to current date.\r\n // * if no year, month, day of month are given, default to today\r\n // * if day of month is given, default month and year\r\n // * if month is given, default only year\r\n // * if year is given, don't default anything\r\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\r\n config._a[i] = input[i] = currentDate[i];\r\n }\r\n\r\n // Zero out whatever was not defaulted, including time\r\n for (; i < 7; i++) {\r\n config._a[i] = input[i] =\r\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\r\n }\r\n\r\n // Check for 24:00:00.000\r\n if (\r\n config._a[HOUR] === 24 &&\r\n config._a[MINUTE] === 0 &&\r\n config._a[SECOND] === 0 &&\r\n config._a[MILLISECOND] === 0\r\n ) {\r\n config._nextDay = true;\r\n config._a[HOUR] = 0;\r\n }\r\n\r\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\r\n null,\r\n input\r\n );\r\n expectedWeekday = config._useUTC\r\n ? config._d.getUTCDay()\r\n : config._d.getDay();\r\n\r\n // Apply timezone offset from input. The actual utcOffset can be changed\r\n // with parseZone.\r\n if (config._tzm != null) {\r\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\r\n }\r\n\r\n if (config._nextDay) {\r\n config._a[HOUR] = 24;\r\n }\r\n\r\n // check for mismatching day of week\r\n if (\r\n config._w &&\r\n typeof config._w.d !== 'undefined' &&\r\n config._w.d !== expectedWeekday\r\n ) {\r\n getParsingFlags(config).weekdayMismatch = true;\r\n }\r\n }\r\n\r\n function dayOfYearFromWeekInfo(config) {\r\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\r\n\r\n w = config._w;\r\n if (w.GG != null || w.W != null || w.E != null) {\r\n dow = 1;\r\n doy = 4;\r\n\r\n // TODO: We need to take the current isoWeekYear, but that depends on\r\n // how we interpret now (local, utc, fixed offset). So create\r\n // a now version of current config (take local/utc/offset flags, and\r\n // create now).\r\n weekYear = defaults(\r\n w.GG,\r\n config._a[YEAR],\r\n weekOfYear(createLocal(), 1, 4).year\r\n );\r\n week = defaults(w.W, 1);\r\n weekday = defaults(w.E, 1);\r\n if (weekday < 1 || weekday > 7) {\r\n weekdayOverflow = true;\r\n }\r\n } else {\r\n dow = config._locale._week.dow;\r\n doy = config._locale._week.doy;\r\n\r\n curWeek = weekOfYear(createLocal(), dow, doy);\r\n\r\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\r\n\r\n // Default to current week.\r\n week = defaults(w.w, curWeek.week);\r\n\r\n if (w.d != null) {\r\n // weekday -- low day numbers are considered next week\r\n weekday = w.d;\r\n if (weekday < 0 || weekday > 6) {\r\n weekdayOverflow = true;\r\n }\r\n } else if (w.e != null) {\r\n // local weekday -- counting starts from beginning of week\r\n weekday = w.e + dow;\r\n if (w.e < 0 || w.e > 6) {\r\n weekdayOverflow = true;\r\n }\r\n } else {\r\n // default to beginning of week\r\n weekday = dow;\r\n }\r\n }\r\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\r\n getParsingFlags(config)._overflowWeeks = true;\r\n } else if (weekdayOverflow != null) {\r\n getParsingFlags(config)._overflowWeekday = true;\r\n } else {\r\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\r\n config._a[YEAR] = temp.year;\r\n config._dayOfYear = temp.dayOfYear;\r\n }\r\n }\r\n\r\n // constant that refers to the ISO standard\r\n hooks.ISO_8601 = function () {};\r\n\r\n // constant that refers to the RFC 2822 form\r\n hooks.RFC_2822 = function () {};\r\n\r\n // date from string and format string\r\n function configFromStringAndFormat(config) {\r\n // TODO: Move this to another part of the creation flow to prevent circular deps\r\n if (config._f === hooks.ISO_8601) {\r\n configFromISO(config);\r\n return;\r\n }\r\n if (config._f === hooks.RFC_2822) {\r\n configFromRFC2822(config);\r\n return;\r\n }\r\n config._a = [];\r\n getParsingFlags(config).empty = true;\r\n\r\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\r\n var string = '' + config._i,\r\n i,\r\n parsedInput,\r\n tokens,\r\n token,\r\n skipped,\r\n stringLength = string.length,\r\n totalParsedInputLength = 0,\r\n era,\r\n tokenLen;\r\n\r\n tokens =\r\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\r\n tokenLen = tokens.length;\r\n for (i = 0; i < tokenLen; i++) {\r\n token = tokens[i];\r\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\r\n [])[0];\r\n if (parsedInput) {\r\n skipped = string.substr(0, string.indexOf(parsedInput));\r\n if (skipped.length > 0) {\r\n getParsingFlags(config).unusedInput.push(skipped);\r\n }\r\n string = string.slice(\r\n string.indexOf(parsedInput) + parsedInput.length\r\n );\r\n totalParsedInputLength += parsedInput.length;\r\n }\r\n // don't parse if it's not a known token\r\n if (formatTokenFunctions[token]) {\r\n if (parsedInput) {\r\n getParsingFlags(config).empty = false;\r\n } else {\r\n getParsingFlags(config).unusedTokens.push(token);\r\n }\r\n addTimeToArrayFromToken(token, parsedInput, config);\r\n } else if (config._strict && !parsedInput) {\r\n getParsingFlags(config).unusedTokens.push(token);\r\n }\r\n }\r\n\r\n // add remaining unparsed input length to the string\r\n getParsingFlags(config).charsLeftOver =\r\n stringLength - totalParsedInputLength;\r\n if (string.length > 0) {\r\n getParsingFlags(config).unusedInput.push(string);\r\n }\r\n\r\n // clear _12h flag if hour is <= 12\r\n if (\r\n config._a[HOUR] <= 12 &&\r\n getParsingFlags(config).bigHour === true &&\r\n config._a[HOUR] > 0\r\n ) {\r\n getParsingFlags(config).bigHour = undefined;\r\n }\r\n\r\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\r\n getParsingFlags(config).meridiem = config._meridiem;\r\n // handle meridiem\r\n config._a[HOUR] = meridiemFixWrap(\r\n config._locale,\r\n config._a[HOUR],\r\n config._meridiem\r\n );\r\n\r\n // handle era\r\n era = getParsingFlags(config).era;\r\n if (era !== null) {\r\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\r\n }\r\n\r\n configFromArray(config);\r\n checkOverflow(config);\r\n }\r\n\r\n function meridiemFixWrap(locale, hour, meridiem) {\r\n var isPm;\r\n\r\n if (meridiem == null) {\r\n // nothing to do\r\n return hour;\r\n }\r\n if (locale.meridiemHour != null) {\r\n return locale.meridiemHour(hour, meridiem);\r\n } else if (locale.isPM != null) {\r\n // Fallback\r\n isPm = locale.isPM(meridiem);\r\n if (isPm && hour < 12) {\r\n hour += 12;\r\n }\r\n if (!isPm && hour === 12) {\r\n hour = 0;\r\n }\r\n return hour;\r\n } else {\r\n // this is not supposed to happen\r\n return hour;\r\n }\r\n }\r\n\r\n // date from string and array of format strings\r\n function configFromStringAndArray(config) {\r\n var tempConfig,\r\n bestMoment,\r\n scoreToBeat,\r\n i,\r\n currentScore,\r\n validFormatFound,\r\n bestFormatIsValid = false,\r\n configfLen = config._f.length;\r\n\r\n if (configfLen === 0) {\r\n getParsingFlags(config).invalidFormat = true;\r\n config._d = new Date(NaN);\r\n return;\r\n }\r\n\r\n for (i = 0; i < configfLen; i++) {\r\n currentScore = 0;\r\n validFormatFound = false;\r\n tempConfig = copyConfig({}, config);\r\n if (config._useUTC != null) {\r\n tempConfig._useUTC = config._useUTC;\r\n }\r\n tempConfig._f = config._f[i];\r\n configFromStringAndFormat(tempConfig);\r\n\r\n if (isValid(tempConfig)) {\r\n validFormatFound = true;\r\n }\r\n\r\n // if there is any input that was not parsed add a penalty for that format\r\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\r\n\r\n //or tokens\r\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\r\n\r\n getParsingFlags(tempConfig).score = currentScore;\r\n\r\n if (!bestFormatIsValid) {\r\n if (\r\n scoreToBeat == null ||\r\n currentScore < scoreToBeat ||\r\n validFormatFound\r\n ) {\r\n scoreToBeat = currentScore;\r\n bestMoment = tempConfig;\r\n if (validFormatFound) {\r\n bestFormatIsValid = true;\r\n }\r\n }\r\n } else {\r\n if (currentScore < scoreToBeat) {\r\n scoreToBeat = currentScore;\r\n bestMoment = tempConfig;\r\n }\r\n }\r\n }\r\n\r\n extend(config, bestMoment || tempConfig);\r\n }\r\n\r\n function configFromObject(config) {\r\n if (config._d) {\r\n return;\r\n }\r\n\r\n var i = normalizeObjectUnits(config._i),\r\n dayOrDate = i.day === undefined ? i.date : i.day;\r\n config._a = map(\r\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\r\n function (obj) {\r\n return obj && parseInt(obj, 10);\r\n }\r\n );\r\n\r\n configFromArray(config);\r\n }\r\n\r\n function createFromConfig(config) {\r\n var res = new Moment(checkOverflow(prepareConfig(config)));\r\n if (res._nextDay) {\r\n // Adding is smart enough around DST\r\n res.add(1, 'd');\r\n res._nextDay = undefined;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n function prepareConfig(config) {\r\n var input = config._i,\r\n format = config._f;\r\n\r\n config._locale = config._locale || getLocale(config._l);\r\n\r\n if (input === null || (format === undefined && input === '')) {\r\n return createInvalid({ nullInput: true });\r\n }\r\n\r\n if (typeof input === 'string') {\r\n config._i = input = config._locale.preparse(input);\r\n }\r\n\r\n if (isMoment(input)) {\r\n return new Moment(checkOverflow(input));\r\n } else if (isDate(input)) {\r\n config._d = input;\r\n } else if (isArray(format)) {\r\n configFromStringAndArray(config);\r\n } else if (format) {\r\n configFromStringAndFormat(config);\r\n } else {\r\n configFromInput(config);\r\n }\r\n\r\n if (!isValid(config)) {\r\n config._d = null;\r\n }\r\n\r\n return config;\r\n }\r\n\r\n function configFromInput(config) {\r\n var input = config._i;\r\n if (isUndefined(input)) {\r\n config._d = new Date(hooks.now());\r\n } else if (isDate(input)) {\r\n config._d = new Date(input.valueOf());\r\n } else if (typeof input === 'string') {\r\n configFromString(config);\r\n } else if (isArray(input)) {\r\n config._a = map(input.slice(0), function (obj) {\r\n return parseInt(obj, 10);\r\n });\r\n configFromArray(config);\r\n } else if (isObject(input)) {\r\n configFromObject(config);\r\n } else if (isNumber(input)) {\r\n // from milliseconds\r\n config._d = new Date(input);\r\n } else {\r\n hooks.createFromInputFallback(config);\r\n }\r\n }\r\n\r\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\r\n var c = {};\r\n\r\n if (format === true || format === false) {\r\n strict = format;\r\n format = undefined;\r\n }\r\n\r\n if (locale === true || locale === false) {\r\n strict = locale;\r\n locale = undefined;\r\n }\r\n\r\n if (\r\n (isObject(input) && isObjectEmpty(input)) ||\r\n (isArray(input) && input.length === 0)\r\n ) {\r\n input = undefined;\r\n }\r\n // object construction must be done this way.\r\n // https://github.com/moment/moment/issues/1423\r\n c._isAMomentObject = true;\r\n c._useUTC = c._isUTC = isUTC;\r\n c._l = locale;\r\n c._i = input;\r\n c._f = format;\r\n c._strict = strict;\r\n\r\n return createFromConfig(c);\r\n }\r\n\r\n function createLocal(input, format, locale, strict) {\r\n return createLocalOrUTC(input, format, locale, strict, false);\r\n }\r\n\r\n var prototypeMin = deprecate(\r\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\r\n function () {\r\n var other = createLocal.apply(null, arguments);\r\n if (this.isValid() && other.isValid()) {\r\n return other < this ? this : other;\r\n } else {\r\n return createInvalid();\r\n }\r\n }\r\n ),\r\n prototypeMax = deprecate(\r\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\r\n function () {\r\n var other = createLocal.apply(null, arguments);\r\n if (this.isValid() && other.isValid()) {\r\n return other > this ? this : other;\r\n } else {\r\n return createInvalid();\r\n }\r\n }\r\n );\r\n\r\n // Pick a moment m from moments so that m[fn](other) is true for all\r\n // other. This relies on the function fn to be transitive.\r\n //\r\n // moments should either be an array of moment objects or an array, whose\r\n // first element is an array of moment objects.\r\n function pickBy(fn, moments) {\r\n var res, i;\r\n if (moments.length === 1 && isArray(moments[0])) {\r\n moments = moments[0];\r\n }\r\n if (!moments.length) {\r\n return createLocal();\r\n }\r\n res = moments[0];\r\n for (i = 1; i < moments.length; ++i) {\r\n if (!moments[i].isValid() || moments[i][fn](res)) {\r\n res = moments[i];\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n // TODO: Use [].sort instead?\r\n function min() {\r\n var args = [].slice.call(arguments, 0);\r\n\r\n return pickBy('isBefore', args);\r\n }\r\n\r\n function max() {\r\n var args = [].slice.call(arguments, 0);\r\n\r\n return pickBy('isAfter', args);\r\n }\r\n\r\n var now = function () {\r\n return Date.now ? Date.now() : +new Date();\r\n };\r\n\r\n var ordering = [\r\n 'year',\r\n 'quarter',\r\n 'month',\r\n 'week',\r\n 'day',\r\n 'hour',\r\n 'minute',\r\n 'second',\r\n 'millisecond',\r\n ];\r\n\r\n function isDurationValid(m) {\r\n var key,\r\n unitHasDecimal = false,\r\n i,\r\n orderLen = ordering.length;\r\n for (key in m) {\r\n if (\r\n hasOwnProp(m, key) &&\r\n !(\r\n indexOf.call(ordering, key) !== -1 &&\r\n (m[key] == null || !isNaN(m[key]))\r\n )\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n for (i = 0; i < orderLen; ++i) {\r\n if (m[ordering[i]]) {\r\n if (unitHasDecimal) {\r\n return false; // only allow non-integers for smallest unit\r\n }\r\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\r\n unitHasDecimal = true;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function isValid$1() {\r\n return this._isValid;\r\n }\r\n\r\n function createInvalid$1() {\r\n return createDuration(NaN);\r\n }\r\n\r\n function Duration(duration) {\r\n var normalizedInput = normalizeObjectUnits(duration),\r\n years = normalizedInput.year || 0,\r\n quarters = normalizedInput.quarter || 0,\r\n months = normalizedInput.month || 0,\r\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\r\n days = normalizedInput.day || 0,\r\n hours = normalizedInput.hour || 0,\r\n minutes = normalizedInput.minute || 0,\r\n seconds = normalizedInput.second || 0,\r\n milliseconds = normalizedInput.millisecond || 0;\r\n\r\n this._isValid = isDurationValid(normalizedInput);\r\n\r\n // representation for dateAddRemove\r\n this._milliseconds =\r\n +milliseconds +\r\n seconds * 1e3 + // 1000\r\n minutes * 6e4 + // 1000 * 60\r\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\r\n // Because of dateAddRemove treats 24 hours as different from a\r\n // day when working around DST, we need to store them separately\r\n this._days = +days + weeks * 7;\r\n // It is impossible to translate months into days without knowing\r\n // which months you are are talking about, so we have to store\r\n // it separately.\r\n this._months = +months + quarters * 3 + years * 12;\r\n\r\n this._data = {};\r\n\r\n this._locale = getLocale();\r\n\r\n this._bubble();\r\n }\r\n\r\n function isDuration(obj) {\r\n return obj instanceof Duration;\r\n }\r\n\r\n function absRound(number) {\r\n if (number < 0) {\r\n return Math.round(-1 * number) * -1;\r\n } else {\r\n return Math.round(number);\r\n }\r\n }\r\n\r\n // compare two arrays, return the number of differences\r\n function compareArrays(array1, array2, dontConvert) {\r\n var len = Math.min(array1.length, array2.length),\r\n lengthDiff = Math.abs(array1.length - array2.length),\r\n diffs = 0,\r\n i;\r\n for (i = 0; i < len; i++) {\r\n if (\r\n (dontConvert && array1[i] !== array2[i]) ||\r\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\r\n ) {\r\n diffs++;\r\n }\r\n }\r\n return diffs + lengthDiff;\r\n }\r\n\r\n // FORMATTING\r\n\r\n function offset(token, separator) {\r\n addFormatToken(token, 0, 0, function () {\r\n var offset = this.utcOffset(),\r\n sign = '+';\r\n if (offset < 0) {\r\n offset = -offset;\r\n sign = '-';\r\n }\r\n return (\r\n sign +\r\n zeroFill(~~(offset / 60), 2) +\r\n separator +\r\n zeroFill(~~offset % 60, 2)\r\n );\r\n });\r\n }\r\n\r\n offset('Z', ':');\r\n offset('ZZ', '');\r\n\r\n // PARSING\r\n\r\n addRegexToken('Z', matchShortOffset);\r\n addRegexToken('ZZ', matchShortOffset);\r\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\r\n config._useUTC = true;\r\n config._tzm = offsetFromString(matchShortOffset, input);\r\n });\r\n\r\n // HELPERS\r\n\r\n // timezone chunker\r\n // '+10:00' > ['10', '00']\r\n // '-1530' > ['-15', '30']\r\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\r\n\r\n function offsetFromString(matcher, string) {\r\n var matches = (string || '').match(matcher),\r\n chunk,\r\n parts,\r\n minutes;\r\n\r\n if (matches === null) {\r\n return null;\r\n }\r\n\r\n chunk = matches[matches.length - 1] || [];\r\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\r\n minutes = +(parts[1] * 60) + toInt(parts[2]);\r\n\r\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\r\n }\r\n\r\n // Return a moment from input, that is local/utc/zone equivalent to model.\r\n function cloneWithOffset(input, model) {\r\n var res, diff;\r\n if (model._isUTC) {\r\n res = model.clone();\r\n diff =\r\n (isMoment(input) || isDate(input)\r\n ? input.valueOf()\r\n : createLocal(input).valueOf()) - res.valueOf();\r\n // Use low-level api, because this fn is low-level api.\r\n res._d.setTime(res._d.valueOf() + diff);\r\n hooks.updateOffset(res, false);\r\n return res;\r\n } else {\r\n return createLocal(input).local();\r\n }\r\n }\r\n\r\n function getDateOffset(m) {\r\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\r\n // https://github.com/moment/moment/pull/1871\r\n return -Math.round(m._d.getTimezoneOffset());\r\n }\r\n\r\n // HOOKS\r\n\r\n // This function will be called whenever a moment is mutated.\r\n // It is intended to keep the offset in sync with the timezone.\r\n hooks.updateOffset = function () {};\r\n\r\n // MOMENTS\r\n\r\n // keepLocalTime = true means only change the timezone, without\r\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\r\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\r\n // +0200, so we adjust the time as needed, to be valid.\r\n //\r\n // Keeping the time actually adds/subtracts (one hour)\r\n // from the actual represented time. That is why we call updateOffset\r\n // a second time. In case it wants us to change the offset again\r\n // _changeInProgress == true case, then we have to adjust, because\r\n // there is no such time in the given timezone.\r\n function getSetOffset(input, keepLocalTime, keepMinutes) {\r\n var offset = this._offset || 0,\r\n localAdjust;\r\n if (!this.isValid()) {\r\n return input != null ? this : NaN;\r\n }\r\n if (input != null) {\r\n if (typeof input === 'string') {\r\n input = offsetFromString(matchShortOffset, input);\r\n if (input === null) {\r\n return this;\r\n }\r\n } else if (Math.abs(input) < 16 && !keepMinutes) {\r\n input = input * 60;\r\n }\r\n if (!this._isUTC && keepLocalTime) {\r\n localAdjust = getDateOffset(this);\r\n }\r\n this._offset = input;\r\n this._isUTC = true;\r\n if (localAdjust != null) {\r\n this.add(localAdjust, 'm');\r\n }\r\n if (offset !== input) {\r\n if (!keepLocalTime || this._changeInProgress) {\r\n addSubtract(\r\n this,\r\n createDuration(input - offset, 'm'),\r\n 1,\r\n false\r\n );\r\n } else if (!this._changeInProgress) {\r\n this._changeInProgress = true;\r\n hooks.updateOffset(this, true);\r\n this._changeInProgress = null;\r\n }\r\n }\r\n return this;\r\n } else {\r\n return this._isUTC ? offset : getDateOffset(this);\r\n }\r\n }\r\n\r\n function getSetZone(input, keepLocalTime) {\r\n if (input != null) {\r\n if (typeof input !== 'string') {\r\n input = -input;\r\n }\r\n\r\n this.utcOffset(input, keepLocalTime);\r\n\r\n return this;\r\n } else {\r\n return -this.utcOffset();\r\n }\r\n }\r\n\r\n function setOffsetToUTC(keepLocalTime) {\r\n return this.utcOffset(0, keepLocalTime);\r\n }\r\n\r\n function setOffsetToLocal(keepLocalTime) {\r\n if (this._isUTC) {\r\n this.utcOffset(0, keepLocalTime);\r\n this._isUTC = false;\r\n\r\n if (keepLocalTime) {\r\n this.subtract(getDateOffset(this), 'm');\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n function setOffsetToParsedOffset() {\r\n if (this._tzm != null) {\r\n this.utcOffset(this._tzm, false, true);\r\n } else if (typeof this._i === 'string') {\r\n var tZone = offsetFromString(matchOffset, this._i);\r\n if (tZone != null) {\r\n this.utcOffset(tZone);\r\n } else {\r\n this.utcOffset(0, true);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n function hasAlignedHourOffset(input) {\r\n if (!this.isValid()) {\r\n return false;\r\n }\r\n input = input ? createLocal(input).utcOffset() : 0;\r\n\r\n return (this.utcOffset() - input) % 60 === 0;\r\n }\r\n\r\n function isDaylightSavingTime() {\r\n return (\r\n this.utcOffset() > this.clone().month(0).utcOffset() ||\r\n this.utcOffset() > this.clone().month(5).utcOffset()\r\n );\r\n }\r\n\r\n function isDaylightSavingTimeShifted() {\r\n if (!isUndefined(this._isDSTShifted)) {\r\n return this._isDSTShifted;\r\n }\r\n\r\n var c = {},\r\n other;\r\n\r\n copyConfig(c, this);\r\n c = prepareConfig(c);\r\n\r\n if (c._a) {\r\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\r\n this._isDSTShifted =\r\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\r\n } else {\r\n this._isDSTShifted = false;\r\n }\r\n\r\n return this._isDSTShifted;\r\n }\r\n\r\n function isLocal() {\r\n return this.isValid() ? !this._isUTC : false;\r\n }\r\n\r\n function isUtcOffset() {\r\n return this.isValid() ? this._isUTC : false;\r\n }\r\n\r\n function isUtc() {\r\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\r\n }\r\n\r\n // ASP.NET json date format regex\r\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\r\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\r\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\r\n // and further modified to allow for strings containing both week and day\r\n isoRegex =\r\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\r\n\r\n function createDuration(input, key) {\r\n var duration = input,\r\n // matching against regexp is expensive, do it on demand\r\n match = null,\r\n sign,\r\n ret,\r\n diffRes;\r\n\r\n if (isDuration(input)) {\r\n duration = {\r\n ms: input._milliseconds,\r\n d: input._days,\r\n M: input._months,\r\n };\r\n } else if (isNumber(input) || !isNaN(+input)) {\r\n duration = {};\r\n if (key) {\r\n duration[key] = +input;\r\n } else {\r\n duration.milliseconds = +input;\r\n }\r\n } else if ((match = aspNetRegex.exec(input))) {\r\n sign = match[1] === '-' ? -1 : 1;\r\n duration = {\r\n y: 0,\r\n d: toInt(match[DATE]) * sign,\r\n h: toInt(match[HOUR]) * sign,\r\n m: toInt(match[MINUTE]) * sign,\r\n s: toInt(match[SECOND]) * sign,\r\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\r\n };\r\n } else if ((match = isoRegex.exec(input))) {\r\n sign = match[1] === '-' ? -1 : 1;\r\n duration = {\r\n y: parseIso(match[2], sign),\r\n M: parseIso(match[3], sign),\r\n w: parseIso(match[4], sign),\r\n d: parseIso(match[5], sign),\r\n h: parseIso(match[6], sign),\r\n m: parseIso(match[7], sign),\r\n s: parseIso(match[8], sign),\r\n };\r\n } else if (duration == null) {\r\n // checks for null or undefined\r\n duration = {};\r\n } else if (\r\n typeof duration === 'object' &&\r\n ('from' in duration || 'to' in duration)\r\n ) {\r\n diffRes = momentsDifference(\r\n createLocal(duration.from),\r\n createLocal(duration.to)\r\n );\r\n\r\n duration = {};\r\n duration.ms = diffRes.milliseconds;\r\n duration.M = diffRes.months;\r\n }\r\n\r\n ret = new Duration(duration);\r\n\r\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\r\n ret._locale = input._locale;\r\n }\r\n\r\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\r\n ret._isValid = input._isValid;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n createDuration.fn = Duration.prototype;\r\n createDuration.invalid = createInvalid$1;\r\n\r\n function parseIso(inp, sign) {\r\n // We'd normally use ~~inp for this, but unfortunately it also\r\n // converts floats to ints.\r\n // inp may be undefined, so careful calling replace on it.\r\n var res = inp && parseFloat(inp.replace(',', '.'));\r\n // apply sign while we're at it\r\n return (isNaN(res) ? 0 : res) * sign;\r\n }\r\n\r\n function positiveMomentsDifference(base, other) {\r\n var res = {};\r\n\r\n res.months =\r\n other.month() - base.month() + (other.year() - base.year()) * 12;\r\n if (base.clone().add(res.months, 'M').isAfter(other)) {\r\n --res.months;\r\n }\r\n\r\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\r\n\r\n return res;\r\n }\r\n\r\n function momentsDifference(base, other) {\r\n var res;\r\n if (!(base.isValid() && other.isValid())) {\r\n return { milliseconds: 0, months: 0 };\r\n }\r\n\r\n other = cloneWithOffset(other, base);\r\n if (base.isBefore(other)) {\r\n res = positiveMomentsDifference(base, other);\r\n } else {\r\n res = positiveMomentsDifference(other, base);\r\n res.milliseconds = -res.milliseconds;\r\n res.months = -res.months;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n // TODO: remove 'name' arg after deprecation is removed\r\n function createAdder(direction, name) {\r\n return function (val, period) {\r\n var dur, tmp;\r\n //invert the arguments, but complain about it\r\n if (period !== null && !isNaN(+period)) {\r\n deprecateSimple(\r\n name,\r\n 'moment().' +\r\n name +\r\n '(period, number) is deprecated. Please use moment().' +\r\n name +\r\n '(number, period). ' +\r\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\r\n );\r\n tmp = val;\r\n val = period;\r\n period = tmp;\r\n }\r\n\r\n dur = createDuration(val, period);\r\n addSubtract(this, dur, direction);\r\n return this;\r\n };\r\n }\r\n\r\n function addSubtract(mom, duration, isAdding, updateOffset) {\r\n var milliseconds = duration._milliseconds,\r\n days = absRound(duration._days),\r\n months = absRound(duration._months);\r\n\r\n if (!mom.isValid()) {\r\n // No op\r\n return;\r\n }\r\n\r\n updateOffset = updateOffset == null ? true : updateOffset;\r\n\r\n if (months) {\r\n setMonth(mom, get(mom, 'Month') + months * isAdding);\r\n }\r\n if (days) {\r\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\r\n }\r\n if (milliseconds) {\r\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\r\n }\r\n if (updateOffset) {\r\n hooks.updateOffset(mom, days || months);\r\n }\r\n }\r\n\r\n var add = createAdder(1, 'add'),\r\n subtract = createAdder(-1, 'subtract');\r\n\r\n function isString(input) {\r\n return typeof input === 'string' || input instanceof String;\r\n }\r\n\r\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\r\n function isMomentInput(input) {\r\n return (\r\n isMoment(input) ||\r\n isDate(input) ||\r\n isString(input) ||\r\n isNumber(input) ||\r\n isNumberOrStringArray(input) ||\r\n isMomentInputObject(input) ||\r\n input === null ||\r\n input === undefined\r\n );\r\n }\r\n\r\n function isMomentInputObject(input) {\r\n var objectTest = isObject(input) && !isObjectEmpty(input),\r\n propertyTest = false,\r\n properties = [\r\n 'years',\r\n 'year',\r\n 'y',\r\n 'months',\r\n 'month',\r\n 'M',\r\n 'days',\r\n 'day',\r\n 'd',\r\n 'dates',\r\n 'date',\r\n 'D',\r\n 'hours',\r\n 'hour',\r\n 'h',\r\n 'minutes',\r\n 'minute',\r\n 'm',\r\n 'seconds',\r\n 'second',\r\n 's',\r\n 'milliseconds',\r\n 'millisecond',\r\n 'ms',\r\n ],\r\n i,\r\n property,\r\n propertyLen = properties.length;\r\n\r\n for (i = 0; i < propertyLen; i += 1) {\r\n property = properties[i];\r\n propertyTest = propertyTest || hasOwnProp(input, property);\r\n }\r\n\r\n return objectTest && propertyTest;\r\n }\r\n\r\n function isNumberOrStringArray(input) {\r\n var arrayTest = isArray(input),\r\n dataTypeTest = false;\r\n if (arrayTest) {\r\n dataTypeTest =\r\n input.filter(function (item) {\r\n return !isNumber(item) && isString(input);\r\n }).length === 0;\r\n }\r\n return arrayTest && dataTypeTest;\r\n }\r\n\r\n function isCalendarSpec(input) {\r\n var objectTest = isObject(input) && !isObjectEmpty(input),\r\n propertyTest = false,\r\n properties = [\r\n 'sameDay',\r\n 'nextDay',\r\n 'lastDay',\r\n 'nextWeek',\r\n 'lastWeek',\r\n 'sameElse',\r\n ],\r\n i,\r\n property;\r\n\r\n for (i = 0; i < properties.length; i += 1) {\r\n property = properties[i];\r\n propertyTest = propertyTest || hasOwnProp(input, property);\r\n }\r\n\r\n return objectTest && propertyTest;\r\n }\r\n\r\n function getCalendarFormat(myMoment, now) {\r\n var diff = myMoment.diff(now, 'days', true);\r\n return diff < -6\r\n ? 'sameElse'\r\n : diff < -1\r\n ? 'lastWeek'\r\n : diff < 0\r\n ? 'lastDay'\r\n : diff < 1\r\n ? 'sameDay'\r\n : diff < 2\r\n ? 'nextDay'\r\n : diff < 7\r\n ? 'nextWeek'\r\n : 'sameElse';\r\n }\r\n\r\n function calendar$1(time, formats) {\r\n // Support for single parameter, formats only overload to the calendar function\r\n if (arguments.length === 1) {\r\n if (!arguments[0]) {\r\n time = undefined;\r\n formats = undefined;\r\n } else if (isMomentInput(arguments[0])) {\r\n time = arguments[0];\r\n formats = undefined;\r\n } else if (isCalendarSpec(arguments[0])) {\r\n formats = arguments[0];\r\n time = undefined;\r\n }\r\n }\r\n // We want to compare the start of today, vs this.\r\n // Getting start-of-today depends on whether we're local/utc/offset or not.\r\n var now = time || createLocal(),\r\n sod = cloneWithOffset(now, this).startOf('day'),\r\n format = hooks.calendarFormat(this, sod) || 'sameElse',\r\n output =\r\n formats &&\r\n (isFunction(formats[format])\r\n ? formats[format].call(this, now)\r\n : formats[format]);\r\n\r\n return this.format(\r\n output || this.localeData().calendar(format, this, createLocal(now))\r\n );\r\n }\r\n\r\n function clone() {\r\n return new Moment(this);\r\n }\r\n\r\n function isAfter(input, units) {\r\n var localInput = isMoment(input) ? input : createLocal(input);\r\n if (!(this.isValid() && localInput.isValid())) {\r\n return false;\r\n }\r\n units = normalizeUnits(units) || 'millisecond';\r\n if (units === 'millisecond') {\r\n return this.valueOf() > localInput.valueOf();\r\n } else {\r\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\r\n }\r\n }\r\n\r\n function isBefore(input, units) {\r\n var localInput = isMoment(input) ? input : createLocal(input);\r\n if (!(this.isValid() && localInput.isValid())) {\r\n return false;\r\n }\r\n units = normalizeUnits(units) || 'millisecond';\r\n if (units === 'millisecond') {\r\n return this.valueOf() < localInput.valueOf();\r\n } else {\r\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\r\n }\r\n }\r\n\r\n function isBetween(from, to, units, inclusivity) {\r\n var localFrom = isMoment(from) ? from : createLocal(from),\r\n localTo = isMoment(to) ? to : createLocal(to);\r\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\r\n return false;\r\n }\r\n inclusivity = inclusivity || '()';\r\n return (\r\n (inclusivity[0] === '('\r\n ? this.isAfter(localFrom, units)\r\n : !this.isBefore(localFrom, units)) &&\r\n (inclusivity[1] === ')'\r\n ? this.isBefore(localTo, units)\r\n : !this.isAfter(localTo, units))\r\n );\r\n }\r\n\r\n function isSame(input, units) {\r\n var localInput = isMoment(input) ? input : createLocal(input),\r\n inputMs;\r\n if (!(this.isValid() && localInput.isValid())) {\r\n return false;\r\n }\r\n units = normalizeUnits(units) || 'millisecond';\r\n if (units === 'millisecond') {\r\n return this.valueOf() === localInput.valueOf();\r\n } else {\r\n inputMs = localInput.valueOf();\r\n return (\r\n this.clone().startOf(units).valueOf() <= inputMs &&\r\n inputMs <= this.clone().endOf(units).valueOf()\r\n );\r\n }\r\n }\r\n\r\n function isSameOrAfter(input, units) {\r\n return this.isSame(input, units) || this.isAfter(input, units);\r\n }\r\n\r\n function isSameOrBefore(input, units) {\r\n return this.isSame(input, units) || this.isBefore(input, units);\r\n }\r\n\r\n function diff(input, units, asFloat) {\r\n var that, zoneDelta, output;\r\n\r\n if (!this.isValid()) {\r\n return NaN;\r\n }\r\n\r\n that = cloneWithOffset(input, this);\r\n\r\n if (!that.isValid()) {\r\n return NaN;\r\n }\r\n\r\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\r\n\r\n units = normalizeUnits(units);\r\n\r\n switch (units) {\r\n case 'year':\r\n output = monthDiff(this, that) / 12;\r\n break;\r\n case 'month':\r\n output = monthDiff(this, that);\r\n break;\r\n case 'quarter':\r\n output = monthDiff(this, that) / 3;\r\n break;\r\n case 'second':\r\n output = (this - that) / 1e3;\r\n break; // 1000\r\n case 'minute':\r\n output = (this - that) / 6e4;\r\n break; // 1000 * 60\r\n case 'hour':\r\n output = (this - that) / 36e5;\r\n break; // 1000 * 60 * 60\r\n case 'day':\r\n output = (this - that - zoneDelta) / 864e5;\r\n break; // 1000 * 60 * 60 * 24, negate dst\r\n case 'week':\r\n output = (this - that - zoneDelta) / 6048e5;\r\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\r\n default:\r\n output = this - that;\r\n }\r\n\r\n return asFloat ? output : absFloor(output);\r\n }\r\n\r\n function monthDiff(a, b) {\r\n if (a.date() < b.date()) {\r\n // end-of-month calculations work correct when the start month has more\r\n // days than the end month.\r\n return -monthDiff(b, a);\r\n }\r\n // difference in months\r\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\r\n // b is in (anchor - 1 month, anchor + 1 month)\r\n anchor = a.clone().add(wholeMonthDiff, 'months'),\r\n anchor2,\r\n adjust;\r\n\r\n if (b - anchor < 0) {\r\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\r\n // linear across the month\r\n adjust = (b - anchor) / (anchor - anchor2);\r\n } else {\r\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\r\n // linear across the month\r\n adjust = (b - anchor) / (anchor2 - anchor);\r\n }\r\n\r\n //check for negative zero, return zero if negative zero\r\n return -(wholeMonthDiff + adjust) || 0;\r\n }\r\n\r\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\r\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\r\n\r\n function toString() {\r\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\r\n }\r\n\r\n function toISOString(keepOffset) {\r\n if (!this.isValid()) {\r\n return null;\r\n }\r\n var utc = keepOffset !== true,\r\n m = utc ? this.clone().utc() : this;\r\n if (m.year() < 0 || m.year() > 9999) {\r\n return formatMoment(\r\n m,\r\n utc\r\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\r\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\r\n );\r\n }\r\n if (isFunction(Date.prototype.toISOString)) {\r\n // native implementation is ~50x faster, use it when we can\r\n if (utc) {\r\n return this.toDate().toISOString();\r\n } else {\r\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\r\n .toISOString()\r\n .replace('Z', formatMoment(m, 'Z'));\r\n }\r\n }\r\n return formatMoment(\r\n m,\r\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\r\n );\r\n }\r\n\r\n /**\r\n * Return a human readable representation of a moment that can\r\n * also be evaluated to get a new moment which is the same\r\n *\r\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\r\n */\r\n function inspect() {\r\n if (!this.isValid()) {\r\n return 'moment.invalid(/* ' + this._i + ' */)';\r\n }\r\n var func = 'moment',\r\n zone = '',\r\n prefix,\r\n year,\r\n datetime,\r\n suffix;\r\n if (!this.isLocal()) {\r\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\r\n zone = 'Z';\r\n }\r\n prefix = '[' + func + '(\"]';\r\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\r\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\r\n suffix = zone + '[\")]';\r\n\r\n return this.format(prefix + year + datetime + suffix);\r\n }\r\n\r\n function format(inputString) {\r\n if (!inputString) {\r\n inputString = this.isUtc()\r\n ? hooks.defaultFormatUtc\r\n : hooks.defaultFormat;\r\n }\r\n var output = formatMoment(this, inputString);\r\n return this.localeData().postformat(output);\r\n }\r\n\r\n function from(time, withoutSuffix) {\r\n if (\r\n this.isValid() &&\r\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\r\n ) {\r\n return createDuration({ to: this, from: time })\r\n .locale(this.locale())\r\n .humanize(!withoutSuffix);\r\n } else {\r\n return this.localeData().invalidDate();\r\n }\r\n }\r\n\r\n function fromNow(withoutSuffix) {\r\n return this.from(createLocal(), withoutSuffix);\r\n }\r\n\r\n function to(time, withoutSuffix) {\r\n if (\r\n this.isValid() &&\r\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\r\n ) {\r\n return createDuration({ from: this, to: time })\r\n .locale(this.locale())\r\n .humanize(!withoutSuffix);\r\n } else {\r\n return this.localeData().invalidDate();\r\n }\r\n }\r\n\r\n function toNow(withoutSuffix) {\r\n return this.to(createLocal(), withoutSuffix);\r\n }\r\n\r\n // If passed a locale key, it will set the locale for this\r\n // instance. Otherwise, it will return the locale configuration\r\n // variables for this instance.\r\n function locale(key) {\r\n var newLocaleData;\r\n\r\n if (key === undefined) {\r\n return this._locale._abbr;\r\n } else {\r\n newLocaleData = getLocale(key);\r\n if (newLocaleData != null) {\r\n this._locale = newLocaleData;\r\n }\r\n return this;\r\n }\r\n }\r\n\r\n var lang = deprecate(\r\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\r\n function (key) {\r\n if (key === undefined) {\r\n return this.localeData();\r\n } else {\r\n return this.locale(key);\r\n }\r\n }\r\n );\r\n\r\n function localeData() {\r\n return this._locale;\r\n }\r\n\r\n var MS_PER_SECOND = 1000,\r\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\r\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\r\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\r\n\r\n // actual modulo - handles negative numbers (for dates before 1970):\r\n function mod$1(dividend, divisor) {\r\n return ((dividend % divisor) + divisor) % divisor;\r\n }\r\n\r\n function localStartOfDate(y, m, d) {\r\n // the date constructor remaps years 0-99 to 1900-1999\r\n if (y < 100 && y >= 0) {\r\n // preserve leap years using a full 400 year cycle, then reset\r\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\r\n } else {\r\n return new Date(y, m, d).valueOf();\r\n }\r\n }\r\n\r\n function utcStartOfDate(y, m, d) {\r\n // Date.UTC remaps years 0-99 to 1900-1999\r\n if (y < 100 && y >= 0) {\r\n // preserve leap years using a full 400 year cycle, then reset\r\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\r\n } else {\r\n return Date.UTC(y, m, d);\r\n }\r\n }\r\n\r\n function startOf(units) {\r\n var time, startOfDate;\r\n units = normalizeUnits(units);\r\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\r\n return this;\r\n }\r\n\r\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\r\n\r\n switch (units) {\r\n case 'year':\r\n time = startOfDate(this.year(), 0, 1);\r\n break;\r\n case 'quarter':\r\n time = startOfDate(\r\n this.year(),\r\n this.month() - (this.month() % 3),\r\n 1\r\n );\r\n break;\r\n case 'month':\r\n time = startOfDate(this.year(), this.month(), 1);\r\n break;\r\n case 'week':\r\n time = startOfDate(\r\n this.year(),\r\n this.month(),\r\n this.date() - this.weekday()\r\n );\r\n break;\r\n case 'isoWeek':\r\n time = startOfDate(\r\n this.year(),\r\n this.month(),\r\n this.date() - (this.isoWeekday() - 1)\r\n );\r\n break;\r\n case 'day':\r\n case 'date':\r\n time = startOfDate(this.year(), this.month(), this.date());\r\n break;\r\n case 'hour':\r\n time = this._d.valueOf();\r\n time -= mod$1(\r\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\r\n MS_PER_HOUR\r\n );\r\n break;\r\n case 'minute':\r\n time = this._d.valueOf();\r\n time -= mod$1(time, MS_PER_MINUTE);\r\n break;\r\n case 'second':\r\n time = this._d.valueOf();\r\n time -= mod$1(time, MS_PER_SECOND);\r\n break;\r\n }\r\n\r\n this._d.setTime(time);\r\n hooks.updateOffset(this, true);\r\n return this;\r\n }\r\n\r\n function endOf(units) {\r\n var time, startOfDate;\r\n units = normalizeUnits(units);\r\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\r\n return this;\r\n }\r\n\r\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\r\n\r\n switch (units) {\r\n case 'year':\r\n time = startOfDate(this.year() + 1, 0, 1) - 1;\r\n break;\r\n case 'quarter':\r\n time =\r\n startOfDate(\r\n this.year(),\r\n this.month() - (this.month() % 3) + 3,\r\n 1\r\n ) - 1;\r\n break;\r\n case 'month':\r\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\r\n break;\r\n case 'week':\r\n time =\r\n startOfDate(\r\n this.year(),\r\n this.month(),\r\n this.date() - this.weekday() + 7\r\n ) - 1;\r\n break;\r\n case 'isoWeek':\r\n time =\r\n startOfDate(\r\n this.year(),\r\n this.month(),\r\n this.date() - (this.isoWeekday() - 1) + 7\r\n ) - 1;\r\n break;\r\n case 'day':\r\n case 'date':\r\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\r\n break;\r\n case 'hour':\r\n time = this._d.valueOf();\r\n time +=\r\n MS_PER_HOUR -\r\n mod$1(\r\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\r\n MS_PER_HOUR\r\n ) -\r\n 1;\r\n break;\r\n case 'minute':\r\n time = this._d.valueOf();\r\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\r\n break;\r\n case 'second':\r\n time = this._d.valueOf();\r\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\r\n break;\r\n }\r\n\r\n this._d.setTime(time);\r\n hooks.updateOffset(this, true);\r\n return this;\r\n }\r\n\r\n function valueOf() {\r\n return this._d.valueOf() - (this._offset || 0) * 60000;\r\n }\r\n\r\n function unix() {\r\n return Math.floor(this.valueOf() / 1000);\r\n }\r\n\r\n function toDate() {\r\n return new Date(this.valueOf());\r\n }\r\n\r\n function toArray() {\r\n var m = this;\r\n return [\r\n m.year(),\r\n m.month(),\r\n m.date(),\r\n m.hour(),\r\n m.minute(),\r\n m.second(),\r\n m.millisecond(),\r\n ];\r\n }\r\n\r\n function toObject() {\r\n var m = this;\r\n return {\r\n years: m.year(),\r\n months: m.month(),\r\n date: m.date(),\r\n hours: m.hours(),\r\n minutes: m.minutes(),\r\n seconds: m.seconds(),\r\n milliseconds: m.milliseconds(),\r\n };\r\n }\r\n\r\n function toJSON() {\r\n // new Date(NaN).toJSON() === null\r\n return this.isValid() ? this.toISOString() : null;\r\n }\r\n\r\n function isValid$2() {\r\n return isValid(this);\r\n }\r\n\r\n function parsingFlags() {\r\n return extend({}, getParsingFlags(this));\r\n }\r\n\r\n function invalidAt() {\r\n return getParsingFlags(this).overflow;\r\n }\r\n\r\n function creationData() {\r\n return {\r\n input: this._i,\r\n format: this._f,\r\n locale: this._locale,\r\n isUTC: this._isUTC,\r\n strict: this._strict,\r\n };\r\n }\r\n\r\n addFormatToken('N', 0, 0, 'eraAbbr');\r\n addFormatToken('NN', 0, 0, 'eraAbbr');\r\n addFormatToken('NNN', 0, 0, 'eraAbbr');\r\n addFormatToken('NNNN', 0, 0, 'eraName');\r\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\r\n\r\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\r\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\r\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\r\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\r\n\r\n addRegexToken('N', matchEraAbbr);\r\n addRegexToken('NN', matchEraAbbr);\r\n addRegexToken('NNN', matchEraAbbr);\r\n addRegexToken('NNNN', matchEraName);\r\n addRegexToken('NNNNN', matchEraNarrow);\r\n\r\n addParseToken(\r\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\r\n function (input, array, config, token) {\r\n var era = config._locale.erasParse(input, token, config._strict);\r\n if (era) {\r\n getParsingFlags(config).era = era;\r\n } else {\r\n getParsingFlags(config).invalidEra = input;\r\n }\r\n }\r\n );\r\n\r\n addRegexToken('y', matchUnsigned);\r\n addRegexToken('yy', matchUnsigned);\r\n addRegexToken('yyy', matchUnsigned);\r\n addRegexToken('yyyy', matchUnsigned);\r\n addRegexToken('yo', matchEraYearOrdinal);\r\n\r\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\r\n addParseToken(['yo'], function (input, array, config, token) {\r\n var match;\r\n if (config._locale._eraYearOrdinalRegex) {\r\n match = input.match(config._locale._eraYearOrdinalRegex);\r\n }\r\n\r\n if (config._locale.eraYearOrdinalParse) {\r\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\r\n } else {\r\n array[YEAR] = parseInt(input, 10);\r\n }\r\n });\r\n\r\n function localeEras(m, format) {\r\n var i,\r\n l,\r\n date,\r\n eras = this._eras || getLocale('en')._eras;\r\n for (i = 0, l = eras.length; i < l; ++i) {\r\n switch (typeof eras[i].since) {\r\n case 'string':\r\n // truncate time\r\n date = hooks(eras[i].since).startOf('day');\r\n eras[i].since = date.valueOf();\r\n break;\r\n }\r\n\r\n switch (typeof eras[i].until) {\r\n case 'undefined':\r\n eras[i].until = +Infinity;\r\n break;\r\n case 'string':\r\n // truncate time\r\n date = hooks(eras[i].until).startOf('day').valueOf();\r\n eras[i].until = date.valueOf();\r\n break;\r\n }\r\n }\r\n return eras;\r\n }\r\n\r\n function localeErasParse(eraName, format, strict) {\r\n var i,\r\n l,\r\n eras = this.eras(),\r\n name,\r\n abbr,\r\n narrow;\r\n eraName = eraName.toUpperCase();\r\n\r\n for (i = 0, l = eras.length; i < l; ++i) {\r\n name = eras[i].name.toUpperCase();\r\n abbr = eras[i].abbr.toUpperCase();\r\n narrow = eras[i].narrow.toUpperCase();\r\n\r\n if (strict) {\r\n switch (format) {\r\n case 'N':\r\n case 'NN':\r\n case 'NNN':\r\n if (abbr === eraName) {\r\n return eras[i];\r\n }\r\n break;\r\n\r\n case 'NNNN':\r\n if (name === eraName) {\r\n return eras[i];\r\n }\r\n break;\r\n\r\n case 'NNNNN':\r\n if (narrow === eraName) {\r\n return eras[i];\r\n }\r\n break;\r\n }\r\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\r\n return eras[i];\r\n }\r\n }\r\n }\r\n\r\n function localeErasConvertYear(era, year) {\r\n var dir = era.since <= era.until ? +1 : -1;\r\n if (year === undefined) {\r\n return hooks(era.since).year();\r\n } else {\r\n return hooks(era.since).year() + (year - era.offset) * dir;\r\n }\r\n }\r\n\r\n function getEraName() {\r\n var i,\r\n l,\r\n val,\r\n eras = this.localeData().eras();\r\n for (i = 0, l = eras.length; i < l; ++i) {\r\n // truncate time\r\n val = this.clone().startOf('day').valueOf();\r\n\r\n if (eras[i].since <= val && val <= eras[i].until) {\r\n return eras[i].name;\r\n }\r\n if (eras[i].until <= val && val <= eras[i].since) {\r\n return eras[i].name;\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n function getEraNarrow() {\r\n var i,\r\n l,\r\n val,\r\n eras = this.localeData().eras();\r\n for (i = 0, l = eras.length; i < l; ++i) {\r\n // truncate time\r\n val = this.clone().startOf('day').valueOf();\r\n\r\n if (eras[i].since <= val && val <= eras[i].until) {\r\n return eras[i].narrow;\r\n }\r\n if (eras[i].until <= val && val <= eras[i].since) {\r\n return eras[i].narrow;\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n function getEraAbbr() {\r\n var i,\r\n l,\r\n val,\r\n eras = this.localeData().eras();\r\n for (i = 0, l = eras.length; i < l; ++i) {\r\n // truncate time\r\n val = this.clone().startOf('day').valueOf();\r\n\r\n if (eras[i].since <= val && val <= eras[i].until) {\r\n return eras[i].abbr;\r\n }\r\n if (eras[i].until <= val && val <= eras[i].since) {\r\n return eras[i].abbr;\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n function getEraYear() {\r\n var i,\r\n l,\r\n dir,\r\n val,\r\n eras = this.localeData().eras();\r\n for (i = 0, l = eras.length; i < l; ++i) {\r\n dir = eras[i].since <= eras[i].until ? +1 : -1;\r\n\r\n // truncate time\r\n val = this.clone().startOf('day').valueOf();\r\n\r\n if (\r\n (eras[i].since <= val && val <= eras[i].until) ||\r\n (eras[i].until <= val && val <= eras[i].since)\r\n ) {\r\n return (\r\n (this.year() - hooks(eras[i].since).year()) * dir +\r\n eras[i].offset\r\n );\r\n }\r\n }\r\n\r\n return this.year();\r\n }\r\n\r\n function erasNameRegex(isStrict) {\r\n if (!hasOwnProp(this, '_erasNameRegex')) {\r\n computeErasParse.call(this);\r\n }\r\n return isStrict ? this._erasNameRegex : this._erasRegex;\r\n }\r\n\r\n function erasAbbrRegex(isStrict) {\r\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\r\n computeErasParse.call(this);\r\n }\r\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\r\n }\r\n\r\n function erasNarrowRegex(isStrict) {\r\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\r\n computeErasParse.call(this);\r\n }\r\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\r\n }\r\n\r\n function matchEraAbbr(isStrict, locale) {\r\n return locale.erasAbbrRegex(isStrict);\r\n }\r\n\r\n function matchEraName(isStrict, locale) {\r\n return locale.erasNameRegex(isStrict);\r\n }\r\n\r\n function matchEraNarrow(isStrict, locale) {\r\n return locale.erasNarrowRegex(isStrict);\r\n }\r\n\r\n function matchEraYearOrdinal(isStrict, locale) {\r\n return locale._eraYearOrdinalRegex || matchUnsigned;\r\n }\r\n\r\n function computeErasParse() {\r\n var abbrPieces = [],\r\n namePieces = [],\r\n narrowPieces = [],\r\n mixedPieces = [],\r\n i,\r\n l,\r\n eras = this.eras();\r\n\r\n for (i = 0, l = eras.length; i < l; ++i) {\r\n namePieces.push(regexEscape(eras[i].name));\r\n abbrPieces.push(regexEscape(eras[i].abbr));\r\n narrowPieces.push(regexEscape(eras[i].narrow));\r\n\r\n mixedPieces.push(regexEscape(eras[i].name));\r\n mixedPieces.push(regexEscape(eras[i].abbr));\r\n mixedPieces.push(regexEscape(eras[i].narrow));\r\n }\r\n\r\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\r\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\r\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\r\n this._erasNarrowRegex = new RegExp(\r\n '^(' + narrowPieces.join('|') + ')',\r\n 'i'\r\n );\r\n }\r\n\r\n // FORMATTING\r\n\r\n addFormatToken(0, ['gg', 2], 0, function () {\r\n return this.weekYear() % 100;\r\n });\r\n\r\n addFormatToken(0, ['GG', 2], 0, function () {\r\n return this.isoWeekYear() % 100;\r\n });\r\n\r\n function addWeekYearFormatToken(token, getter) {\r\n addFormatToken(0, [token, token.length], 0, getter);\r\n }\r\n\r\n addWeekYearFormatToken('gggg', 'weekYear');\r\n addWeekYearFormatToken('ggggg', 'weekYear');\r\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\r\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('weekYear', 'gg');\r\n addUnitAlias('isoWeekYear', 'GG');\r\n\r\n // PRIORITY\r\n\r\n addUnitPriority('weekYear', 1);\r\n addUnitPriority('isoWeekYear', 1);\r\n\r\n // PARSING\r\n\r\n addRegexToken('G', matchSigned);\r\n addRegexToken('g', matchSigned);\r\n addRegexToken('GG', match1to2, match2);\r\n addRegexToken('gg', match1to2, match2);\r\n addRegexToken('GGGG', match1to4, match4);\r\n addRegexToken('gggg', match1to4, match4);\r\n addRegexToken('GGGGG', match1to6, match6);\r\n addRegexToken('ggggg', match1to6, match6);\r\n\r\n addWeekParseToken(\r\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\r\n function (input, week, config, token) {\r\n week[token.substr(0, 2)] = toInt(input);\r\n }\r\n );\r\n\r\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\r\n week[token] = hooks.parseTwoDigitYear(input);\r\n });\r\n\r\n // MOMENTS\r\n\r\n function getSetWeekYear(input) {\r\n return getSetWeekYearHelper.call(\r\n this,\r\n input,\r\n this.week(),\r\n this.weekday(),\r\n this.localeData()._week.dow,\r\n this.localeData()._week.doy\r\n );\r\n }\r\n\r\n function getSetISOWeekYear(input) {\r\n return getSetWeekYearHelper.call(\r\n this,\r\n input,\r\n this.isoWeek(),\r\n this.isoWeekday(),\r\n 1,\r\n 4\r\n );\r\n }\r\n\r\n function getISOWeeksInYear() {\r\n return weeksInYear(this.year(), 1, 4);\r\n }\r\n\r\n function getISOWeeksInISOWeekYear() {\r\n return weeksInYear(this.isoWeekYear(), 1, 4);\r\n }\r\n\r\n function getWeeksInYear() {\r\n var weekInfo = this.localeData()._week;\r\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\r\n }\r\n\r\n function getWeeksInWeekYear() {\r\n var weekInfo = this.localeData()._week;\r\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\r\n }\r\n\r\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\r\n var weeksTarget;\r\n if (input == null) {\r\n return weekOfYear(this, dow, doy).year;\r\n } else {\r\n weeksTarget = weeksInYear(input, dow, doy);\r\n if (week > weeksTarget) {\r\n week = weeksTarget;\r\n }\r\n return setWeekAll.call(this, input, week, weekday, dow, doy);\r\n }\r\n }\r\n\r\n function setWeekAll(weekYear, week, weekday, dow, doy) {\r\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\r\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\r\n\r\n this.year(date.getUTCFullYear());\r\n this.month(date.getUTCMonth());\r\n this.date(date.getUTCDate());\r\n return this;\r\n }\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('Q', 0, 'Qo', 'quarter');\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('quarter', 'Q');\r\n\r\n // PRIORITY\r\n\r\n addUnitPriority('quarter', 7);\r\n\r\n // PARSING\r\n\r\n addRegexToken('Q', match1);\r\n addParseToken('Q', function (input, array) {\r\n array[MONTH] = (toInt(input) - 1) * 3;\r\n });\r\n\r\n // MOMENTS\r\n\r\n function getSetQuarter(input) {\r\n return input == null\r\n ? Math.ceil((this.month() + 1) / 3)\r\n : this.month((input - 1) * 3 + (this.month() % 3));\r\n }\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('D', ['DD', 2], 'Do', 'date');\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('date', 'D');\r\n\r\n // PRIORITY\r\n addUnitPriority('date', 9);\r\n\r\n // PARSING\r\n\r\n addRegexToken('D', match1to2);\r\n addRegexToken('DD', match1to2, match2);\r\n addRegexToken('Do', function (isStrict, locale) {\r\n // TODO: Remove \"ordinalParse\" fallback in next major release.\r\n return isStrict\r\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\r\n : locale._dayOfMonthOrdinalParseLenient;\r\n });\r\n\r\n addParseToken(['D', 'DD'], DATE);\r\n addParseToken('Do', function (input, array) {\r\n array[DATE] = toInt(input.match(match1to2)[0]);\r\n });\r\n\r\n // MOMENTS\r\n\r\n var getSetDayOfMonth = makeGetSet('Date', true);\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('dayOfYear', 'DDD');\r\n\r\n // PRIORITY\r\n addUnitPriority('dayOfYear', 4);\r\n\r\n // PARSING\r\n\r\n addRegexToken('DDD', match1to3);\r\n addRegexToken('DDDD', match3);\r\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\r\n config._dayOfYear = toInt(input);\r\n });\r\n\r\n // HELPERS\r\n\r\n // MOMENTS\r\n\r\n function getSetDayOfYear(input) {\r\n var dayOfYear =\r\n Math.round(\r\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\r\n ) + 1;\r\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\r\n }\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('m', ['mm', 2], 0, 'minute');\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('minute', 'm');\r\n\r\n // PRIORITY\r\n\r\n addUnitPriority('minute', 14);\r\n\r\n // PARSING\r\n\r\n addRegexToken('m', match1to2);\r\n addRegexToken('mm', match1to2, match2);\r\n addParseToken(['m', 'mm'], MINUTE);\r\n\r\n // MOMENTS\r\n\r\n var getSetMinute = makeGetSet('Minutes', false);\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('s', ['ss', 2], 0, 'second');\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('second', 's');\r\n\r\n // PRIORITY\r\n\r\n addUnitPriority('second', 15);\r\n\r\n // PARSING\r\n\r\n addRegexToken('s', match1to2);\r\n addRegexToken('ss', match1to2, match2);\r\n addParseToken(['s', 'ss'], SECOND);\r\n\r\n // MOMENTS\r\n\r\n var getSetSecond = makeGetSet('Seconds', false);\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('S', 0, 0, function () {\r\n return ~~(this.millisecond() / 100);\r\n });\r\n\r\n addFormatToken(0, ['SS', 2], 0, function () {\r\n return ~~(this.millisecond() / 10);\r\n });\r\n\r\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\r\n addFormatToken(0, ['SSSS', 4], 0, function () {\r\n return this.millisecond() * 10;\r\n });\r\n addFormatToken(0, ['SSSSS', 5], 0, function () {\r\n return this.millisecond() * 100;\r\n });\r\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\r\n return this.millisecond() * 1000;\r\n });\r\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\r\n return this.millisecond() * 10000;\r\n });\r\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\r\n return this.millisecond() * 100000;\r\n });\r\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\r\n return this.millisecond() * 1000000;\r\n });\r\n\r\n // ALIASES\r\n\r\n addUnitAlias('millisecond', 'ms');\r\n\r\n // PRIORITY\r\n\r\n addUnitPriority('millisecond', 16);\r\n\r\n // PARSING\r\n\r\n addRegexToken('S', match1to3, match1);\r\n addRegexToken('SS', match1to3, match2);\r\n addRegexToken('SSS', match1to3, match3);\r\n\r\n var token, getSetMillisecond;\r\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\r\n addRegexToken(token, matchUnsigned);\r\n }\r\n\r\n function parseMs(input, array) {\r\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\r\n }\r\n\r\n for (token = 'S'; token.length <= 9; token += 'S') {\r\n addParseToken(token, parseMs);\r\n }\r\n\r\n getSetMillisecond = makeGetSet('Milliseconds', false);\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('z', 0, 0, 'zoneAbbr');\r\n addFormatToken('zz', 0, 0, 'zoneName');\r\n\r\n // MOMENTS\r\n\r\n function getZoneAbbr() {\r\n return this._isUTC ? 'UTC' : '';\r\n }\r\n\r\n function getZoneName() {\r\n return this._isUTC ? 'Coordinated Universal Time' : '';\r\n }\r\n\r\n var proto = Moment.prototype;\r\n\r\n proto.add = add;\r\n proto.calendar = calendar$1;\r\n proto.clone = clone;\r\n proto.diff = diff;\r\n proto.endOf = endOf;\r\n proto.format = format;\r\n proto.from = from;\r\n proto.fromNow = fromNow;\r\n proto.to = to;\r\n proto.toNow = toNow;\r\n proto.get = stringGet;\r\n proto.invalidAt = invalidAt;\r\n proto.isAfter = isAfter;\r\n proto.isBefore = isBefore;\r\n proto.isBetween = isBetween;\r\n proto.isSame = isSame;\r\n proto.isSameOrAfter = isSameOrAfter;\r\n proto.isSameOrBefore = isSameOrBefore;\r\n proto.isValid = isValid$2;\r\n proto.lang = lang;\r\n proto.locale = locale;\r\n proto.localeData = localeData;\r\n proto.max = prototypeMax;\r\n proto.min = prototypeMin;\r\n proto.parsingFlags = parsingFlags;\r\n proto.set = stringSet;\r\n proto.startOf = startOf;\r\n proto.subtract = subtract;\r\n proto.toArray = toArray;\r\n proto.toObject = toObject;\r\n proto.toDate = toDate;\r\n proto.toISOString = toISOString;\r\n proto.inspect = inspect;\r\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\r\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\r\n return 'Moment<' + this.format() + '>';\r\n };\r\n }\r\n proto.toJSON = toJSON;\r\n proto.toString = toString;\r\n proto.unix = unix;\r\n proto.valueOf = valueOf;\r\n proto.creationData = creationData;\r\n proto.eraName = getEraName;\r\n proto.eraNarrow = getEraNarrow;\r\n proto.eraAbbr = getEraAbbr;\r\n proto.eraYear = getEraYear;\r\n proto.year = getSetYear;\r\n proto.isLeapYear = getIsLeapYear;\r\n proto.weekYear = getSetWeekYear;\r\n proto.isoWeekYear = getSetISOWeekYear;\r\n proto.quarter = proto.quarters = getSetQuarter;\r\n proto.month = getSetMonth;\r\n proto.daysInMonth = getDaysInMonth;\r\n proto.week = proto.weeks = getSetWeek;\r\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\r\n proto.weeksInYear = getWeeksInYear;\r\n proto.weeksInWeekYear = getWeeksInWeekYear;\r\n proto.isoWeeksInYear = getISOWeeksInYear;\r\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\r\n proto.date = getSetDayOfMonth;\r\n proto.day = proto.days = getSetDayOfWeek;\r\n proto.weekday = getSetLocaleDayOfWeek;\r\n proto.isoWeekday = getSetISODayOfWeek;\r\n proto.dayOfYear = getSetDayOfYear;\r\n proto.hour = proto.hours = getSetHour;\r\n proto.minute = proto.minutes = getSetMinute;\r\n proto.second = proto.seconds = getSetSecond;\r\n proto.millisecond = proto.milliseconds = getSetMillisecond;\r\n proto.utcOffset = getSetOffset;\r\n proto.utc = setOffsetToUTC;\r\n proto.local = setOffsetToLocal;\r\n proto.parseZone = setOffsetToParsedOffset;\r\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\r\n proto.isDST = isDaylightSavingTime;\r\n proto.isLocal = isLocal;\r\n proto.isUtcOffset = isUtcOffset;\r\n proto.isUtc = isUtc;\r\n proto.isUTC = isUtc;\r\n proto.zoneAbbr = getZoneAbbr;\r\n proto.zoneName = getZoneName;\r\n proto.dates = deprecate(\r\n 'dates accessor is deprecated. Use date instead.',\r\n getSetDayOfMonth\r\n );\r\n proto.months = deprecate(\r\n 'months accessor is deprecated. Use month instead',\r\n getSetMonth\r\n );\r\n proto.years = deprecate(\r\n 'years accessor is deprecated. Use year instead',\r\n getSetYear\r\n );\r\n proto.zone = deprecate(\r\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\r\n getSetZone\r\n );\r\n proto.isDSTShifted = deprecate(\r\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\r\n isDaylightSavingTimeShifted\r\n );\r\n\r\n function createUnix(input) {\r\n return createLocal(input * 1000);\r\n }\r\n\r\n function createInZone() {\r\n return createLocal.apply(null, arguments).parseZone();\r\n }\r\n\r\n function preParsePostFormat(string) {\r\n return string;\r\n }\r\n\r\n var proto$1 = Locale.prototype;\r\n\r\n proto$1.calendar = calendar;\r\n proto$1.longDateFormat = longDateFormat;\r\n proto$1.invalidDate = invalidDate;\r\n proto$1.ordinal = ordinal;\r\n proto$1.preparse = preParsePostFormat;\r\n proto$1.postformat = preParsePostFormat;\r\n proto$1.relativeTime = relativeTime;\r\n proto$1.pastFuture = pastFuture;\r\n proto$1.set = set;\r\n proto$1.eras = localeEras;\r\n proto$1.erasParse = localeErasParse;\r\n proto$1.erasConvertYear = localeErasConvertYear;\r\n proto$1.erasAbbrRegex = erasAbbrRegex;\r\n proto$1.erasNameRegex = erasNameRegex;\r\n proto$1.erasNarrowRegex = erasNarrowRegex;\r\n\r\n proto$1.months = localeMonths;\r\n proto$1.monthsShort = localeMonthsShort;\r\n proto$1.monthsParse = localeMonthsParse;\r\n proto$1.monthsRegex = monthsRegex;\r\n proto$1.monthsShortRegex = monthsShortRegex;\r\n proto$1.week = localeWeek;\r\n proto$1.firstDayOfYear = localeFirstDayOfYear;\r\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\r\n\r\n proto$1.weekdays = localeWeekdays;\r\n proto$1.weekdaysMin = localeWeekdaysMin;\r\n proto$1.weekdaysShort = localeWeekdaysShort;\r\n proto$1.weekdaysParse = localeWeekdaysParse;\r\n\r\n proto$1.weekdaysRegex = weekdaysRegex;\r\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\r\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\r\n\r\n proto$1.isPM = localeIsPM;\r\n proto$1.meridiem = localeMeridiem;\r\n\r\n function get$1(format, index, field, setter) {\r\n var locale = getLocale(),\r\n utc = createUTC().set(setter, index);\r\n return locale[field](utc, format);\r\n }\r\n\r\n function listMonthsImpl(format, index, field) {\r\n if (isNumber(format)) {\r\n index = format;\r\n format = undefined;\r\n }\r\n\r\n format = format || '';\r\n\r\n if (index != null) {\r\n return get$1(format, index, field, 'month');\r\n }\r\n\r\n var i,\r\n out = [];\r\n for (i = 0; i < 12; i++) {\r\n out[i] = get$1(format, i, field, 'month');\r\n }\r\n return out;\r\n }\r\n\r\n // ()\r\n // (5)\r\n // (fmt, 5)\r\n // (fmt)\r\n // (true)\r\n // (true, 5)\r\n // (true, fmt, 5)\r\n // (true, fmt)\r\n function listWeekdaysImpl(localeSorted, format, index, field) {\r\n if (typeof localeSorted === 'boolean') {\r\n if (isNumber(format)) {\r\n index = format;\r\n format = undefined;\r\n }\r\n\r\n format = format || '';\r\n } else {\r\n format = localeSorted;\r\n index = format;\r\n localeSorted = false;\r\n\r\n if (isNumber(format)) {\r\n index = format;\r\n format = undefined;\r\n }\r\n\r\n format = format || '';\r\n }\r\n\r\n var locale = getLocale(),\r\n shift = localeSorted ? locale._week.dow : 0,\r\n i,\r\n out = [];\r\n\r\n if (index != null) {\r\n return get$1(format, (index + shift) % 7, field, 'day');\r\n }\r\n\r\n for (i = 0; i < 7; i++) {\r\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\r\n }\r\n return out;\r\n }\r\n\r\n function listMonths(format, index) {\r\n return listMonthsImpl(format, index, 'months');\r\n }\r\n\r\n function listMonthsShort(format, index) {\r\n return listMonthsImpl(format, index, 'monthsShort');\r\n }\r\n\r\n function listWeekdays(localeSorted, format, index) {\r\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\r\n }\r\n\r\n function listWeekdaysShort(localeSorted, format, index) {\r\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\r\n }\r\n\r\n function listWeekdaysMin(localeSorted, format, index) {\r\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\r\n }\r\n\r\n getSetGlobalLocale('en', {\r\n eras: [\r\n {\r\n since: '0001-01-01',\r\n until: +Infinity,\r\n offset: 1,\r\n name: 'Anno Domini',\r\n narrow: 'AD',\r\n abbr: 'AD',\r\n },\r\n {\r\n since: '0000-12-31',\r\n until: -Infinity,\r\n offset: 1,\r\n name: 'Before Christ',\r\n narrow: 'BC',\r\n abbr: 'BC',\r\n },\r\n ],\r\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\r\n ordinal: function (number) {\r\n var b = number % 10,\r\n output =\r\n toInt((number % 100) / 10) === 1\r\n ? 'th'\r\n : b === 1\r\n ? 'st'\r\n : b === 2\r\n ? 'nd'\r\n : b === 3\r\n ? 'rd'\r\n : 'th';\r\n return number + output;\r\n },\r\n });\r\n\r\n // Side effect imports\r\n\r\n hooks.lang = deprecate(\r\n 'moment.lang is deprecated. Use moment.locale instead.',\r\n getSetGlobalLocale\r\n );\r\n hooks.langData = deprecate(\r\n 'moment.langData is deprecated. Use moment.localeData instead.',\r\n getLocale\r\n );\r\n\r\n var mathAbs = Math.abs;\r\n\r\n function abs() {\r\n var data = this._data;\r\n\r\n this._milliseconds = mathAbs(this._milliseconds);\r\n this._days = mathAbs(this._days);\r\n this._months = mathAbs(this._months);\r\n\r\n data.milliseconds = mathAbs(data.milliseconds);\r\n data.seconds = mathAbs(data.seconds);\r\n data.minutes = mathAbs(data.minutes);\r\n data.hours = mathAbs(data.hours);\r\n data.months = mathAbs(data.months);\r\n data.years = mathAbs(data.years);\r\n\r\n return this;\r\n }\r\n\r\n function addSubtract$1(duration, input, value, direction) {\r\n var other = createDuration(input, value);\r\n\r\n duration._milliseconds += direction * other._milliseconds;\r\n duration._days += direction * other._days;\r\n duration._months += direction * other._months;\r\n\r\n return duration._bubble();\r\n }\r\n\r\n // supports only 2.0-style add(1, 's') or add(duration)\r\n function add$1(input, value) {\r\n return addSubtract$1(this, input, value, 1);\r\n }\r\n\r\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\r\n function subtract$1(input, value) {\r\n return addSubtract$1(this, input, value, -1);\r\n }\r\n\r\n function absCeil(number) {\r\n if (number < 0) {\r\n return Math.floor(number);\r\n } else {\r\n return Math.ceil(number);\r\n }\r\n }\r\n\r\n function bubble() {\r\n var milliseconds = this._milliseconds,\r\n days = this._days,\r\n months = this._months,\r\n data = this._data,\r\n seconds,\r\n minutes,\r\n hours,\r\n years,\r\n monthsFromDays;\r\n\r\n // if we have a mix of positive and negative values, bubble down first\r\n // check: https://github.com/moment/moment/issues/2166\r\n if (\r\n !(\r\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\r\n (milliseconds <= 0 && days <= 0 && months <= 0)\r\n )\r\n ) {\r\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\r\n days = 0;\r\n months = 0;\r\n }\r\n\r\n // The following code bubbles up values, see the tests for\r\n // examples of what that means.\r\n data.milliseconds = milliseconds % 1000;\r\n\r\n seconds = absFloor(milliseconds / 1000);\r\n data.seconds = seconds % 60;\r\n\r\n minutes = absFloor(seconds / 60);\r\n data.minutes = minutes % 60;\r\n\r\n hours = absFloor(minutes / 60);\r\n data.hours = hours % 24;\r\n\r\n days += absFloor(hours / 24);\r\n\r\n // convert days to months\r\n monthsFromDays = absFloor(daysToMonths(days));\r\n months += monthsFromDays;\r\n days -= absCeil(monthsToDays(monthsFromDays));\r\n\r\n // 12 months -> 1 year\r\n years = absFloor(months / 12);\r\n months %= 12;\r\n\r\n data.days = days;\r\n data.months = months;\r\n data.years = years;\r\n\r\n return this;\r\n }\r\n\r\n function daysToMonths(days) {\r\n // 400 years have 146097 days (taking into account leap year rules)\r\n // 400 years have 12 months === 4800\r\n return (days * 4800) / 146097;\r\n }\r\n\r\n function monthsToDays(months) {\r\n // the reverse of daysToMonths\r\n return (months * 146097) / 4800;\r\n }\r\n\r\n function as(units) {\r\n if (!this.isValid()) {\r\n return NaN;\r\n }\r\n var days,\r\n months,\r\n milliseconds = this._milliseconds;\r\n\r\n units = normalizeUnits(units);\r\n\r\n if (units === 'month' || units === 'quarter' || units === 'year') {\r\n days = this._days + milliseconds / 864e5;\r\n months = this._months + daysToMonths(days);\r\n switch (units) {\r\n case 'month':\r\n return months;\r\n case 'quarter':\r\n return months / 3;\r\n case 'year':\r\n return months / 12;\r\n }\r\n } else {\r\n // handle milliseconds separately because of floating point math errors (issue #1867)\r\n days = this._days + Math.round(monthsToDays(this._months));\r\n switch (units) {\r\n case 'week':\r\n return days / 7 + milliseconds / 6048e5;\r\n case 'day':\r\n return days + milliseconds / 864e5;\r\n case 'hour':\r\n return days * 24 + milliseconds / 36e5;\r\n case 'minute':\r\n return days * 1440 + milliseconds / 6e4;\r\n case 'second':\r\n return days * 86400 + milliseconds / 1000;\r\n // Math.floor prevents floating point math errors here\r\n case 'millisecond':\r\n return Math.floor(days * 864e5) + milliseconds;\r\n default:\r\n throw new Error('Unknown unit ' + units);\r\n }\r\n }\r\n }\r\n\r\n // TODO: Use this.as('ms')?\r\n function valueOf$1() {\r\n if (!this.isValid()) {\r\n return NaN;\r\n }\r\n return (\r\n this._milliseconds +\r\n this._days * 864e5 +\r\n (this._months % 12) * 2592e6 +\r\n toInt(this._months / 12) * 31536e6\r\n );\r\n }\r\n\r\n function makeAs(alias) {\r\n return function () {\r\n return this.as(alias);\r\n };\r\n }\r\n\r\n var asMilliseconds = makeAs('ms'),\r\n asSeconds = makeAs('s'),\r\n asMinutes = makeAs('m'),\r\n asHours = makeAs('h'),\r\n asDays = makeAs('d'),\r\n asWeeks = makeAs('w'),\r\n asMonths = makeAs('M'),\r\n asQuarters = makeAs('Q'),\r\n asYears = makeAs('y');\r\n\r\n function clone$1() {\r\n return createDuration(this);\r\n }\r\n\r\n function get$2(units) {\r\n units = normalizeUnits(units);\r\n return this.isValid() ? this[units + 's']() : NaN;\r\n }\r\n\r\n function makeGetter(name) {\r\n return function () {\r\n return this.isValid() ? this._data[name] : NaN;\r\n };\r\n }\r\n\r\n var milliseconds = makeGetter('milliseconds'),\r\n seconds = makeGetter('seconds'),\r\n minutes = makeGetter('minutes'),\r\n hours = makeGetter('hours'),\r\n days = makeGetter('days'),\r\n months = makeGetter('months'),\r\n years = makeGetter('years');\r\n\r\n function weeks() {\r\n return absFloor(this.days() / 7);\r\n }\r\n\r\n var round = Math.round,\r\n thresholds = {\r\n ss: 44, // a few seconds to seconds\r\n s: 45, // seconds to minute\r\n m: 45, // minutes to hour\r\n h: 22, // hours to day\r\n d: 26, // days to month/week\r\n w: null, // weeks to month\r\n M: 11, // months to year\r\n };\r\n\r\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\r\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\r\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\r\n }\r\n\r\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\r\n var duration = createDuration(posNegDuration).abs(),\r\n seconds = round(duration.as('s')),\r\n minutes = round(duration.as('m')),\r\n hours = round(duration.as('h')),\r\n days = round(duration.as('d')),\r\n months = round(duration.as('M')),\r\n weeks = round(duration.as('w')),\r\n years = round(duration.as('y')),\r\n a =\r\n (seconds <= thresholds.ss && ['s', seconds]) ||\r\n (seconds < thresholds.s && ['ss', seconds]) ||\r\n (minutes <= 1 && ['m']) ||\r\n (minutes < thresholds.m && ['mm', minutes]) ||\r\n (hours <= 1 && ['h']) ||\r\n (hours < thresholds.h && ['hh', hours]) ||\r\n (days <= 1 && ['d']) ||\r\n (days < thresholds.d && ['dd', days]);\r\n\r\n if (thresholds.w != null) {\r\n a =\r\n a ||\r\n (weeks <= 1 && ['w']) ||\r\n (weeks < thresholds.w && ['ww', weeks]);\r\n }\r\n a = a ||\r\n (months <= 1 && ['M']) ||\r\n (months < thresholds.M && ['MM', months]) ||\r\n (years <= 1 && ['y']) || ['yy', years];\r\n\r\n a[2] = withoutSuffix;\r\n a[3] = +posNegDuration > 0;\r\n a[4] = locale;\r\n return substituteTimeAgo.apply(null, a);\r\n }\r\n\r\n // This function allows you to set the rounding function for relative time strings\r\n function getSetRelativeTimeRounding(roundingFunction) {\r\n if (roundingFunction === undefined) {\r\n return round;\r\n }\r\n if (typeof roundingFunction === 'function') {\r\n round = roundingFunction;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // This function allows you to set a threshold for relative time strings\r\n function getSetRelativeTimeThreshold(threshold, limit) {\r\n if (thresholds[threshold] === undefined) {\r\n return false;\r\n }\r\n if (limit === undefined) {\r\n return thresholds[threshold];\r\n }\r\n thresholds[threshold] = limit;\r\n if (threshold === 's') {\r\n thresholds.ss = limit - 1;\r\n }\r\n return true;\r\n }\r\n\r\n function humanize(argWithSuffix, argThresholds) {\r\n if (!this.isValid()) {\r\n return this.localeData().invalidDate();\r\n }\r\n\r\n var withSuffix = false,\r\n th = thresholds,\r\n locale,\r\n output;\r\n\r\n if (typeof argWithSuffix === 'object') {\r\n argThresholds = argWithSuffix;\r\n argWithSuffix = false;\r\n }\r\n if (typeof argWithSuffix === 'boolean') {\r\n withSuffix = argWithSuffix;\r\n }\r\n if (typeof argThresholds === 'object') {\r\n th = Object.assign({}, thresholds, argThresholds);\r\n if (argThresholds.s != null && argThresholds.ss == null) {\r\n th.ss = argThresholds.s - 1;\r\n }\r\n }\r\n\r\n locale = this.localeData();\r\n output = relativeTime$1(this, !withSuffix, th, locale);\r\n\r\n if (withSuffix) {\r\n output = locale.pastFuture(+this, output);\r\n }\r\n\r\n return locale.postformat(output);\r\n }\r\n\r\n var abs$1 = Math.abs;\r\n\r\n function sign(x) {\r\n return (x > 0) - (x < 0) || +x;\r\n }\r\n\r\n function toISOString$1() {\r\n // for ISO strings we do not use the normal bubbling rules:\r\n // * milliseconds bubble up until they become hours\r\n // * days do not bubble at all\r\n // * months bubble up until they become years\r\n // This is because there is no context-free conversion between hours and days\r\n // (think of clock changes)\r\n // and also not between days and months (28-31 days per month)\r\n if (!this.isValid()) {\r\n return this.localeData().invalidDate();\r\n }\r\n\r\n var seconds = abs$1(this._milliseconds) / 1000,\r\n days = abs$1(this._days),\r\n months = abs$1(this._months),\r\n minutes,\r\n hours,\r\n years,\r\n s,\r\n total = this.asSeconds(),\r\n totalSign,\r\n ymSign,\r\n daysSign,\r\n hmsSign;\r\n\r\n if (!total) {\r\n // this is the same as C#'s (Noda) and python (isodate)...\r\n // but not other JS (goog.date)\r\n return 'P0D';\r\n }\r\n\r\n // 3600 seconds -> 60 minutes -> 1 hour\r\n minutes = absFloor(seconds / 60);\r\n hours = absFloor(minutes / 60);\r\n seconds %= 60;\r\n minutes %= 60;\r\n\r\n // 12 months -> 1 year\r\n years = absFloor(months / 12);\r\n months %= 12;\r\n\r\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\r\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\r\n\r\n totalSign = total < 0 ? '-' : '';\r\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\r\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\r\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\r\n\r\n return (\r\n totalSign +\r\n 'P' +\r\n (years ? ymSign + years + 'Y' : '') +\r\n (months ? ymSign + months + 'M' : '') +\r\n (days ? daysSign + days + 'D' : '') +\r\n (hours || minutes || seconds ? 'T' : '') +\r\n (hours ? hmsSign + hours + 'H' : '') +\r\n (minutes ? hmsSign + minutes + 'M' : '') +\r\n (seconds ? hmsSign + s + 'S' : '')\r\n );\r\n }\r\n\r\n var proto$2 = Duration.prototype;\r\n\r\n proto$2.isValid = isValid$1;\r\n proto$2.abs = abs;\r\n proto$2.add = add$1;\r\n proto$2.subtract = subtract$1;\r\n proto$2.as = as;\r\n proto$2.asMilliseconds = asMilliseconds;\r\n proto$2.asSeconds = asSeconds;\r\n proto$2.asMinutes = asMinutes;\r\n proto$2.asHours = asHours;\r\n proto$2.asDays = asDays;\r\n proto$2.asWeeks = asWeeks;\r\n proto$2.asMonths = asMonths;\r\n proto$2.asQuarters = asQuarters;\r\n proto$2.asYears = asYears;\r\n proto$2.valueOf = valueOf$1;\r\n proto$2._bubble = bubble;\r\n proto$2.clone = clone$1;\r\n proto$2.get = get$2;\r\n proto$2.milliseconds = milliseconds;\r\n proto$2.seconds = seconds;\r\n proto$2.minutes = minutes;\r\n proto$2.hours = hours;\r\n proto$2.days = days;\r\n proto$2.weeks = weeks;\r\n proto$2.months = months;\r\n proto$2.years = years;\r\n proto$2.humanize = humanize;\r\n proto$2.toISOString = toISOString$1;\r\n proto$2.toString = toISOString$1;\r\n proto$2.toJSON = toISOString$1;\r\n proto$2.locale = locale;\r\n proto$2.localeData = localeData;\r\n\r\n proto$2.toIsoString = deprecate(\r\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\r\n toISOString$1\r\n );\r\n proto$2.lang = lang;\r\n\r\n // FORMATTING\r\n\r\n addFormatToken('X', 0, 0, 'unix');\r\n addFormatToken('x', 0, 0, 'valueOf');\r\n\r\n // PARSING\r\n\r\n addRegexToken('x', matchSigned);\r\n addRegexToken('X', matchTimestamp);\r\n addParseToken('X', function (input, array, config) {\r\n config._d = new Date(parseFloat(input) * 1000);\r\n });\r\n addParseToken('x', function (input, array, config) {\r\n config._d = new Date(toInt(input));\r\n });\r\n\r\n //! moment.js\r\n\r\n hooks.version = '2.29.3';\r\n\r\n setHookCallback(createLocal);\r\n\r\n hooks.fn = proto;\r\n hooks.min = min;\r\n hooks.max = max;\r\n hooks.now = now;\r\n hooks.utc = createUTC;\r\n hooks.unix = createUnix;\r\n hooks.months = listMonths;\r\n hooks.isDate = isDate;\r\n hooks.locale = getSetGlobalLocale;\r\n hooks.invalid = createInvalid;\r\n hooks.duration = createDuration;\r\n hooks.isMoment = isMoment;\r\n hooks.weekdays = listWeekdays;\r\n hooks.parseZone = createInZone;\r\n hooks.localeData = getLocale;\r\n hooks.isDuration = isDuration;\r\n hooks.monthsShort = listMonthsShort;\r\n hooks.weekdaysMin = listWeekdaysMin;\r\n hooks.defineLocale = defineLocale;\r\n hooks.updateLocale = updateLocale;\r\n hooks.locales = listLocales;\r\n hooks.weekdaysShort = listWeekdaysShort;\r\n hooks.normalizeUnits = normalizeUnits;\r\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\r\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\r\n hooks.calendarFormat = getCalendarFormat;\r\n hooks.prototype = proto;\r\n\r\n // currently HTML5 input type only supports 24-hour formats\r\n hooks.HTML5_FMT = {\r\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \r\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \r\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \r\n DATE: 'YYYY-MM-DD', // \r\n TIME: 'HH:mm', // \r\n TIME_SECONDS: 'HH:mm:ss', // \r\n TIME_MS: 'HH:mm:ss.SSS', // \r\n WEEK: 'GGGG-[W]WW', // \r\n MONTH: 'YYYY-MM', // \r\n };\r\n\r\n return hooks;\r\n\r\n})));"],"mappings":"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","ignoreList":[]}