PageSourceSearch

https://freseniusmedicalcare.com/etc.clientlibs/clientlibs/granite/moment.js

js freseniusmedicalcare.com collected 2026-10-02 08:32:28 UTC 234,664 bytes, 7,430 lines download raw bytes

vendor: 5,591 bytes, lines 1-207
1//! moment.js
2//! version : 2.29.4
3//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
4//! license : MIT
5//! momentjs.com
6
7;(function (global, factory) {
8    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
9    typeof define === 'function' && define.amd ? define(factory) :
10    global.moment = factory()
11}(this, (function () { 'use strict';
12
13    var hookCallback;
14
15    function hooks() {
16        return hookCallback.apply(null, arguments);
17    }
18
19    // This is done to register the method called with moment()
20    // without creating circular dependencies.
21    function setHookCallback(callback) {
22        hookCallback = callback;
23    }
24
25    function isArray(input) {
26        return (
27            input instanceof Array ||
28            Object.prototype.toString.call(input) === '[object Array]'
29        );
30    }
31
32    function isObject(input) {
33        // IE8 will treat undefined and null as object if it wasn't for
34        // input != null
35        return (
36            input != null &&
37            Object.prototype.toString.call(input) === '[object Object]'
38        );
39    }
40
41    function hasOwnProp(a, b) {
42        return Object.prototype.hasOwnProperty.call(a, b);
43    }
44
45    function isObjectEmpty(obj) {
46        if (Object.getOwnPropertyNames) {
47            return Object.getOwnPropertyNames(obj).length === 0;
48        } else {
49            var k;
50            for (k in obj) {
51                if (hasOwnProp(obj, k)) {
52                    return false;
53                }
54            }
55            return true;
56        }
57    }
58
59    function isUndefined(input) {
60        return input === void 0;
61    }
62
63    function isNumber(input) {
64        return (
65            typeof input === 'number' ||
66            Object.prototype.toString.call(input) === '[object Number]'
67        );
68    }
69
70    function isDate(input) {
71        return (
72            input instanceof Date ||
73            Object.prototype.toString.call(input) === '[object Date]'
74        );
75    }
76
77    function map(arr, fn) {
78        var res = [],
79            i,
80            arrLen = arr.length;
81        for (i = 0; i < arrLen; ++i) {
82            res.push(fn(arr[i], i));
83        }
84        return res;
85    }
86
87    function extend(a, b) {
88        for (var i in b) {
89            if (hasOwnProp(b, i)) {
90                a[i] = b[i];
91            }
92        }
93
94        if (hasOwnProp(b, 'toString')) {
95            a.toString = b.toString;
96        }
97
98        if (hasOwnProp(b, 'valueOf')) {
99            a.valueOf = b.valueOf;
100        }
101
102        return a;
103    }
104
105    function createUTC(input, format, locale, strict) {
106        return createLocalOrUTC(input, format, locale, strict, true).utc();
107    }
108
109    function defaultParsingFlags() {
110        // We need to deep clone this object.
111        return {
112            empty: false,
113            unusedTokens: [],
114            unusedInput: [],
115            overflow: -2,
116            charsLeftOver: 0,
117            nullInput: false,
118            invalidEra: null,
119            invalidMonth: null,
120            invalidFormat: false,
121            userInvalidated: false,
122            iso: false,
123            parsedDateParts: [],
124            era: null,
125            meridiem: null,
126            rfc2822: false,
127            weekdayMismatch: false,
128        };
129    }
130
131    function getParsingFlags(m) {
132        if (m._pf == null) {
133            m._pf = defaultParsingFlags();
134        }
135        return m._pf;
136    }
137
138    var some;
139    if (Array.prototype.some) {
140        some = Array.prototype.some;
141    } else {
142        some = function (fun) {
143            var t = Object(this),
144                len = t.length >>> 0,
145                i;
146
147            for (i = 0; i < len; i++) {
148                if (i in t && fun.call(this, t[i], i, t)) {
149                    return true;
150                }
151            }
152
153            return false;
154        };
155    }
156
157    function isValid(m) {
158        if (m._isValid == null) {
159            var flags = getParsingFlags(m),
160                parsedParts = some.call(flags.parsedDateParts, function (i) {
161                    return i != null;
162                }),
163                isNowValid =
164                    !isNaN(m._d.getTime()) &&
165                    flags.overflow < 0 &&
166                    !flags.empty &&
167                    !flags.invalidEra &&
168                    !flags.invalidMonth &&
169                    !flags.invalidWeekday &&
170                    !flags.weekdayMismatch &&
171                    !flags.nullInput &&
172                    !flags.invalidFormat &&
173                    !flags.userInvalidated &&
174                    (!flags.meridiem || (flags.meridiem && parsedParts));
175
176            if (m._strict) {
177                isNowValid =
178                    isNowValid &&
179                    flags.charsLeftOver === 0 &&
180                    flags.unusedTokens.length === 0 &&
181                    flags.bigHour === undefined;
182            }
183
184            if (Object.isFrozen == null || !Object.isFrozen(m)) {
185                m._isValid = isNowValid;
186            } else {
187                return isNowValid;
188            }
189        }
190        return m._isValid;
191    }
192
193    function createInvalid(flags) {
194        var m = createUTC(NaN);
195        if (flags != null) {
196            extend(getParsingFlags(m), flags);
197        } else {
198            getParsingFlags(m).userInvalidated = true;
199        }
200
201        return m;
202    }
203
204    // Plugins that add properties should also add the key here (null value),
205    // so we can properly clone ourselves.
206    var momentProperties = (hooks.momentProperties = []),
207        updateInProgress = false;
vendor: 7,422 bytes, lines 208-455
208
209    function copyConfig(to, from) {
210        var i,
211            prop,
212            val,
213            momentPropertiesLen = momentProperties.length;
214
215        if (!isUndefined(from._isAMomentObject)) {
216            to._isAMomentObject = from._isAMomentObject;
217        }
218        if (!isUndefined(from._i)) {
219            to._i = from._i;
220        }
221        if (!isUndefined(from._f)) {
222            to._f = from._f;
223        }
224        if (!isUndefined(from._l)) {
225            to._l = from._l;
226        }
227        if (!isUndefined(from._strict)) {
228            to._strict = from._strict;
229        }
230        if (!isUndefined(from._tzm)) {
231            to._tzm = from._tzm;
232        }
233        if (!isUndefined(from._isUTC)) {
234            to._isUTC = from._isUTC;
235        }
236        if (!isUndefined(from._offset)) {
237            to._offset = from._offset;
238        }
239        if (!isUndefined(from._pf)) {
240            to._pf = getParsingFlags(from);
241        }
242        if (!isUndefined(from._locale)) {
243            to._locale = from._locale;
244        }
245
246        if (momentPropertiesLen > 0) {
247            for (i = 0; i < momentPropertiesLen; i++) {
248                prop = momentProperties[i];
249                val = from[prop];
250                if (!isUndefined(val)) {
251                    to[prop] = val;
252                }
253            }
254        }
255
256        return to;
257    }
258
259    // Moment prototype object
260    function Moment(config) {
261        copyConfig(this, config);
262        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
263        if (!this.isValid()) {
264            this._d = new Date(NaN);
265        }
266        // Prevent infinite loop in case updateOffset creates new moment
267        // objects.
268        if (updateInProgress === false) {
269            updateInProgress = true;
270            hooks.updateOffset(this);
271            updateInProgress = false;
272        }
273    }
274
275    function isMoment(obj) {
276        return (
277            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
278        );
279    }
280
281    function warn(msg) {
282        if (
283            hooks.suppressDeprecationWarnings === false &&
284            typeof console !== 'undefined' &&
285            console.warn
286        ) {
287            console.warn('Deprecation warning: ' + msg);
288        }
289    }
290
291    function deprecate(msg, fn) {
292        var firstTime = true;
293
294        return extend(function () {
295            if (hooks.deprecationHandler != null) {
296                hooks.deprecationHandler(null, msg);
297            }
298            if (firstTime) {
299                var args = [],
300                    arg,
301                    i,
302                    key,
303                    argLen = arguments.length;
304                for (i = 0; i < argLen; i++) {
305                    arg = '';
306                    if (typeof arguments[i] === 'object') {
307                        arg += '\n[' + i + '] ';
308                        for (key in arguments[0]) {
309                            if (hasOwnProp(arguments[0], key)) {
310                                arg += key + ': ' + arguments[0][key] + ', ';
311                            }
312                        }
313                        arg = arg.slice(0, -2); // Remove trailing comma and space
314                    } else {
315                        arg = arguments[i];
316                    }
317                    args.push(arg);
318                }
319                warn(
320                    msg +
321                        '\nArguments: ' +
322                        Array.prototype.slice.call(args).join('') +
323                        '\n' +
324                        new Error().stack
325                );
326                firstTime = false;
327            }
328            return fn.apply(this, arguments);
329        }, fn);
330    }
331
332    var deprecations = {};
333
334    function deprecateSimple(name, msg) {
335        if (hooks.deprecationHandler != null) {
336            hooks.deprecationHandler(name, msg);
337        }
338        if (!deprecations[name]) {
339            warn(msg);
340            deprecations[name] = true;
341        }
342    }
343
344    hooks.suppressDeprecationWarnings = false;
345    hooks.deprecationHandler = null;
346
347    function isFunction(input) {
348        return (
349            (typeof Function !== 'undefined' && input instanceof Function) ||
350            Object.prototype.toString.call(input) === '[object Function]'
351        );
352    }
353
354    function set(config) {
355        var prop, i;
356        for (i in config) {
357            if (hasOwnProp(config, i)) {
358                prop = config[i];
359                if (isFunction(prop)) {
360                    this[i] = prop;
361                } else {
362                    this['_' + i] = prop;
363                }
364            }
365        }
366        this._config = config;
367        // Lenient ordinal parsing accepts just a number in addition to
368        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
369        // TODO: Remove "ordinalParse" fallback in next major release.
370        this._dayOfMonthOrdinalParseLenient = new RegExp(
371            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
372                '|' +
373                /\d{1,2}/.source
374        );
375    }
376
377    function mergeConfigs(parentConfig, childConfig) {
378        var res = extend({}, parentConfig),
379            prop;
380        for (prop in childConfig) {
381            if (hasOwnProp(childConfig, prop)) {
382                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
383                    res[prop] = {};
384                    extend(res[prop], parentConfig[prop]);
385                    extend(res[prop], childConfig[prop]);
386                } else if (childConfig[prop] != null) {
387                    res[prop] = childConfig[prop];
388                } else {
389                    delete res[prop];
390                }
391            }
392        }
393        for (prop in parentConfig) {
394            if (
395                hasOwnProp(parentConfig, prop) &&
396                !hasOwnProp(childConfig, prop) &&
397                isObject(parentConfig[prop])
398            ) {
399                // make sure changes to properties don't modify parent config
400                res[prop] = extend({}, res[prop]);
401            }
402        }
403        return res;
404    }
405
406    function Locale(config) {
407        if (config != null) {
408            this.set(config);
409        }
410    }
411
412    var keys;
413
414    if (Object.keys) {
415        keys = Object.keys;
416    } else {
417        keys = function (obj) {
418            var i,
419                res = [];
420            for (i in obj) {
421                if (hasOwnProp(obj, i)) {
422                    res.push(i);
423                }
424            }
425            return res;
426        };
427    }
428
429    var defaultCalendar = {
430        sameDay: '[Today at] LT',
431        nextDay: '[Tomorrow at] LT',
432        nextWeek: 'dddd [at] LT',
433        lastDay: '[Yesterday at] LT',
434        lastWeek: '[Last] dddd [at] LT',
435        sameElse: 'L',
436    };
437
438    function calendar(key, mom, now) {
439        var output = this._calendar[key] || this._calendar['sameElse'];
440        return isFunction(output) ? output.call(mom, now) : output;
441    }
442
443    function zeroFill(number, targetLength, forceSign) {
444        var absNumber = '' + Math.abs(number),
445            zerosToFill = targetLength - absNumber.length,
446            sign = number >= 0;
447        return (
448            (sign ? (forceSign ? '+' : '') : '-') +
449            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
450            absNumber
451        );
452    }
453
454    var formattingTokens =
455           
vendor: 8,563 bytes, lines 455-759
455 /(\[[^\[]*\])|(\\)?([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,
456        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
457        formatFunctions = {},
458        formatTokenFunctions = {};
459
460    // token:    'M'
461    // padded:   ['MM', 2]
462    // ordinal:  'Mo'
463    // callback: function () { this.month() + 1 }
464    function addFormatToken(token, padded, ordinal, callback) {
465        var func = callback;
466        if (typeof callback === 'string') {
467            func = function () {
468                return this[callback]();
469            };
470        }
471        if (token) {
472            formatTokenFunctions[token] = func;
473        }
474        if (padded) {
475            formatTokenFunctions[padded[0]] = function () {
476                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
477            };
478        }
479        if (ordinal) {
480            formatTokenFunctions[ordinal] = function () {
481                return this.localeData().ordinal(
482                    func.apply(this, arguments),
483                    token
484                );
485            };
486        }
487    }
488
489    function removeFormattingTokens(input) {
490        if (input.match(/\[[\s\S]/)) {
491            return input.replace(/^\[|\]$/g, '');
492        }
493        return input.replace(/\\/g, '');
494    }
495
496    function makeFormatFunction(format) {
497        var array = format.match(formattingTokens),
498            i,
499            length;
500
501        for (i = 0, length = array.length; i < length; i++) {
502            if (formatTokenFunctions[array[i]]) {
503                array[i] = formatTokenFunctions[array[i]];
504            } else {
505                array[i] = removeFormattingTokens(array[i]);
506            }
507        }
508
509        return function (mom) {
510            var output = '',
511                i;
512            for (i = 0; i < length; i++) {
513                output += isFunction(array[i])
514                    ? array[i].call(mom, format)
515                    : array[i];
516            }
517            return output;
518        };
519    }
520
521    // format date using native date object
522    function formatMoment(m, format) {
523        if (!m.isValid()) {
524            return m.localeData().invalidDate();
525        }
526
527        format = expandFormat(format, m.localeData());
528        formatFunctions[format] =
529            formatFunctions[format] || makeFormatFunction(format);
530
531        return formatFunctions[format](m);
532    }
533
534    function expandFormat(format, locale) {
535        var i = 5;
536
537        function replaceLongDateFormatTokens(input) {
538            return locale.longDateFormat(input) || input;
539        }
540
541        localFormattingTokens.lastIndex = 0;
542        while (i >= 0 && localFormattingTokens.test(format)) {
543            format = format.replace(
544                localFormattingTokens,
545                replaceLongDateFormatTokens
546            );
547            localFormattingTokens.lastIndex = 0;
548            i -= 1;
549        }
550
551        return format;
552    }
553
554    var defaultLongDateFormat = {
555        LTS: 'h:mm:ss A',
556        LT: 'h:mm A',
557        L: 'MM/DD/YYYY',
558        LL: 'MMMM D, YYYY',
559        LLL: 'MMMM D, YYYY h:mm A',
560        LLLL: 'dddd, MMMM D, YYYY h:mm A',
561    };
562
563    function longDateFormat(key) {
564        var format = this._longDateFormat[key],
565            formatUpper = this._longDateFormat[key.toUpperCase()];
566
567        if (format || !formatUpper) {
568            return format;
569        }
570
571        this._longDateFormat[key] = formatUpper
572            .match(formattingTokens)
573            .map(function (tok) {
574                if (
575                    tok === 'MMMM' ||
576                    tok === 'MM' ||
577                    tok === 'DD' ||
578                    tok === 'dddd'
579                ) {
580                    return tok.slice(1);
581                }
582                return tok;
583            })
584            .join('');
585
586        return this._longDateFormat[key];
587    }
588
589    var defaultInvalidDate = 'Invalid date';
590
591    function invalidDate() {
592        return this._invalidDate;
593    }
594
595    var defaultOrdinal = '%d',
596        defaultDayOfMonthOrdinalParse = /\d{1,2}/;
597
598    function ordinal(number) {
599        return this._ordinal.replace('%d', number);
600    }
601
602    var defaultRelativeTime = {
603        future: 'in %s',
604        past: '%s ago',
605        s: 'a few seconds',
606        ss: '%d seconds',
607        m: 'a minute',
608        mm: '%d minutes',
609        h: 'an hour',
610        hh: '%d hours',
611        d: 'a day',
612        dd: '%d days',
613        w: 'a week',
614        ww: '%d weeks',
615        M: 'a month',
616        MM: '%d months',
617        y: 'a year',
618        yy: '%d years',
619    };
620
621    function relativeTime(number, withoutSuffix, string, isFuture) {
622        var output = this._relativeTime[string];
623        return isFunction(output)
624            ? output(number, withoutSuffix, string, isFuture)
625            : output.replace(/%d/i, number);
626    }
627
628    function pastFuture(diff, output) {
629        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
630        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
631    }
632
633    var aliases = {};
634
635    function addUnitAlias(unit, shorthand) {
636        var lowerCase = unit.toLowerCase();
637        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
638    }
639
640    function normalizeUnits(units) {
641        return typeof units === 'string'
642            ? aliases[units] || aliases[units.toLowerCase()]
643            : undefined;
644    }
645
646    function normalizeObjectUnits(inputObject) {
647        var normalizedInput = {},
648            normalizedProp,
649            prop;
650
651        for (prop in inputObject) {
652            if (hasOwnProp(inputObject, prop)) {
653                normalizedProp = normalizeUnits(prop);
654                if (normalizedProp) {
655                    normalizedInput[normalizedProp] = inputObject[prop];
656                }
657            }
658        }
659
660        return normalizedInput;
661    }
662
663    var priorities = {};
664
665    function addUnitPriority(unit, priority) {
666        priorities[unit] = priority;
667    }
668
669    function getPrioritizedUnits(unitsObj) {
670        var units = [],
671            u;
672        for (u in unitsObj) {
673            if (hasOwnProp(unitsObj, u)) {
674                units.push({ unit: u, priority: priorities[u] });
675            }
676        }
677        units.sort(function (a, b) {
678            return a.priority - b.priority;
679        });
680        return units;
681    }
682
683    function isLeapYear(year) {
684        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
685    }
686
687    function absFloor(number) {
688        if (number < 0) {
689            // -0 -> 0
690            return Math.ceil(number) || 0;
691        } else {
692            return Math.floor(number);
693        }
694    }
695
696    function toInt(argumentForCoercion) {
697        var coercedNumber = +argumentForCoercion,
698            value = 0;
699
700        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
701            value = absFloor(coercedNumber);
702        }
703
704        return value;
705    }
706
707    function makeGetSet(unit, keepTime) {
708        return function (value) {
709            if (value != null) {
710                set$1(this, unit, value);
711                hooks.updateOffset(this, keepTime);
712                return this;
713            } else {
714                return get(this, unit);
715            }
716        };
717    }
718
719    function get(mom, unit) {
720        return mom.isValid()
721            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
722            : NaN;
723    }
724
725    function set$1(mom, unit, value) {
726        if (mom.isValid() && !isNaN(value)) {
727            if (
728                unit === 'FullYear' &&
729                isLeapYear(mom.year()) &&
730                mom.month() === 1 &&
731                mom.date() === 29
732            ) {
733                value = toInt(value);
734                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
735                    value,
736                    mom.month(),
737                    daysInMonth(value, mom.month())
738                );
739            } else {
740                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
741            }
742        }
743    }
744
745    // MOMENTS
746
747    function stringGet(units) {
748        units = normalizeUnits(units);
749        if (isFunction(this[units])) {
750            return this[units]();
751        }
752        return this;
753    }
754
755    function stringSet(units, value) {
756        if (typeof units === 'object') {
757            units = normalizeObjectUnits(units);
758            var prioritized = getPrioritizedUnits(units),
759                i
vendor: 5,547 bytes, lines 759-945
759,
760                prioritizedLen = prioritized.length;
761            for (i = 0; i < prioritizedLen; i++) {
762                this[prioritized[i].unit](units[prioritized[i].unit]);
763            }
764        } else {
765            units = normalizeUnits(units);
766            if (isFunction(this[units])) {
767                return this[units](value);
768            }
769        }
770        return this;
771    }
772
773    var match1 = /\d/, //       0 - 9
774        match2 = /\d\d/, //      00 - 99
775        match3 = /\d{3}/, //     000 - 999
776        match4 = /\d{4}/, //    0000 - 9999
777        match6 = /[+-]?\d{6}/, // -999999 - 999999
778        match1to2 = /\d\d?/, //       0 - 99
779        match3to4 = /\d\d\d\d?/, //     999 - 9999
780        match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
781        match1to3 = /\d{1,3}/, //       0 - 999
782        match1to4 = /\d{1,4}/, //       0 - 9999
783        match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
784        matchUnsigned = /\d+/, //       0 - inf
785        matchSigned = /[+-]?\d+/, //    -inf - inf
786        matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
787        matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
788        matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
789        // any word (or two) characters or numbers including two/three word month in arabic.
790        // includes scottish gaelic two word and hyphenated months
791        matchWord =
792            /[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,
793        regexes;
794
795    regexes = {};
796
797    function addRegexToken(token, regex, strictRegex) {
798        regexes[token] = isFunction(regex)
799            ? regex
800            : function (isStrict, localeData) {
801                  return isStrict && strictRegex ? strictRegex : regex;
802              };
803    }
804
805    function getParseRegexForToken(token, config) {
806        if (!hasOwnProp(regexes, token)) {
807            return new RegExp(unescapeFormat(token));
808        }
809
810        return regexes[token](config._strict, config._locale);
811    }
812
813    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
814    function unescapeFormat(s) {
815        return regexEscape(
816            s
817                .replace('\\', '')
818                .replace(
819                    /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
820                    function (matched, p1, p2, p3, p4) {
821                        return p1 || p2 || p3 || p4;
822                    }
823                )
824        );
825    }
826
827    function regexEscape(s) {
828        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
829    }
830
831    var tokens = {};
832
833    function addParseToken(token, callback) {
834        var i,
835            func = callback,
836            tokenLen;
837        if (typeof token === 'string') {
838            token = [token];
839        }
840        if (isNumber(callback)) {
841            func = function (input, array) {
842                array[callback] = toInt(input);
843            };
844        }
845        tokenLen = token.length;
846        for (i = 0; i < tokenLen; i++) {
847            tokens[token[i]] = func;
848        }
849    }
850
851    function addWeekParseToken(token, callback) {
852        addParseToken(token, function (input, array, config, token) {
853            config._w = config._w || {};
854            callback(input, config._w, config, token);
855        });
856    }
857
858    function addTimeToArrayFromToken(token, input, config) {
859        if (input != null && hasOwnProp(tokens, token)) {
860            tokens[token](input, config._a, config, token);
861        }
862    }
863
864    var YEAR = 0,
865        MONTH = 1,
866        DATE = 2,
867        HOUR = 3,
868        MINUTE = 4,
869        SECOND = 5,
870        MILLISECOND = 6,
871        WEEK = 7,
872        WEEKDAY = 8;
873
874    function mod(n, x) {
875        return ((n % x) + x) % x;
876    }
877
878    var indexOf;
879
880    if (Array.prototype.indexOf) {
881        indexOf = Array.prototype.indexOf;
882    } else {
883        indexOf = function (o) {
884            // I know
885            var i;
886            for (i = 0; i < this.length; ++i) {
887                if (this[i] === o) {
888                    return i;
889                }
890            }
891            return -1;
892        };
893    }
894
895    function daysInMonth(year, month) {
896        if (isNaN(year) || isNaN(month)) {
897            return NaN;
898        }
899        var modMonth = mod(month, 12);
900        year += (month - modMonth) / 12;
901        return modMonth === 1
902            ? isLeapYear(year)
903                ? 29
904                : 28
905            : 31 - ((modMonth % 7) % 2);
906    }
907
908    // FORMATTING
909
910    addFormatToken('M', ['MM', 2], 'Mo', function () {
911        return this.month() + 1;
912    });
913
914    addFormatToken('MMM', 0, 0, function (format) {
915        return this.localeData().monthsShort(this, format);
916    });
917
918    addFormatToken('MMMM', 0, 0, function (format) {
919        return this.localeData().months(this, format);
920    });
921
922    // ALIASES
923
924    addUnitAlias('month', 'M');
925
926    // PRIORITY
927
928    addUnitPriority('month', 8);
929
930    // PARSING
931
932    addRegexToken('M', match1to2);
933    addRegexToken('MM', match1to2, match2);
934    addRegexToken('MMM', function (isStrict, locale) {
935        return locale.monthsShortRegex(isStrict);
936    });
937    addRegexToken('MMMM', function (isStrict, locale) {
938        return locale.monthsRegex(isStrict);
939    });
940
941    addParseToken(['M', 'MM'], function (input, array) {
942        array[MONTH] = toInt(input) - 1;
943    });
944
945    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
946        var month = config._locale.monthsParse(input, token, config._strict);
947        // if we didn't find a month name, mark the date as invalid.
948        if (month != null) {
949            array[MONTH] = month;
950        } else {
951            getParsingFlags(config).invalidMonth = input;
952        }
953    });
954
955    // LOCALES
956
957    var defaultLocaleMonths =
958            'January_February_March_April_May_June_July_August_September_October_November_December'.split(
959                '_'
960            ),
961        defaultLocaleMonthsShort =
962            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'
vendor: 13,773 bytes, lines 962-1404
962),
963        MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
964        defaultMonthsShortRegex = matchWord,
965        defaultMonthsRegex = matchWord;
966
967    function localeMonths(m, format) {
968        if (!m) {
969            return isArray(this._months)
970                ? this._months
971                : this._months['standalone'];
972        }
973        return isArray(this._months)
974            ? this._months[m.month()]
975            : this._months[
976                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
977                      ? 'format'
978                      : 'standalone'
979              ][m.month()];
980    }
981
982    function localeMonthsShort(m, format) {
983        if (!m) {
984            return isArray(this._monthsShort)
985                ? this._monthsShort
986                : this._monthsShort['standalone'];
987        }
988        return isArray(this._monthsShort)
989            ? this._monthsShort[m.month()]
990            : this._monthsShort[
991                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
992              ][m.month()];
993    }
994
995    function handleStrictParse(monthName, format, strict) {
996        var i,
997            ii,
998            mom,
999            llc = monthName.toLocaleLowerCase();
1000        if (!this._monthsParse) {
1001            // this is not used
1002            this._monthsParse = [];
1003            this._longMonthsParse = [];
1004            this._shortMonthsParse = [];
1005            for (i = 0; i < 12; ++i) {
1006                mom = createUTC([2000, i]);
1007                this._shortMonthsParse[i] = this.monthsShort(
1008                    mom,
1009                    ''
1010                ).toLocaleLowerCase();
1011                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
1012            }
1013        }
1014
1015        if (strict) {
1016            if (format === 'MMM') {
1017                ii = indexOf.call(this._shortMonthsParse, llc);
1018                return ii !== -1 ? ii : null;
1019            } else {
1020                ii = indexOf.call(this._longMonthsParse, llc);
1021                return ii !== -1 ? ii : null;
1022            }
1023        } else {
1024            if (format === 'MMM') {
1025                ii = indexOf.call(this._shortMonthsParse, llc);
1026                if (ii !== -1) {
1027                    return ii;
1028                }
1029                ii = indexOf.call(this._longMonthsParse, llc);
1030                return ii !== -1 ? ii : null;
1031            } else {
1032                ii = indexOf.call(this._longMonthsParse, llc);
1033                if (ii !== -1) {
1034                    return ii;
1035                }
1036                ii = indexOf.call(this._shortMonthsParse, llc);
1037                return ii !== -1 ? ii : null;
1038            }
1039        }
1040    }
1041
1042    function localeMonthsParse(monthName, format, strict) {
1043        var i, mom, regex;
1044
1045        if (this._monthsParseExact) {
1046            return handleStrictParse.call(this, monthName, format, strict);
1047        }
1048
1049        if (!this._monthsParse) {
1050            this._monthsParse = [];
1051            this._longMonthsParse = [];
1052            this._shortMonthsParse = [];
1053        }
1054
1055        // TODO: add sorting
1056        // Sorting makes sure if one month (or abbr) is a prefix of another
1057        // see sorting in computeMonthsParse
1058        for (i = 0; i < 12; i++) {
1059            // make the regex if we don't have it already
1060            mom = createUTC([2000, i]);
1061            if (strict && !this._longMonthsParse[i]) {
1062                this._longMonthsParse[i] = new RegExp(
1063                    '^' + this.months(mom, '').replace('.', '') + '$',
1064                    'i'
1065                );
1066                this._shortMonthsParse[i] = new RegExp(
1067                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',
1068                    'i'
1069                );
1070            }
1071            if (!strict && !this._monthsParse[i]) {
1072                regex =
1073                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
1074                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
1075            }
1076            // test the regex
1077            if (
1078                strict &&
1079                format === 'MMMM' &&
1080                this._longMonthsParse[i].test(monthName)
1081            ) {
1082                return i;
1083            } else if (
1084                strict &&
1085                format === 'MMM' &&
1086                this._shortMonthsParse[i].test(monthName)
1087            ) {
1088                return i;
1089            } else if (!strict && this._monthsParse[i].test(monthName)) {
1090                return i;
1091            }
1092        }
1093    }
1094
1095    // MOMENTS
1096
1097    function setMonth(mom, value) {
1098        var dayOfMonth;
1099
1100        if (!mom.isValid()) {
1101            // No op
1102            return mom;
1103        }
1104
1105        if (typeof value === 'string') {
1106            if (/^\d+$/.test(value)) {
1107                value = toInt(value);
1108            } else {
1109                value = mom.localeData().monthsParse(value);
1110                // TODO: Another silent failure?
1111                if (!isNumber(value)) {
1112                    return mom;
1113                }
1114            }
1115        }
1116
1117        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
1118        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
1119        return mom;
1120    }
1121
1122    function getSetMonth(value) {
1123        if (value != null) {
1124            setMonth(this, value);
1125            hooks.updateOffset(this, true);
1126            return this;
1127        } else {
1128            return get(this, 'Month');
1129        }
1130    }
1131
1132    function getDaysInMonth() {
1133        return daysInMonth(this.year(), this.month());
1134    }
1135
1136    function monthsShortRegex(isStrict) {
1137        if (this._monthsParseExact) {
1138            if (!hasOwnProp(this, '_monthsRegex')) {
1139                computeMonthsParse.call(this);
1140            }
1141            if (isStrict) {
1142                return this._monthsShortStrictRegex;
1143            } else {
1144                return this._monthsShortRegex;
1145            }
1146        } else {
1147            if (!hasOwnProp(this, '_monthsShortRegex')) {
1148                this._monthsShortRegex = defaultMonthsShortRegex;
1149            }
1150            return this._monthsShortStrictRegex && isStrict
1151                ? this._monthsShortStrictRegex
1152                : this._monthsShortRegex;
1153        }
1154    }
1155
1156    function monthsRegex(isStrict) {
1157        if (this._monthsParseExact) {
1158            if (!hasOwnProp(this, '_monthsRegex')) {
1159                computeMonthsParse.call(this);
1160            }
1161            if (isStrict) {
1162                return this._monthsStrictRegex;
1163            } else {
1164                return this._monthsRegex;
1165            }
1166        } else {
1167            if (!hasOwnProp(this, '_monthsRegex')) {
1168                this._monthsRegex = defaultMonthsRegex;
1169            }
1170            return this._monthsStrictRegex && isStrict
1171                ? this._monthsStrictRegex
1172                : this._monthsRegex;
1173        }
1174    }
1175
1176    function computeMonthsParse() {
1177        function cmpLenRev(a, b) {
1178            return b.length - a.length;
1179        }
1180
1181        var shortPieces = [],
1182            longPieces = [],
1183            mixedPieces = [],
1184            i,
1185            mom;
1186        for (i = 0; i < 12; i++) {
1187            // make the regex if we don't have it already
1188            mom = createUTC([2000, i]);
1189            shortPieces.push(this.monthsShort(mom, ''));
1190            longPieces.push(this.months(mom, ''));
1191            mixedPieces.push(this.months(mom, ''));
1192            mixedPieces.push(this.monthsShort(mom, ''));
1193        }
1194        // Sorting makes sure if one month (or abbr) is a prefix of another it
1195        // will match the longer piece.
1196        shortPieces.sort(cmpLenRev);
1197        longPieces.sort(cmpLenRev);
1198        mixedPieces.sort(cmpLenRev);
1199        for (i = 0; i < 12; i++) {
1200            shortPieces[i] = regexEscape(shortPieces[i]);
1201            longPieces[i] = regexEscape(longPieces[i]);
1202        }
1203        for (i = 0; i < 24; i++) {
1204            mixedPieces[i] = regexEscape(mixedPieces[i]);
1205        }
1206
1207        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
1208        this._monthsShortRegex = this._monthsRegex;
1209        this._monthsStrictRegex = new RegExp(
1210            '^(' + longPieces.join('|') + ')',
1211            'i'
1212        );
1213        this._monthsShortStrictRegex = new RegExp(
1214            '^(' + shortPieces.join('|') + ')',
1215            'i'
1216        );
1217    }
1218
1219    // FORMATTING
1220
1221    addFormatToken('Y', 0, 0, function () {
1222        var y = this.year();
1223        return y <= 9999 ? zeroFill(y, 4) : '+' + y;
1224    });
1225
1226    addFormatToken(0, ['YY', 2], 0, function () {
1227        return this.year() % 100;
1228    });
1229
1230    addFormatToken(0, ['YYYY', 4], 0, 'year');
1231    addFormatToken(0, ['YYYYY', 5], 0, 'year');
1232    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
1233
1234    // ALIASES
1235
1236    addUnitAlias('year', 'y');
1237
1238    // PRIORITIES
1239
1240    addUnitPriority('year', 1);
1241
1242    // PARSING
1243
1244    addRegexToken('Y', matchSigned);
1245    addRegexToken('YY', match1to2, match2);
1246    addRegexToken('YYYY', match1to4, match4);
1247    addRegexToken('YYYYY', match1to6, match6);
1248    addRegexToken('YYYYYY', match1to6, match6);
1249
1250    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
1251    addParseToken('YYYY', function (input, array) {
1252        array[YEAR] =
1253            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
1254    });
1255    addParseToken('YY', function (input, array) {
1256        array[YEAR] = hooks.parseTwoDigitYear(input);
1257    });
1258    addParseToken('Y', function (input, array) {
1259        array[YEAR] = parseInt(input, 10);
1260    });
1261
1262    // HELPERS
1263
1264    function daysInYear(year) {
1265        return isLeapYear(year) ? 366 : 365;
1266    }
1267
1268    // HOOKS
1269
1270    hooks.parseTwoDigitYear = function (input) {
1271        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
1272    };
1273
1274    // MOMENTS
1275
1276    var getSetYear = makeGetSet('FullYear', true);
1277
1278    function getIsLeapYear() {
1279        return isLeapYear(this.year());
1280    }
1281
1282    function createDate(y, m, d, h, M, s, ms) {
1283        // can't just apply() to create a date:
1284        // https://stackoverflow.com/q/181348
1285        var date;
1286        // the date constructor remaps years 0-99 to 1900-1999
1287        if (y < 100 && y >= 0) {
1288            // preserve leap years using a full 400 year cycle, then reset
1289            date = new Date(y + 400, m, d, h, M, s, ms);
1290            if (isFinite(date.getFullYear())) {
1291                date.setFullYear(y);
1292            }
1293        } else {
1294            date = new Date(y, m, d, h, M, s, ms);
1295        }
1296
1297        return date;
1298    }
1299
1300    function createUTCDate(y) {
1301        var date, args;
1302        // the Date.UTC function remaps years 0-99 to 1900-1999
1303        if (y < 100 && y >= 0) {
1304            args = Array.prototype.slice.call(arguments);
1305            // preserve leap years using a full 400 year cycle, then reset
1306            args[0] = y + 400;
1307            date = new Date(Date.UTC.apply(null, args));
1308            if (isFinite(date.getUTCFullYear())) {
1309                date.setUTCFullYear(y);
1310            }
1311        } else {
1312            date = new Date(Date.UTC.apply(null, arguments));
1313        }
1314
1315        return date;
1316    }
1317
1318    // start-of-first-week - start-of-year
1319    function firstWeekOffset(year, dow, doy) {
1320        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
1321            fwd = 7 + dow - doy,
1322            // first-week day local weekday -- which local weekday is fwd
1323            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
1324
1325        return -fwdlw + fwd - 1;
1326    }
1327
1328    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
1329    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
1330        var localWeekday = (7 + weekday - dow) % 7,
1331            weekOffset = firstWeekOffset(year, dow, doy),
1332            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
1333            resYear,
1334            resDayOfYear;
1335
1336        if (dayOfYear <= 0) {
1337            resYear = year - 1;
1338            resDayOfYear = daysInYear(resYear) + dayOfYear;
1339        } else if (dayOfYear > daysInYear(year)) {
1340            resYear = year + 1;
1341            resDayOfYear = dayOfYear - daysInYear(year);
1342        } else {
1343            resYear = year;
1344            resDayOfYear = dayOfYear;
1345        }
1346
1347        return {
1348            year: resYear,
1349            dayOfYear: resDayOfYear,
1350        };
1351    }
1352
1353    function weekOfYear(mom, dow, doy) {
1354        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
1355            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
1356            resWeek,
1357            resYear;
1358
1359        if (week < 1) {
1360            resYear = mom.year() - 1;
1361            resWeek = week + weeksInYear(resYear, dow, doy);
1362        } else if (week > weeksInYear(mom.year(), dow, doy)) {
1363            resWeek = week - weeksInYear(mom.year(), dow, doy);
1364            resYear = mom.year() + 1;
1365        } else {
1366            resYear = mom.year();
1367            resWeek = week;
1368        }
1369
1370        return {
1371            week: resWeek,
1372            year: resYear,
1373        };
1374    }
1375
1376    function weeksInYear(year, dow, doy) {
1377        var weekOffset = firstWeekOffset(year, dow, doy),
1378            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
1379        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
1380    }
1381
1382    // FORMATTING
1383
1384    addFormatToken('w', ['ww', 2], 'wo', 'week');
1385    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
1386
1387    // ALIASES
1388
1389    addUnitAlias('week', 'w');
1390    addUnitAlias('isoWeek', 'W');
1391
1392    // PRIORITIES
1393
1394    addUnitPriority('week', 5);
1395    addUnitPriority('isoWeek', 5);
1396
1397    // PARSING
1398
1399    addRegexToken('w', match1to2);
1400    addRegexToken('ww', match1to2, match2);
1401    addRegexToken('W', match1to2);
1402    addRegexToken('WW', match1to2, match2);
1403
1404    addWeekParseToken(
vendor: 3,487 bytes, lines 1404-1535
1404
1405        ['w', 'ww', 'W', 'WW'],
1406        function (input, week, config, token) {
1407            week[token.substr(0, 1)] = toInt(input);
1408        }
1409    );
1410
1411    // HELPERS
1412
1413    // LOCALES
1414
1415    function localeWeek(mom) {
1416        return weekOfYear(mom, this._week.dow, this._week.doy).week;
1417    }
1418
1419    var defaultLocaleWeek = {
1420        dow: 0, // Sunday is the first day of the week.
1421        doy: 6, // The week that contains Jan 6th is the first week of the year.
1422    };
1423
1424    function localeFirstDayOfWeek() {
1425        return this._week.dow;
1426    }
1427
1428    function localeFirstDayOfYear() {
1429        return this._week.doy;
1430    }
1431
1432    // MOMENTS
1433
1434    function getSetWeek(input) {
1435        var week = this.localeData().week(this);
1436        return input == null ? week : this.add((input - week) * 7, 'd');
1437    }
1438
1439    function getSetISOWeek(input) {
1440        var week = weekOfYear(this, 1, 4).week;
1441        return input == null ? week : this.add((input - week) * 7, 'd');
1442    }
1443
1444    // FORMATTING
1445
1446    addFormatToken('d', 0, 'do', 'day');
1447
1448    addFormatToken('dd', 0, 0, function (format) {
1449        return this.localeData().weekdaysMin(this, format);
1450    });
1451
1452    addFormatToken('ddd', 0, 0, function (format) {
1453        return this.localeData().weekdaysShort(this, format);
1454    });
1455
1456    addFormatToken('dddd', 0, 0, function (format) {
1457        return this.localeData().weekdays(this, format);
1458    });
1459
1460    addFormatToken('e', 0, 0, 'weekday');
1461    addFormatToken('E', 0, 0, 'isoWeekday');
1462
1463    // ALIASES
1464
1465    addUnitAlias('day', 'd');
1466    addUnitAlias('weekday', 'e');
1467    addUnitAlias('isoWeekday', 'E');
1468
1469    // PRIORITY
1470    addUnitPriority('day', 11);
1471    addUnitPriority('weekday', 11);
1472    addUnitPriority('isoWeekday', 11);
1473
1474    // PARSING
1475
1476    addRegexToken('d', match1to2);
1477    addRegexToken('e', match1to2);
1478    addRegexToken('E', match1to2);
1479    addRegexToken('dd', function (isStrict, locale) {
1480        return locale.weekdaysMinRegex(isStrict);
1481    });
1482    addRegexToken('ddd', function (isStrict, locale) {
1483        return locale.weekdaysShortRegex(isStrict);
1484    });
1485    addRegexToken('dddd', function (isStrict, locale) {
1486        return locale.weekdaysRegex(isStrict);
1487    });
1488
1489    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
1490        var weekday = config._locale.weekdaysParse(input, token, config._strict);
1491        // if we didn't get a weekday name, mark the date as invalid
1492        if (weekday != null) {
1493            week.d = weekday;
1494        } else {
1495            getParsingFlags(config).invalidWeekday = input;
1496        }
1497    });
1498
1499    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
1500        week[token] = toInt(input);
1501    });
1502
1503    // HELPERS
1504
1505    function parseWeekday(input, locale) {
1506        if (typeof input !== 'string') {
1507            return input;
1508        }
1509
1510        if (!isNaN(input)) {
1511            return parseInt(input, 10);
1512        }
1513
1514        input = locale.weekdaysParse(input);
1515        if (typeof input === 'number') {
1516            return input;
1517        }
1518
1519        return null;
1520    }
1521
1522    function parseIsoWeekday(input, locale) {
1523        if (typeof input === 'string') {
1524            return locale.weekdaysParse(input) % 7 || 7;
1525        }
1526        return isNaN(input) ? null : input;
1527    }
1528
1529    // LOCALES
1530    function shiftWeekdays(ws, n) {
1531        return ws.slice(n, 7).concat(ws.slice(0, n));
1532    }
1533
1534    var defaultLocaleWeekdays =
1535            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'
vendor: 17,864 bytes, lines 1535-2083
1535),
1536        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
1537        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
1538        defaultWeekdaysRegex = matchWord,
1539        defaultWeekdaysShortRegex = matchWord,
1540        defaultWeekdaysMinRegex = matchWord;
1541
1542    function localeWeekdays(m, format) {
1543        var weekdays = isArray(this._weekdays)
1544            ? this._weekdays
1545            : this._weekdays[
1546                  m && m !== true && this._weekdays.isFormat.test(format)
1547                      ? 'format'
1548                      : 'standalone'
1549              ];
1550        return m === true
1551            ? shiftWeekdays(weekdays, this._week.dow)
1552            : m
1553            ? weekdays[m.day()]
1554            : weekdays;
1555    }
1556
1557    function localeWeekdaysShort(m) {
1558        return m === true
1559            ? shiftWeekdays(this._weekdaysShort, this._week.dow)
1560            : m
1561            ? this._weekdaysShort[m.day()]
1562            : this._weekdaysShort;
1563    }
1564
1565    function localeWeekdaysMin(m) {
1566        return m === true
1567            ? shiftWeekdays(this._weekdaysMin, this._week.dow)
1568            : m
1569            ? this._weekdaysMin[m.day()]
1570            : this._weekdaysMin;
1571    }
1572
1573    function handleStrictParse$1(weekdayName, format, strict) {
1574        var i,
1575            ii,
1576            mom,
1577            llc = weekdayName.toLocaleLowerCase();
1578        if (!this._weekdaysParse) {
1579            this._weekdaysParse = [];
1580            this._shortWeekdaysParse = [];
1581            this._minWeekdaysParse = [];
1582
1583            for (i = 0; i < 7; ++i) {
1584                mom = createUTC([2000, 1]).day(i);
1585                this._minWeekdaysParse[i] = this.weekdaysMin(
1586                    mom,
1587                    ''
1588                ).toLocaleLowerCase();
1589                this._shortWeekdaysParse[i] = this.weekdaysShort(
1590                    mom,
1591                    ''
1592                ).toLocaleLowerCase();
1593                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
1594            }
1595        }
1596
1597        if (strict) {
1598            if (format === 'dddd') {
1599                ii = indexOf.call(this._weekdaysParse, llc);
1600                return ii !== -1 ? ii : null;
1601            } else if (format === 'ddd') {
1602                ii = indexOf.call(this._shortWeekdaysParse, llc);
1603                return ii !== -1 ? ii : null;
1604            } else {
1605                ii = indexOf.call(this._minWeekdaysParse, llc);
1606                return ii !== -1 ? ii : null;
1607            }
1608        } else {
1609            if (format === 'dddd') {
1610                ii = indexOf.call(this._weekdaysParse, llc);
1611                if (ii !== -1) {
1612                    return ii;
1613                }
1614                ii = indexOf.call(this._shortWeekdaysParse, llc);
1615                if (ii !== -1) {
1616                    return ii;
1617                }
1618                ii = indexOf.call(this._minWeekdaysParse, llc);
1619                return ii !== -1 ? ii : null;
1620            } else if (format === 'ddd') {
1621                ii = indexOf.call(this._shortWeekdaysParse, llc);
1622                if (ii !== -1) {
1623                    return ii;
1624                }
1625                ii = indexOf.call(this._weekdaysParse, llc);
1626                if (ii !== -1) {
1627                    return ii;
1628                }
1629                ii = indexOf.call(this._minWeekdaysParse, llc);
1630                return ii !== -1 ? ii : null;
1631            } else {
1632                ii = indexOf.call(this._minWeekdaysParse, llc);
1633                if (ii !== -1) {
1634                    return ii;
1635                }
1636                ii = indexOf.call(this._weekdaysParse, llc);
1637                if (ii !== -1) {
1638                    return ii;
1639                }
1640                ii = indexOf.call(this._shortWeekdaysParse, llc);
1641                return ii !== -1 ? ii : null;
1642            }
1643        }
1644    }
1645
1646    function localeWeekdaysParse(weekdayName, format, strict) {
1647        var i, mom, regex;
1648
1649        if (this._weekdaysParseExact) {
1650            return handleStrictParse$1.call(this, weekdayName, format, strict);
1651        }
1652
1653        if (!this._weekdaysParse) {
1654            this._weekdaysParse = [];
1655            this._minWeekdaysParse = [];
1656            this._shortWeekdaysParse = [];
1657            this._fullWeekdaysParse = [];
1658        }
1659
1660        for (i = 0; i < 7; i++) {
1661            // make the regex if we don't have it already
1662
1663            mom = createUTC([2000, 1]).day(i);
1664            if (strict && !this._fullWeekdaysParse[i]) {
1665                this._fullWeekdaysParse[i] = new RegExp(
1666                    '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
1667                    'i'
1668                );
1669                this._shortWeekdaysParse[i] = new RegExp(
1670                    '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
1671                    'i'
1672                );
1673                this._minWeekdaysParse[i] = new RegExp(
1674                    '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
1675                    'i'
1676                );
1677            }
1678            if (!this._weekdaysParse[i]) {
1679                regex =
1680                    '^' +
1681                    this.weekdays(mom, '') +
1682                    '|^' +
1683                    this.weekdaysShort(mom, '') +
1684                    '|^' +
1685                    this.weekdaysMin(mom, '');
1686                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
1687            }
1688            // test the regex
1689            if (
1690                strict &&
1691                format === 'dddd' &&
1692                this._fullWeekdaysParse[i].test(weekdayName)
1693            ) {
1694                return i;
1695            } else if (
1696                strict &&
1697                format === 'ddd' &&
1698                this._shortWeekdaysParse[i].test(weekdayName)
1699            ) {
1700                return i;
1701            } else if (
1702                strict &&
1703                format === 'dd' &&
1704                this._minWeekdaysParse[i].test(weekdayName)
1705            ) {
1706                return i;
1707            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
1708                return i;
1709            }
1710        }
1711    }
1712
1713    // MOMENTS
1714
1715    function getSetDayOfWeek(input) {
1716        if (!this.isValid()) {
1717            return input != null ? this : NaN;
1718        }
1719        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
1720        if (input != null) {
1721            input = parseWeekday(input, this.localeData());
1722            return this.add(input - day, 'd');
1723        } else {
1724            return day;
1725        }
1726    }
1727
1728    function getSetLocaleDayOfWeek(input) {
1729        if (!this.isValid()) {
1730            return input != null ? this : NaN;
1731        }
1732        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
1733        return input == null ? weekday : this.add(input - weekday, 'd');
1734    }
1735
1736    function getSetISODayOfWeek(input) {
1737        if (!this.isValid()) {
1738            return input != null ? this : NaN;
1739        }
1740
1741        // behaves the same as moment#day except
1742        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
1743        // as a setter, sunday should belong to the previous week.
1744
1745        if (input != null) {
1746            var weekday = parseIsoWeekday(input, this.localeData());
1747            return this.day(this.day() % 7 ? weekday : weekday - 7);
1748        } else {
1749            return this.day() || 7;
1750        }
1751    }
1752
1753    function weekdaysRegex(isStrict) {
1754        if (this._weekdaysParseExact) {
1755            if (!hasOwnProp(this, '_weekdaysRegex')) {
1756                computeWeekdaysParse.call(this);
1757            }
1758            if (isStrict) {
1759                return this._weekdaysStrictRegex;
1760            } else {
1761                return this._weekdaysRegex;
1762            }
1763        } else {
1764            if (!hasOwnProp(this, '_weekdaysRegex')) {
1765                this._weekdaysRegex = defaultWeekdaysRegex;
1766            }
1767            return this._weekdaysStrictRegex && isStrict
1768                ? this._weekdaysStrictRegex
1769                : this._weekdaysRegex;
1770        }
1771    }
1772
1773    function weekdaysShortRegex(isStrict) {
1774        if (this._weekdaysParseExact) {
1775            if (!hasOwnProp(this, '_weekdaysRegex')) {
1776                computeWeekdaysParse.call(this);
1777            }
1778            if (isStrict) {
1779                return this._weekdaysShortStrictRegex;
1780            } else {
1781                return this._weekdaysShortRegex;
1782            }
1783        } else {
1784            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
1785                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
1786            }
1787            return this._weekdaysShortStrictRegex && isStrict
1788                ? this._weekdaysShortStrictRegex
1789                : this._weekdaysShortRegex;
1790        }
1791    }
1792
1793    function weekdaysMinRegex(isStrict) {
1794        if (this._weekdaysParseExact) {
1795            if (!hasOwnProp(this, '_weekdaysRegex')) {
1796                computeWeekdaysParse.call(this);
1797            }
1798            if (isStrict) {
1799                return this._weekdaysMinStrictRegex;
1800            } else {
1801                return this._weekdaysMinRegex;
1802            }
1803        } else {
1804            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
1805                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
1806            }
1807            return this._weekdaysMinStrictRegex && isStrict
1808                ? this._weekdaysMinStrictRegex
1809                : this._weekdaysMinRegex;
1810        }
1811    }
1812
1813    function computeWeekdaysParse() {
1814        function cmpLenRev(a, b) {
1815            return b.length - a.length;
1816        }
1817
1818        var minPieces = [],
1819            shortPieces = [],
1820            longPieces = [],
1821            mixedPieces = [],
1822            i,
1823            mom,
1824            minp,
1825            shortp,
1826            longp;
1827        for (i = 0; i < 7; i++) {
1828            // make the regex if we don't have it already
1829            mom = createUTC([2000, 1]).day(i);
1830            minp = regexEscape(this.weekdaysMin(mom, ''));
1831            shortp = regexEscape(this.weekdaysShort(mom, ''));
1832            longp = regexEscape(this.weekdays(mom, ''));
1833            minPieces.push(minp);
1834            shortPieces.push(shortp);
1835            longPieces.push(longp);
1836            mixedPieces.push(minp);
1837            mixedPieces.push(shortp);
1838            mixedPieces.push(longp);
1839        }
1840        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
1841        // will match the longer piece.
1842        minPieces.sort(cmpLenRev);
1843        shortPieces.sort(cmpLenRev);
1844        longPieces.sort(cmpLenRev);
1845        mixedPieces.sort(cmpLenRev);
1846
1847        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
1848        this._weekdaysShortRegex = this._weekdaysRegex;
1849        this._weekdaysMinRegex = this._weekdaysRegex;
1850
1851        this._weekdaysStrictRegex = new RegExp(
1852            '^(' + longPieces.join('|') + ')',
1853            'i'
1854        );
1855        this._weekdaysShortStrictRegex = new RegExp(
1856            '^(' + shortPieces.join('|') + ')',
1857            'i'
1858        );
1859        this._weekdaysMinStrictRegex = new RegExp(
1860            '^(' + minPieces.join('|') + ')',
1861            'i'
1862        );
1863    }
1864
1865    // FORMATTING
1866
1867    function hFormat() {
1868        return this.hours() % 12 || 12;
1869    }
1870
1871    function kFormat() {
1872        return this.hours() || 24;
1873    }
1874
1875    addFormatToken('H', ['HH', 2], 0, 'hour');
1876    addFormatToken('h', ['hh', 2], 0, hFormat);
1877    addFormatToken('k', ['kk', 2], 0, kFormat);
1878
1879    addFormatToken('hmm', 0, 0, function () {
1880        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
1881    });
1882
1883    addFormatToken('hmmss', 0, 0, function () {
1884        return (
1885            '' +
1886            hFormat.apply(this) +
1887            zeroFill(this.minutes(), 2) +
1888            zeroFill(this.seconds(), 2)
1889        );
1890    });
1891
1892    addFormatToken('Hmm', 0, 0, function () {
1893        return '' + this.hours() + zeroFill(this.minutes(), 2);
1894    });
1895
1896    addFormatToken('Hmmss', 0, 0, function () {
1897        return (
1898            '' +
1899            this.hours() +
1900            zeroFill(this.minutes(), 2) +
1901            zeroFill(this.seconds(), 2)
1902        );
1903    });
1904
1905    function meridiem(token, lowercase) {
1906        addFormatToken(token, 0, 0, function () {
1907            return this.localeData().meridiem(
1908                this.hours(),
1909                this.minutes(),
1910                lowercase
1911            );
1912        });
1913    }
1914
1915    meridiem('a', true);
1916    meridiem('A', false);
1917
1918    // ALIASES
1919
1920    addUnitAlias('hour', 'h');
1921
1922    // PRIORITY
1923    addUnitPriority('hour', 13);
1924
1925    // PARSING
1926
1927    function matchMeridiem(isStrict, locale) {
1928        return locale._meridiemParse;
1929    }
1930
1931    addRegexToken('a', matchMeridiem);
1932    addRegexToken('A', matchMeridiem);
1933    addRegexToken('H', match1to2);
1934    addRegexToken('h', match1to2);
1935    addRegexToken('k', match1to2);
1936    addRegexToken('HH', match1to2, match2);
1937    addRegexToken('hh', match1to2, match2);
1938    addRegexToken('kk', match1to2, match2);
1939
1940    addRegexToken('hmm', match3to4);
1941    addRegexToken('hmmss', match5to6);
1942    addRegexToken('Hmm', match3to4);
1943    addRegexToken('Hmmss', match5to6);
1944
1945    addParseToken(['H', 'HH'], HOUR);
1946    addParseToken(['k', 'kk'], function (input, array, config) {
1947        var kInput = toInt(input);
1948        array[HOUR] = kInput === 24 ? 0 : kInput;
1949    });
1950    addParseToken(['a', 'A'], function (input, array, config) {
1951        config._isPm = config._locale.isPM(input);
1952        config._meridiem = input;
1953    });
1954    addParseToken(['h', 'hh'], function (input, array, config) {
1955        array[HOUR] = toInt(input);
1956        getParsingFlags(config).bigHour = true;
1957    });
1958    addParseToken('hmm', function (input, array, config) {
1959        var pos = input.length - 2;
1960        array[HOUR] = toInt(input.substr(0, pos));
1961        array[MINUTE] = toInt(input.substr(pos));
1962        getParsingFlags(config).bigHour = true;
1963    });
1964    addParseToken('hmmss', function (input, array, config) {
1965        var pos1 = input.length - 4,
1966            pos2 = input.length - 2;
1967        array[HOUR] = toInt(input.substr(0, pos1));
1968        array[MINUTE] = toInt(input.substr(pos1, 2));
1969        array[SECOND] = toInt(input.substr(pos2));
1970        getParsingFlags(config).bigHour = true;
1971    });
1972    addParseToken('Hmm', function (input, array, config) {
1973        var pos = input.length - 2;
1974        array[HOUR] = toInt(input.substr(0, pos));
1975        array[MINUTE] = toInt(input.substr(pos));
1976    });
1977    addParseToken('Hmmss', function (input, array, config) {
1978        var pos1 = input.length - 4,
1979            pos2 = input.length - 2;
1980        array[HOUR] = toInt(input.substr(0, pos1));
1981        array[MINUTE] = toInt(input.substr(pos1, 2));
1982        array[SECOND] = toInt(input.substr(pos2));
1983    });
1984
1985    // LOCALES
1986
1987    function localeIsPM(input) {
1988        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
1989        // Using charAt should be more compatible.
1990        return (input + '').toLowerCase().charAt(0) === 'p';
1991    }
1992
1993    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
1994        // Setting the hour should keep the time, because the user explicitly
1995        // specified which hour they want. So trying to maintain the same hour (in
1996        // a new timezone) makes sense. Adding/subtracting hours does not follow
1997        // this rule.
1998        getSetHour = makeGetSet('Hours', true);
1999
2000    function localeMeridiem(hours, minutes, isLower) {
2001        if (hours > 11) {
2002            return isLower ? 'pm' : 'PM';
2003        } else {
2004            return isLower ? 'am' : 'AM';
2005        }
2006    }
2007
2008    var baseConfig = {
2009        calendar: defaultCalendar,
2010        longDateFormat: defaultLongDateFormat,
2011        invalidDate: defaultInvalidDate,
2012        ordinal: defaultOrdinal,
2013        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
2014        relativeTime: defaultRelativeTime,
2015
2016        months: defaultLocaleMonths,
2017        monthsShort: defaultLocaleMonthsShort,
2018
2019        week: defaultLocaleWeek,
2020
2021        weekdays: defaultLocaleWeekdays,
2022        weekdaysMin: defaultLocaleWeekdaysMin,
2023        weekdaysShort: defaultLocaleWeekdaysShort,
2024
2025        meridiemParse: defaultLocaleMeridiemParse,
2026    };
2027
2028    // internal storage for locale config files
2029    var locales = {},
2030        localeFamilies = {},
2031        globalLocale;
2032
2033    function commonPrefix(arr1, arr2) {
2034        var i,
2035            minl = Math.min(arr1.length, arr2.length);
2036        for (i = 0; i < minl; i += 1) {
2037            if (arr1[i] !== arr2[i]) {
2038                return i;
2039            }
2040        }
2041        return minl;
2042    }
2043
2044    function normalizeLocale(key) {
2045        return key ? key.toLowerCase().replace('_', '-') : key;
2046    }
2047
2048    // pick the locale from the array
2049    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
2050    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
2051    function chooseLocale(names) {
2052        var i = 0,
2053            j,
2054            next,
2055            locale,
2056            split;
2057
2058        while (i < names.length) {
2059            split = normalizeLocale(names[i]).split('-');
2060            j = split.length;
2061            next = normalizeLocale(names[i + 1]);
2062            next = next ? next.split('-') : null;
2063            while (j > 0) {
2064                locale = loadLocale(split.slice(0, j).join('-'));
2065                if (locale) {
2066                    return locale;
2067                }
2068                if (
2069                    next &&
2070                    next.length >= j &&
2071                    commonPrefix(split, next) >= j - 1
2072                ) {
2073                    //the next array item is better than a shallower substring of this one
2074                    break;
2075                }
2076                j--;
2077            }
2078            i++;
2079        }
2080        return globalLocale;
2081    }
2082
2083    function 
vendor: 7,449 bytes, lines 2083-2290
2083isLocaleNameSane(name) {
2084        // Prevent names that look like filesystem paths, i.e contain '/' or '\'
2085        return name.match('^[^/\\\\]*$') != null;
2086    }
2087
2088    function loadLocale(name) {
2089        var oldLocale = null,
2090            aliasedRequire;
2091        // TODO: Find a better way to register and load all the locales in Node
2092        if (
2093            locales[name] === undefined &&
2094            typeof module !== 'undefined' &&
2095            module &&
2096            module.exports &&
2097            isLocaleNameSane(name)
2098        ) {
2099            try {
2100                oldLocale = globalLocale._abbr;
2101                aliasedRequire = require;
2102                aliasedRequire('./locale/' + name);
2103                getSetGlobalLocale(oldLocale);
2104            } catch (e) {
2105                // mark as not found to avoid repeating expensive file require call causing high CPU
2106                // when trying to find en-US, en_US, en-us for every format call
2107                locales[name] = null; // null means not found
2108            }
2109        }
2110        return locales[name];
2111    }
2112
2113    // This function will load locale and then set the global locale.  If
2114    // no arguments are passed in, it will simply return the current global
2115    // locale key.
2116    function getSetGlobalLocale(key, values) {
2117        var data;
2118        if (key) {
2119            if (isUndefined(values)) {
2120                data = getLocale(key);
2121            } else {
2122                data = defineLocale(key, values);
2123            }
2124
2125            if (data) {
2126                // moment.duration._locale = moment._locale = data;
2127                globalLocale = data;
2128            } else {
2129                if (typeof console !== 'undefined' && console.warn) {
2130                    //warn user if arguments are passed but the locale could not be set
2131                    console.warn(
2132                        'Locale ' + key + ' not found. Did you forget to load it?'
2133                    );
2134                }
2135            }
2136        }
2137
2138        return globalLocale._abbr;
2139    }
2140
2141    function defineLocale(name, config) {
2142        if (config !== null) {
2143            var locale,
2144                parentConfig = baseConfig;
2145            config.abbr = name;
2146            if (locales[name] != null) {
2147                deprecateSimple(
2148                    'defineLocaleOverride',
2149                    'use moment.updateLocale(localeName, config) to change ' +
2150                        'an existing locale. moment.defineLocale(localeName, ' +
2151                        'config) should only be used for creating a new locale ' +
2152                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
2153                );
2154                parentConfig = locales[name]._config;
2155            } else if (config.parentLocale != null) {
2156                if (locales[config.parentLocale] != null) {
2157                    parentConfig = locales[config.parentLocale]._config;
2158                } else {
2159                    locale = loadLocale(config.parentLocale);
2160                    if (locale != null) {
2161                        parentConfig = locale._config;
2162                    } else {
2163                        if (!localeFamilies[config.parentLocale]) {
2164                            localeFamilies[config.parentLocale] = [];
2165                        }
2166                        localeFamilies[config.parentLocale].push({
2167                            name: name,
2168                            config: config,
2169                        });
2170                        return null;
2171                    }
2172                }
2173            }
2174            locales[name] = new Locale(mergeConfigs(parentConfig, config));
2175
2176            if (localeFamilies[name]) {
2177                localeFamilies[name].forEach(function (x) {
2178                    defineLocale(x.name, x.config);
2179                });
2180            }
2181
2182            // backwards compat for now: also set the locale
2183            // make sure we set the locale AFTER all child locales have been
2184            // created, so we won't end up with the child locale set.
2185            getSetGlobalLocale(name);
2186
2187            return locales[name];
2188        } else {
2189            // useful for testing
2190            delete locales[name];
2191            return null;
2192        }
2193    }
2194
2195    function updateLocale(name, config) {
2196        if (config != null) {
2197            var locale,
2198                tmpLocale,
2199                parentConfig = baseConfig;
2200
2201            if (locales[name] != null && locales[name].parentLocale != null) {
2202                // Update existing child locale in-place to avoid memory-leaks
2203                locales[name].set(mergeConfigs(locales[name]._config, config));
2204            } else {
2205                // MERGE
2206                tmpLocale = loadLocale(name);
2207                if (tmpLocale != null) {
2208                    parentConfig = tmpLocale._config;
2209                }
2210                config = mergeConfigs(parentConfig, config);
2211                if (tmpLocale == null) {
2212                    // updateLocale is called for creating a new locale
2213                    // Set abbr so it will have a name (getters return
2214                    // undefined otherwise).
2215                    config.abbr = name;
2216                }
2217                locale = new Locale(config);
2218                locale.parentLocale = locales[name];
2219                locales[name] = locale;
2220            }
2221
2222            // backwards compat for now: also set the locale
2223            getSetGlobalLocale(name);
2224        } else {
2225            // pass null for config to unupdate, useful for tests
2226            if (locales[name] != null) {
2227                if (locales[name].parentLocale != null) {
2228                    locales[name] = locales[name].parentLocale;
2229                    if (name === getSetGlobalLocale()) {
2230                        getSetGlobalLocale(name);
2231                    }
2232                } else if (locales[name] != null) {
2233                    delete locales[name];
2234                }
2235            }
2236        }
2237        return locales[name];
2238    }
2239
2240    // returns locale data
2241    function getLocale(key) {
2242        var locale;
2243
2244        if (key && key._locale && key._locale._abbr) {
2245            key = key._locale._abbr;
2246        }
2247
2248        if (!key) {
2249            return globalLocale;
2250        }
2251
2252        if (!isArray(key)) {
2253            //short-circuit everything else
2254            locale = loadLocale(key);
2255            if (locale) {
2256                return locale;
2257            }
2258            key = [key];
2259        }
2260
2261        return chooseLocale(key);
2262    }
2263
2264    function listLocales() {
2265        return keys(locales);
2266    }
2267
2268    function checkOverflow(m) {
2269        var overflow,
2270            a = m._a;
2271
2272        if (a && getParsingFlags(m).overflow === -2) {
2273            overflow =
2274                a[MONTH] < 0 || a[MONTH] > 11
2275                    ? MONTH
2276                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
2277                    ? DATE
2278                    : a[HOUR] < 0 ||
2279                      a[HOUR] > 24 ||
2280                      (a[HOUR] === 24 &&
2281                          (a[MINUTE] !== 0 ||
2282                              a[SECOND] !== 0 ||
2283                              a[MILLISECOND] !== 0))
2284                    ? HOUR
2285                    : a[MINUTE] < 0 || a[MINUTE] > 59
2286                    ? MINUTE
2287                    : a[SECOND] < 0 || a[SECOND] > 59
2288                    ? SECOND
2289                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
2290                    ? MILLISECOND
vendor: 9,346 bytes, lines 2291-2574
2291                    : -1;
2292
2293            if (
2294                getParsingFlags(m)._overflowDayOfYear &&
2295                (overflow < YEAR || overflow > DATE)
2296            ) {
2297                overflow = DATE;
2298            }
2299            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
2300                overflow = WEEK;
2301            }
2302            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
2303                overflow = WEEKDAY;
2304            }
2305
2306            getParsingFlags(m).overflow = overflow;
2307        }
2308
2309        return m;
2310    }
2311
2312    // iso 8601 regex
2313    // 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)
2314    var extendedIsoRegex =
2315            /^\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)?)?$/,
2316        basicIsoRegex =
2317            /^\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)?)?$/,
2318        tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
2319        isoDates = [
2320            ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
2321            ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
2322            ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
2323            ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
2324            ['YYYY-DDD', /\d{4}-\d{3}/],
2325            ['YYYY-MM', /\d{4}-\d\d/, false],
2326            ['YYYYYYMMDD', /[+-]\d{10}/],
2327            ['YYYYMMDD', /\d{8}/],
2328            ['GGGG[W]WWE', /\d{4}W\d{3}/],
2329            ['GGGG[W]WW', /\d{4}W\d{2}/, false],
2330            ['YYYYDDD', /\d{7}/],
2331            ['YYYYMM', /\d{6}/, false],
2332            ['YYYY', /\d{4}/, false],
2333        ],
2334        // iso time formats and regexes
2335        isoTimes = [
2336            ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
2337            ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
2338            ['HH:mm:ss', /\d\d:\d\d:\d\d/],
2339            ['HH:mm', /\d\d:\d\d/],
2340            ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
2341            ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
2342            ['HHmmss', /\d\d\d\d\d\d/],
2343            ['HHmm', /\d\d\d\d/],
2344            ['HH', /\d\d/],
2345        ],
2346        aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
2347        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
2348        rfc2822 =
2349            /^(?:(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}))$/,
2350        obsOffsets = {
2351            UT: 0,
2352            GMT: 0,
2353            EDT: -4 * 60,
2354            EST: -5 * 60,
2355            CDT: -5 * 60,
2356            CST: -6 * 60,
2357            MDT: -6 * 60,
2358            MST: -7 * 60,
2359            PDT: -7 * 60,
2360            PST: -8 * 60,
2361        };
2362
2363    // date from iso format
2364    function configFromISO(config) {
2365        var i,
2366            l,
2367            string = config._i,
2368            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
2369            allowTime,
2370            dateFormat,
2371            timeFormat,
2372            tzFormat,
2373            isoDatesLen = isoDates.length,
2374            isoTimesLen = isoTimes.length;
2375
2376        if (match) {
2377            getParsingFlags(config).iso = true;
2378            for (i = 0, l = isoDatesLen; i < l; i++) {
2379                if (isoDates[i][1].exec(match[1])) {
2380                    dateFormat = isoDates[i][0];
2381                    allowTime = isoDates[i][2] !== false;
2382                    break;
2383                }
2384            }
2385            if (dateFormat == null) {
2386                config._isValid = false;
2387                return;
2388            }
2389            if (match[3]) {
2390                for (i = 0, l = isoTimesLen; i < l; i++) {
2391                    if (isoTimes[i][1].exec(match[3])) {
2392                        // match[2] should be 'T' or space
2393                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
2394                        break;
2395                    }
2396                }
2397                if (timeFormat == null) {
2398                    config._isValid = false;
2399                    return;
2400                }
2401            }
2402            if (!allowTime && timeFormat != null) {
2403                config._isValid = false;
2404                return;
2405            }
2406            if (match[4]) {
2407                if (tzRegex.exec(match[4])) {
2408                    tzFormat = 'Z';
2409                } else {
2410                    config._isValid = false;
2411                    return;
2412                }
2413            }
2414            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
2415            configFromStringAndFormat(config);
2416        } else {
2417            config._isValid = false;
2418        }
2419    }
2420
2421    function extractFromRFC2822Strings(
2422        yearStr,
2423        monthStr,
2424        dayStr,
2425        hourStr,
2426        minuteStr,
2427        secondStr
2428    ) {
2429        var result = [
2430            untruncateYear(yearStr),
2431            defaultLocaleMonthsShort.indexOf(monthStr),
2432            parseInt(dayStr, 10),
2433            parseInt(hourStr, 10),
2434            parseInt(minuteStr, 10),
2435        ];
2436
2437        if (secondStr) {
2438            result.push(parseInt(secondStr, 10));
2439        }
2440
2441        return result;
2442    }
2443
2444    function untruncateYear(yearStr) {
2445        var year = parseInt(yearStr, 10);
2446        if (year <= 49) {
2447            return 2000 + year;
2448        } else if (year <= 999) {
2449            return 1900 + year;
2450        }
2451        return year;
2452    }
2453
2454    function preprocessRFC2822(s) {
2455        // Remove comments and folding whitespace and replace multiple-spaces with a single space
2456        return s
2457            .replace(/\([^()]*\)|[\n\t]/g, ' ')
2458            .replace(/(\s\s+)/g, ' ')
2459            .replace(/^\s\s*/, '')
2460            .replace(/\s\s*$/, '');
2461    }
2462
2463    function checkWeekday(weekdayStr, parsedInput, config) {
2464        if (weekdayStr) {
2465            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
2466            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
2467                weekdayActual = new Date(
2468                    parsedInput[0],
2469                    parsedInput[1],
2470                    parsedInput[2]
2471                ).getDay();
2472            if (weekdayProvided !== weekdayActual) {
2473                getParsingFlags(config).weekdayMismatch = true;
2474                config._isValid = false;
2475                return false;
2476            }
2477        }
2478        return true;
2479    }
2480
2481    function calculateOffset(obsOffset, militaryOffset, numOffset) {
2482        if (obsOffset) {
2483            return obsOffsets[obsOffset];
2484        } else if (militaryOffset) {
2485            // the only allowed military tz is Z
2486            return 0;
2487        } else {
2488            var hm = parseInt(numOffset, 10),
2489                m = hm % 100,
2490                h = (hm - m) / 100;
2491            return h * 60 + m;
2492        }
2493    }
2494
2495    // date and time from ref 2822 format
2496    function configFromRFC2822(config) {
2497        var match = rfc2822.exec(preprocessRFC2822(config._i)),
2498            parsedArray;
2499        if (match) {
2500            parsedArray = extractFromRFC2822Strings(
2501                match[4],
2502                match[3],
2503                match[2],
2504                match[5],
2505                match[6],
2506                match[7]
2507            );
2508            if (!checkWeekday(match[1], parsedArray, config)) {
2509                return;
2510            }
2511
2512            config._a = parsedArray;
2513            config._tzm = calculateOffset(match[8], match[9], match[10]);
2514
2515            config._d = createUTCDate.apply(null, config._a);
2516            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
2517
2518            getParsingFlags(config).rfc2822 = true;
2519        } else {
2520            config._isValid = false;
2521        }
2522    }
2523
2524    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
2525    function configFromString(config) {
2526        var matched = aspNetJsonRegex.exec(config._i);
2527        if (matched !== null) {
2528            config._d = new Date(+matched[1]);
2529            return;
2530        }
2531
2532        configFromISO(config);
2533        if (config._isValid === false) {
2534            delete config._isValid;
2535        } else {
2536            return;
2537        }
2538
2539        configFromRFC2822(config);
2540        if (config._isValid === false) {
2541            delete config._isValid;
2542        } else {
2543            return;
2544        }
2545
2546        if (config._strict) {
2547            config._isValid = false;
2548        } else {
2549            // Final attempt, use Input Fallback
2550            hooks.createFromInputFallback(config);
2551        }
2552    }
2553
2554    hooks.createFromInputFallback = deprecate(
2555        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
2556            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
2557            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
2558        function (config) {
2559            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
2560        }
2561    );
2562
2563    // Pick the first defined of two or three arguments.
2564    function defaults(a, b, c) {
2565        if (a != null) {
2566            return a;
2567        }
2568        if (b != null) {
2569            return b;
2570        }
2571        return c;
2572    }
2573
2574    function currentDateArray(config
vendor: 17,694 bytes, lines 2574-3135
2574) {
2575        // hooks is actually the exported moment object
2576        var nowValue = new Date(hooks.now());
2577        if (config._useUTC) {
2578            return [
2579                nowValue.getUTCFullYear(),
2580                nowValue.getUTCMonth(),
2581                nowValue.getUTCDate(),
2582            ];
2583        }
2584        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
2585    }
2586
2587    // convert an array to a date.
2588    // the array should mirror the parameters below
2589    // note: all values past the year are optional and will default to the lowest possible value.
2590    // [year, month, day , hour, minute, second, millisecond]
2591    function configFromArray(config) {
2592        var i,
2593            date,
2594            input = [],
2595            currentDate,
2596            expectedWeekday,
2597            yearToUse;
2598
2599        if (config._d) {
2600            return;
2601        }
2602
2603        currentDate = currentDateArray(config);
2604
2605        //compute day of the year from weeks and weekdays
2606        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
2607            dayOfYearFromWeekInfo(config);
2608        }
2609
2610        //if the day of the year is set, figure out what it is
2611        if (config._dayOfYear != null) {
2612            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
2613
2614            if (
2615                config._dayOfYear > daysInYear(yearToUse) ||
2616                config._dayOfYear === 0
2617            ) {
2618                getParsingFlags(config)._overflowDayOfYear = true;
2619            }
2620
2621            date = createUTCDate(yearToUse, 0, config._dayOfYear);
2622            config._a[MONTH] = date.getUTCMonth();
2623            config._a[DATE] = date.getUTCDate();
2624        }
2625
2626        // Default to current date.
2627        // * if no year, month, day of month are given, default to today
2628        // * if day of month is given, default month and year
2629        // * if month is given, default only year
2630        // * if year is given, don't default anything
2631        for (i = 0; i < 3 && config._a[i] == null; ++i) {
2632            config._a[i] = input[i] = currentDate[i];
2633        }
2634
2635        // Zero out whatever was not defaulted, including time
2636        for (; i < 7; i++) {
2637            config._a[i] = input[i] =
2638                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
2639        }
2640
2641        // Check for 24:00:00.000
2642        if (
2643            config._a[HOUR] === 24 &&
2644            config._a[MINUTE] === 0 &&
2645            config._a[SECOND] === 0 &&
2646            config._a[MILLISECOND] === 0
2647        ) {
2648            config._nextDay = true;
2649            config._a[HOUR] = 0;
2650        }
2651
2652        config._d = (config._useUTC ? createUTCDate : createDate).apply(
2653            null,
2654            input
2655        );
2656        expectedWeekday = config._useUTC
2657            ? config._d.getUTCDay()
2658            : config._d.getDay();
2659
2660        // Apply timezone offset from input. The actual utcOffset can be changed
2661        // with parseZone.
2662        if (config._tzm != null) {
2663            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
2664        }
2665
2666        if (config._nextDay) {
2667            config._a[HOUR] = 24;
2668        }
2669
2670        // check for mismatching day of week
2671        if (
2672            config._w &&
2673            typeof config._w.d !== 'undefined' &&
2674            config._w.d !== expectedWeekday
2675        ) {
2676            getParsingFlags(config).weekdayMismatch = true;
2677        }
2678    }
2679
2680    function dayOfYearFromWeekInfo(config) {
2681        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
2682
2683        w = config._w;
2684        if (w.GG != null || w.W != null || w.E != null) {
2685            dow = 1;
2686            doy = 4;
2687
2688            // TODO: We need to take the current isoWeekYear, but that depends on
2689            // how we interpret now (local, utc, fixed offset). So create
2690            // a now version of current config (take local/utc/offset flags, and
2691            // create now).
2692            weekYear = defaults(
2693                w.GG,
2694                config._a[YEAR],
2695                weekOfYear(createLocal(), 1, 4).year
2696            );
2697            week = defaults(w.W, 1);
2698            weekday = defaults(w.E, 1);
2699            if (weekday < 1 || weekday > 7) {
2700                weekdayOverflow = true;
2701            }
2702        } else {
2703            dow = config._locale._week.dow;
2704            doy = config._locale._week.doy;
2705
2706            curWeek = weekOfYear(createLocal(), dow, doy);
2707
2708            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
2709
2710            // Default to current week.
2711            week = defaults(w.w, curWeek.week);
2712
2713            if (w.d != null) {
2714                // weekday -- low day numbers are considered next week
2715                weekday = w.d;
2716                if (weekday < 0 || weekday > 6) {
2717                    weekdayOverflow = true;
2718                }
2719            } else if (w.e != null) {
2720                // local weekday -- counting starts from beginning of week
2721                weekday = w.e + dow;
2722                if (w.e < 0 || w.e > 6) {
2723                    weekdayOverflow = true;
2724                }
2725            } else {
2726                // default to beginning of week
2727                weekday = dow;
2728            }
2729        }
2730        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
2731            getParsingFlags(config)._overflowWeeks = true;
2732        } else if (weekdayOverflow != null) {
2733            getParsingFlags(config)._overflowWeekday = true;
2734        } else {
2735            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
2736            config._a[YEAR] = temp.year;
2737            config._dayOfYear = temp.dayOfYear;
2738        }
2739    }
2740
2741    // constant that refers to the ISO standard
2742    hooks.ISO_8601 = function () {};
2743
2744    // constant that refers to the RFC 2822 form
2745    hooks.RFC_2822 = function () {};
2746
2747    // date from string and format string
2748    function configFromStringAndFormat(config) {
2749        // TODO: Move this to another part of the creation flow to prevent circular deps
2750        if (config._f === hooks.ISO_8601) {
2751            configFromISO(config);
2752            return;
2753        }
2754        if (config._f === hooks.RFC_2822) {
2755            configFromRFC2822(config);
2756            return;
2757        }
2758        config._a = [];
2759        getParsingFlags(config).empty = true;
2760
2761        // This array is used to make a Date, either with `new Date` or `Date.UTC`
2762        var string = '' + config._i,
2763            i,
2764            parsedInput,
2765            tokens,
2766            token,
2767            skipped,
2768            stringLength = string.length,
2769            totalParsedInputLength = 0,
2770            era,
2771            tokenLen;
2772
2773        tokens =
2774            expandFormat(config._f, config._locale).match(formattingTokens) || [];
2775        tokenLen = tokens.length;
2776        for (i = 0; i < tokenLen; i++) {
2777            token = tokens[i];
2778            parsedInput = (string.match(getParseRegexForToken(token, config)) ||
2779                [])[0];
2780            if (parsedInput) {
2781                skipped = string.substr(0, string.indexOf(parsedInput));
2782                if (skipped.length > 0) {
2783                    getParsingFlags(config).unusedInput.push(skipped);
2784                }
2785                string = string.slice(
2786                    string.indexOf(parsedInput) + parsedInput.length
2787                );
2788                totalParsedInputLength += parsedInput.length;
2789            }
2790            // don't parse if it's not a known token
2791            if (formatTokenFunctions[token]) {
2792                if (parsedInput) {
2793                    getParsingFlags(config).empty = false;
2794                } else {
2795                    getParsingFlags(config).unusedTokens.push(token);
2796                }
2797                addTimeToArrayFromToken(token, parsedInput, config);
2798            } else if (config._strict && !parsedInput) {
2799                getParsingFlags(config).unusedTokens.push(token);
2800            }
2801        }
2802
2803        // add remaining unparsed input length to the string
2804        getParsingFlags(config).charsLeftOver =
2805            stringLength - totalParsedInputLength;
2806        if (string.length > 0) {
2807            getParsingFlags(config).unusedInput.push(string);
2808        }
2809
2810        // clear _12h flag if hour is <= 12
2811        if (
2812            config._a[HOUR] <= 12 &&
2813            getParsingFlags(config).bigHour === true &&
2814            config._a[HOUR] > 0
2815        ) {
2816            getParsingFlags(config).bigHour = undefined;
2817        }
2818
2819        getParsingFlags(config).parsedDateParts = config._a.slice(0);
2820        getParsingFlags(config).meridiem = config._meridiem;
2821        // handle meridiem
2822        config._a[HOUR] = meridiemFixWrap(
2823            config._locale,
2824            config._a[HOUR],
2825            config._meridiem
2826        );
2827
2828        // handle era
2829        era = getParsingFlags(config).era;
2830        if (era !== null) {
2831            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
2832        }
2833
2834        configFromArray(config);
2835        checkOverflow(config);
2836    }
2837
2838    function meridiemFixWrap(locale, hour, meridiem) {
2839        var isPm;
2840
2841        if (meridiem == null) {
2842            // nothing to do
2843            return hour;
2844        }
2845        if (locale.meridiemHour != null) {
2846            return locale.meridiemHour(hour, meridiem);
2847        } else if (locale.isPM != null) {
2848            // Fallback
2849            isPm = locale.isPM(meridiem);
2850            if (isPm && hour < 12) {
2851                hour += 12;
2852            }
2853            if (!isPm && hour === 12) {
2854                hour = 0;
2855            }
2856            return hour;
2857        } else {
2858            // this is not supposed to happen
2859            return hour;
2860        }
2861    }
2862
2863    // date from string and array of format strings
2864    function configFromStringAndArray(config) {
2865        var tempConfig,
2866            bestMoment,
2867            scoreToBeat,
2868            i,
2869            currentScore,
2870            validFormatFound,
2871            bestFormatIsValid = false,
2872            configfLen = config._f.length;
2873
2874        if (configfLen === 0) {
2875            getParsingFlags(config).invalidFormat = true;
2876            config._d = new Date(NaN);
2877            return;
2878        }
2879
2880        for (i = 0; i < configfLen; i++) {
2881            currentScore = 0;
2882            validFormatFound = false;
2883            tempConfig = copyConfig({}, config);
2884            if (config._useUTC != null) {
2885                tempConfig._useUTC = config._useUTC;
2886            }
2887            tempConfig._f = config._f[i];
2888            configFromStringAndFormat(tempConfig);
2889
2890            if (isValid(tempConfig)) {
2891                validFormatFound = true;
2892            }
2893
2894            // if there is any input that was not parsed add a penalty for that format
2895            currentScore += getParsingFlags(tempConfig).charsLeftOver;
2896
2897            //or tokens
2898            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
2899
2900            getParsingFlags(tempConfig).score = currentScore;
2901
2902            if (!bestFormatIsValid) {
2903                if (
2904                    scoreToBeat == null ||
2905                    currentScore < scoreToBeat ||
2906                    validFormatFound
2907                ) {
2908                    scoreToBeat = currentScore;
2909                    bestMoment = tempConfig;
2910                    if (validFormatFound) {
2911                        bestFormatIsValid = true;
2912                    }
2913                }
2914            } else {
2915                if (currentScore < scoreToBeat) {
2916                    scoreToBeat = currentScore;
2917                    bestMoment = tempConfig;
2918                }
2919            }
2920        }
2921
2922        extend(config, bestMoment || tempConfig);
2923    }
2924
2925    function configFromObject(config) {
2926        if (config._d) {
2927            return;
2928        }
2929
2930        var i = normalizeObjectUnits(config._i),
2931            dayOrDate = i.day === undefined ? i.date : i.day;
2932        config._a = map(
2933            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
2934            function (obj) {
2935                return obj && parseInt(obj, 10);
2936            }
2937        );
2938
2939        configFromArray(config);
2940    }
2941
2942    function createFromConfig(config) {
2943        var res = new Moment(checkOverflow(prepareConfig(config)));
2944        if (res._nextDay) {
2945            // Adding is smart enough around DST
2946            res.add(1, 'd');
2947            res._nextDay = undefined;
2948        }
2949
2950        return res;
2951    }
2952
2953    function prepareConfig(config) {
2954        var input = config._i,
2955            format = config._f;
2956
2957        config._locale = config._locale || getLocale(config._l);
2958
2959        if (input === null || (format === undefined && input === '')) {
2960            return createInvalid({ nullInput: true });
2961        }
2962
2963        if (typeof input === 'string') {
2964            config._i = input = config._locale.preparse(input);
2965        }
2966
2967        if (isMoment(input)) {
2968            return new Moment(checkOverflow(input));
2969        } else if (isDate(input)) {
2970            config._d = input;
2971        } else if (isArray(format)) {
2972            configFromStringAndArray(config);
2973        } else if (format) {
2974            configFromStringAndFormat(config);
2975        } else {
2976            configFromInput(config);
2977        }
2978
2979        if (!isValid(config)) {
2980            config._d = null;
2981        }
2982
2983        return config;
2984    }
2985
2986    function configFromInput(config) {
2987        var input = config._i;
2988        if (isUndefined(input)) {
2989            config._d = new Date(hooks.now());
2990        } else if (isDate(input)) {
2991            config._d = new Date(input.valueOf());
2992        } else if (typeof input === 'string') {
2993            configFromString(config);
2994        } else if (isArray(input)) {
2995            config._a = map(input.slice(0), function (obj) {
2996                return parseInt(obj, 10);
2997            });
2998            configFromArray(config);
2999        } else if (isObject(input)) {
3000            configFromObject(config);
3001        } else if (isNumber(input)) {
3002            // from milliseconds
3003            config._d = new Date(input);
3004        } else {
3005            hooks.createFromInputFallback(config);
3006        }
3007    }
3008
3009    function createLocalOrUTC(input, format, locale, strict, isUTC) {
3010        var c = {};
3011
3012        if (format === true || format === false) {
3013            strict = format;
3014            format = undefined;
3015        }
3016
3017        if (locale === true || locale === false) {
3018            strict = locale;
3019            locale = undefined;
3020        }
3021
3022        if (
3023            (isObject(input) && isObjectEmpty(input)) ||
3024            (isArray(input) && input.length === 0)
3025        ) {
3026            input = undefined;
3027        }
3028        // object construction must be done this way.
3029        // https://github.com/moment/moment/issues/1423
3030        c._isAMomentObject = true;
3031        c._useUTC = c._isUTC = isUTC;
3032        c._l = locale;
3033        c._i = input;
3034        c._f = format;
3035        c._strict = strict;
3036
3037        return createFromConfig(c);
3038    }
3039
3040    function createLocal(input, format, locale, strict) {
3041        return createLocalOrUTC(input, format, locale, strict, false);
3042    }
3043
3044    var prototypeMin = deprecate(
3045            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
3046            function () {
3047                var other = createLocal.apply(null, arguments);
3048                if (this.isValid() && other.isValid()) {
3049                    return other < this ? this : other;
3050                } else {
3051                    return createInvalid();
3052                }
3053            }
3054        ),
3055        prototypeMax = deprecate(
3056            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
3057            function () {
3058                var other = createLocal.apply(null, arguments);
3059                if (this.isValid() && other.isValid()) {
3060                    return other > this ? this : other;
3061                } else {
3062                    return createInvalid();
3063                }
3064            }
3065        );
3066
3067    // Pick a moment m from moments so that m[fn](other) is true for all
3068    // other. This relies on the function fn to be transitive.
3069    //
3070    // moments should either be an array of moment objects or an array, whose
3071    // first element is an array of moment objects.
3072    function pickBy(fn, moments) {
3073        var res, i;
3074        if (moments.length === 1 && isArray(moments[0])) {
3075            moments = moments[0];
3076        }
3077        if (!moments.length) {
3078            return createLocal();
3079        }
3080        res = moments[0];
3081        for (i = 1; i < moments.length; ++i) {
3082            if (!moments[i].isValid() || moments[i][fn](res)) {
3083                res = moments[i];
3084            }
3085        }
3086        return res;
3087    }
3088
3089    // TODO: Use [].sort instead?
3090    function min() {
3091        var args = [].slice.call(arguments, 0);
3092
3093        return pickBy('isBefore', args);
3094    }
3095
3096    function max() {
3097        var args = [].slice.call(arguments, 0);
3098
3099        return pickBy('isAfter', args);
3100    }
3101
3102    var now = function () {
3103        return Date.now ? Date.now() : +new Date();
3104    };
3105
3106    var ordering = [
3107        'year',
3108        'quarter',
3109        'month',
3110        'week',
3111        'day',
3112        'hour',
3113        'minute',
3114        'second',
3115        'millisecond',
3116    ];
3117
3118    function isDurationValid(m) {
3119        var key,
3120            unitHasDecimal = false,
3121            i,
3122            orderLen = ordering.length;
3123        for (key in m) {
3124            if (
3125                hasOwnProp(m, key) &&
3126                !(
3127                    indexOf.call(ordering, key) !== -1 &&
3128                    (m[key] == null || !isNaN(m[key]))
3129                )
3130            ) {
3131                return false;
3132            }
3133        }
3134
3135        for (i = 0; i < orderLen
vendor: 10,251 bytes, lines 3135-3460
3135; ++i) {
3136            if (m[ordering[i]]) {
3137                if (unitHasDecimal) {
3138                    return false; // only allow non-integers for smallest unit
3139                }
3140                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
3141                    unitHasDecimal = true;
3142                }
3143            }
3144        }
3145
3146        return true;
3147    }
3148
3149    function isValid$1() {
3150        return this._isValid;
3151    }
3152
3153    function createInvalid$1() {
3154        return createDuration(NaN);
3155    }
3156
3157    function Duration(duration) {
3158        var normalizedInput = normalizeObjectUnits(duration),
3159            years = normalizedInput.year || 0,
3160            quarters = normalizedInput.quarter || 0,
3161            months = normalizedInput.month || 0,
3162            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
3163            days = normalizedInput.day || 0,
3164            hours = normalizedInput.hour || 0,
3165            minutes = normalizedInput.minute || 0,
3166            seconds = normalizedInput.second || 0,
3167            milliseconds = normalizedInput.millisecond || 0;
3168
3169        this._isValid = isDurationValid(normalizedInput);
3170
3171        // representation for dateAddRemove
3172        this._milliseconds =
3173            +milliseconds +
3174            seconds * 1e3 + // 1000
3175            minutes * 6e4 + // 1000 * 60
3176            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
3177        // Because of dateAddRemove treats 24 hours as different from a
3178        // day when working around DST, we need to store them separately
3179        this._days = +days + weeks * 7;
3180        // It is impossible to translate months into days without knowing
3181        // which months you are are talking about, so we have to store
3182        // it separately.
3183        this._months = +months + quarters * 3 + years * 12;
3184
3185        this._data = {};
3186
3187        this._locale = getLocale();
3188
3189        this._bubble();
3190    }
3191
3192    function isDuration(obj) {
3193        return obj instanceof Duration;
3194    }
3195
3196    function absRound(number) {
3197        if (number < 0) {
3198            return Math.round(-1 * number) * -1;
3199        } else {
3200            return Math.round(number);
3201        }
3202    }
3203
3204    // compare two arrays, return the number of differences
3205    function compareArrays(array1, array2, dontConvert) {
3206        var len = Math.min(array1.length, array2.length),
3207            lengthDiff = Math.abs(array1.length - array2.length),
3208            diffs = 0,
3209            i;
3210        for (i = 0; i < len; i++) {
3211            if (
3212                (dontConvert && array1[i] !== array2[i]) ||
3213                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
3214            ) {
3215                diffs++;
3216            }
3217        }
3218        return diffs + lengthDiff;
3219    }
3220
3221    // FORMATTING
3222
3223    function offset(token, separator) {
3224        addFormatToken(token, 0, 0, function () {
3225            var offset = this.utcOffset(),
3226                sign = '+';
3227            if (offset < 0) {
3228                offset = -offset;
3229                sign = '-';
3230            }
3231            return (
3232                sign +
3233                zeroFill(~~(offset / 60), 2) +
3234                separator +
3235                zeroFill(~~offset % 60, 2)
3236            );
3237        });
3238    }
3239
3240    offset('Z', ':');
3241    offset('ZZ', '');
3242
3243    // PARSING
3244
3245    addRegexToken('Z', matchShortOffset);
3246    addRegexToken('ZZ', matchShortOffset);
3247    addParseToken(['Z', 'ZZ'], function (input, array, config) {
3248        config._useUTC = true;
3249        config._tzm = offsetFromString(matchShortOffset, input);
3250    });
3251
3252    // HELPERS
3253
3254    // timezone chunker
3255    // '+10:00' > ['10',  '00']
3256    // '-1530'  > ['-15', '30']
3257    var chunkOffset = /([\+\-]|\d\d)/gi;
3258
3259    function offsetFromString(matcher, string) {
3260        var matches = (string || '').match(matcher),
3261            chunk,
3262            parts,
3263            minutes;
3264
3265        if (matches === null) {
3266            return null;
3267        }
3268
3269        chunk = matches[matches.length - 1] || [];
3270        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
3271        minutes = +(parts[1] * 60) + toInt(parts[2]);
3272
3273        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
3274    }
3275
3276    // Return a moment from input, that is local/utc/zone equivalent to model.
3277    function cloneWithOffset(input, model) {
3278        var res, diff;
3279        if (model._isUTC) {
3280            res = model.clone();
3281            diff =
3282                (isMoment(input) || isDate(input)
3283                    ? input.valueOf()
3284                    : createLocal(input).valueOf()) - res.valueOf();
3285            // Use low-level api, because this fn is low-level api.
3286            res._d.setTime(res._d.valueOf() + diff);
3287            hooks.updateOffset(res, false);
3288            return res;
3289        } else {
3290            return createLocal(input).local();
3291        }
3292    }
3293
3294    function getDateOffset(m) {
3295        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
3296        // https://github.com/moment/moment/pull/1871
3297        return -Math.round(m._d.getTimezoneOffset());
3298    }
3299
3300    // HOOKS
3301
3302    // This function will be called whenever a moment is mutated.
3303    // It is intended to keep the offset in sync with the timezone.
3304    hooks.updateOffset = function () {};
3305
3306    // MOMENTS
3307
3308    // keepLocalTime = true means only change the timezone, without
3309    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
3310    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
3311    // +0200, so we adjust the time as needed, to be valid.
3312    //
3313    // Keeping the time actually adds/subtracts (one hour)
3314    // from the actual represented time. That is why we call updateOffset
3315    // a second time. In case it wants us to change the offset again
3316    // _changeInProgress == true case, then we have to adjust, because
3317    // there is no such time in the given timezone.
3318    function getSetOffset(input, keepLocalTime, keepMinutes) {
3319        var offset = this._offset || 0,
3320            localAdjust;
3321        if (!this.isValid()) {
3322            return input != null ? this : NaN;
3323        }
3324        if (input != null) {
3325            if (typeof input === 'string') {
3326                input = offsetFromString(matchShortOffset, input);
3327                if (input === null) {
3328                    return this;
3329                }
3330            } else if (Math.abs(input) < 16 && !keepMinutes) {
3331                input = input * 60;
3332            }
3333            if (!this._isUTC && keepLocalTime) {
3334                localAdjust = getDateOffset(this);
3335            }
3336            this._offset = input;
3337            this._isUTC = true;
3338            if (localAdjust != null) {
3339                this.add(localAdjust, 'm');
3340            }
3341            if (offset !== input) {
3342                if (!keepLocalTime || this._changeInProgress) {
3343                    addSubtract(
3344                        this,
3345                        createDuration(input - offset, 'm'),
3346                        1,
3347                        false
3348                    );
3349                } else if (!this._changeInProgress) {
3350                    this._changeInProgress = true;
3351                    hooks.updateOffset(this, true);
3352                    this._changeInProgress = null;
3353                }
3354            }
3355            return this;
3356        } else {
3357            return this._isUTC ? offset : getDateOffset(this);
3358        }
3359    }
3360
3361    function getSetZone(input, keepLocalTime) {
3362        if (input != null) {
3363            if (typeof input !== 'string') {
3364                input = -input;
3365            }
3366
3367            this.utcOffset(input, keepLocalTime);
3368
3369            return this;
3370        } else {
3371            return -this.utcOffset();
3372        }
3373    }
3374
3375    function setOffsetToUTC(keepLocalTime) {
3376        return this.utcOffset(0, keepLocalTime);
3377    }
3378
3379    function setOffsetToLocal(keepLocalTime) {
3380        if (this._isUTC) {
3381            this.utcOffset(0, keepLocalTime);
3382            this._isUTC = false;
3383
3384            if (keepLocalTime) {
3385                this.subtract(getDateOffset(this), 'm');
3386            }
3387        }
3388        return this;
3389    }
3390
3391    function setOffsetToParsedOffset() {
3392        if (this._tzm != null) {
3393            this.utcOffset(this._tzm, false, true);
3394        } else if (typeof this._i === 'string') {
3395            var tZone = offsetFromString(matchOffset, this._i);
3396            if (tZone != null) {
3397                this.utcOffset(tZone);
3398            } else {
3399                this.utcOffset(0, true);
3400            }
3401        }
3402        return this;
3403    }
3404
3405    function hasAlignedHourOffset(input) {
3406        if (!this.isValid()) {
3407            return false;
3408        }
3409        input = input ? createLocal(input).utcOffset() : 0;
3410
3411        return (this.utcOffset() - input) % 60 === 0;
3412    }
3413
3414    function isDaylightSavingTime() {
3415        return (
3416            this.utcOffset() > this.clone().month(0).utcOffset() ||
3417            this.utcOffset() > this.clone().month(5).utcOffset()
3418        );
3419    }
3420
3421    function isDaylightSavingTimeShifted() {
3422        if (!isUndefined(this._isDSTShifted)) {
3423            return this._isDSTShifted;
3424        }
3425
3426        var c = {},
3427            other;
3428
3429        copyConfig(c, this);
3430        c = prepareConfig(c);
3431
3432        if (c._a) {
3433            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
3434            this._isDSTShifted =
3435                this.isValid() && compareArrays(c._a, other.toArray()) > 0;
3436        } else {
3437            this._isDSTShifted = false;
3438        }
3439
3440        return this._isDSTShifted;
3441    }
3442
3443    function isLocal() {
3444        return this.isValid() ? !this._isUTC : false;
3445    }
3446
3447    function isUtcOffset() {
3448        return this.isValid() ? this._isUTC : false;
3449    }
3450
3451    function isUtc() {
3452        return this.isValid() ? this._isUTC && this._offset === 0 : false;
3453    }
3454
3455    // ASP.NET json date format regex
3456    var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
3457        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
3458        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
3459        // and further modified to allow for strings containing both week and day
3460        isoRegex =
vendor: 9,021 bytes, lines 3460-3750
3460
3461            /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
3462
3463    function createDuration(input, key) {
3464        var duration = input,
3465            // matching against regexp is expensive, do it on demand
3466            match = null,
3467            sign,
3468            ret,
3469            diffRes;
3470
3471        if (isDuration(input)) {
3472            duration = {
3473                ms: input._milliseconds,
3474                d: input._days,
3475                M: input._months,
3476            };
3477        } else if (isNumber(input) || !isNaN(+input)) {
3478            duration = {};
3479            if (key) {
3480                duration[key] = +input;
3481            } else {
3482                duration.milliseconds = +input;
3483            }
3484        } else if ((match = aspNetRegex.exec(input))) {
3485            sign = match[1] === '-' ? -1 : 1;
3486            duration = {
3487                y: 0,
3488                d: toInt(match[DATE]) * sign,
3489                h: toInt(match[HOUR]) * sign,
3490                m: toInt(match[MINUTE]) * sign,
3491                s: toInt(match[SECOND]) * sign,
3492                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
3493            };
3494        } else if ((match = isoRegex.exec(input))) {
3495            sign = match[1] === '-' ? -1 : 1;
3496            duration = {
3497                y: parseIso(match[2], sign),
3498                M: parseIso(match[3], sign),
3499                w: parseIso(match[4], sign),
3500                d: parseIso(match[5], sign),
3501                h: parseIso(match[6], sign),
3502                m: parseIso(match[7], sign),
3503                s: parseIso(match[8], sign),
3504            };
3505        } else if (duration == null) {
3506            // checks for null or undefined
3507            duration = {};
3508        } else if (
3509            typeof duration === 'object' &&
3510            ('from' in duration || 'to' in duration)
3511        ) {
3512            diffRes = momentsDifference(
3513                createLocal(duration.from),
3514                createLocal(duration.to)
3515            );
3516
3517            duration = {};
3518            duration.ms = diffRes.milliseconds;
3519            duration.M = diffRes.months;
3520        }
3521
3522        ret = new Duration(duration);
3523
3524        if (isDuration(input) && hasOwnProp(input, '_locale')) {
3525            ret._locale = input._locale;
3526        }
3527
3528        if (isDuration(input) && hasOwnProp(input, '_isValid')) {
3529            ret._isValid = input._isValid;
3530        }
3531
3532        return ret;
3533    }
3534
3535    createDuration.fn = Duration.prototype;
3536    createDuration.invalid = createInvalid$1;
3537
3538    function parseIso(inp, sign) {
3539        // We'd normally use ~~inp for this, but unfortunately it also
3540        // converts floats to ints.
3541        // inp may be undefined, so careful calling replace on it.
3542        var res = inp && parseFloat(inp.replace(',', '.'));
3543        // apply sign while we're at it
3544        return (isNaN(res) ? 0 : res) * sign;
3545    }
3546
3547    function positiveMomentsDifference(base, other) {
3548        var res = {};
3549
3550        res.months =
3551            other.month() - base.month() + (other.year() - base.year()) * 12;
3552        if (base.clone().add(res.months, 'M').isAfter(other)) {
3553            --res.months;
3554        }
3555
3556        res.milliseconds = +other - +base.clone().add(res.months, 'M');
3557
3558        return res;
3559    }
3560
3561    function momentsDifference(base, other) {
3562        var res;
3563        if (!(base.isValid() && other.isValid())) {
3564            return { milliseconds: 0, months: 0 };
3565        }
3566
3567        other = cloneWithOffset(other, base);
3568        if (base.isBefore(other)) {
3569            res = positiveMomentsDifference(base, other);
3570        } else {
3571            res = positiveMomentsDifference(other, base);
3572            res.milliseconds = -res.milliseconds;
3573            res.months = -res.months;
3574        }
3575
3576        return res;
3577    }
3578
3579    // TODO: remove 'name' arg after deprecation is removed
3580    function createAdder(direction, name) {
3581        return function (val, period) {
3582            var dur, tmp;
3583            //invert the arguments, but complain about it
3584            if (period !== null && !isNaN(+period)) {
3585                deprecateSimple(
3586                    name,
3587                    'moment().' +
3588                        name +
3589                        '(period, number) is deprecated. Please use moment().' +
3590                        name +
3591                        '(number, period). ' +
3592                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
3593                );
3594                tmp = val;
3595                val = period;
3596                period = tmp;
3597            }
3598
3599            dur = createDuration(val, period);
3600            addSubtract(this, dur, direction);
3601            return this;
3602        };
3603    }
3604
3605    function addSubtract(mom, duration, isAdding, updateOffset) {
3606        var milliseconds = duration._milliseconds,
3607            days = absRound(duration._days),
3608            months = absRound(duration._months);
3609
3610        if (!mom.isValid()) {
3611            // No op
3612            return;
3613        }
3614
3615        updateOffset = updateOffset == null ? true : updateOffset;
3616
3617        if (months) {
3618            setMonth(mom, get(mom, 'Month') + months * isAdding);
3619        }
3620        if (days) {
3621            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
3622        }
3623        if (milliseconds) {
3624            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
3625        }
3626        if (updateOffset) {
3627            hooks.updateOffset(mom, days || months);
3628        }
3629    }
3630
3631    var add = createAdder(1, 'add'),
3632        subtract = createAdder(-1, 'subtract');
3633
3634    function isString(input) {
3635        return typeof input === 'string' || input instanceof String;
3636    }
3637
3638    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
3639    function isMomentInput(input) {
3640        return (
3641            isMoment(input) ||
3642            isDate(input) ||
3643            isString(input) ||
3644            isNumber(input) ||
3645            isNumberOrStringArray(input) ||
3646            isMomentInputObject(input) ||
3647            input === null ||
3648            input === undefined
3649        );
3650    }
3651
3652    function isMomentInputObject(input) {
3653        var objectTest = isObject(input) && !isObjectEmpty(input),
3654            propertyTest = false,
3655            properties = [
3656                'years',
3657                'year',
3658                'y',
3659                'months',
3660                'month',
3661                'M',
3662                'days',
3663                'day',
3664                'd',
3665                'dates',
3666                'date',
3667                'D',
3668                'hours',
3669                'hour',
3670                'h',
3671                'minutes',
3672                'minute',
3673                'm',
3674                'seconds',
3675                'second',
3676                's',
3677                'milliseconds',
3678                'millisecond',
3679                'ms',
3680            ],
3681            i,
3682            property,
3683            propertyLen = properties.length;
3684
3685        for (i = 0; i < propertyLen; i += 1) {
3686            property = properties[i];
3687            propertyTest = propertyTest || hasOwnProp(input, property);
3688        }
3689
3690        return objectTest && propertyTest;
3691    }
3692
3693    function isNumberOrStringArray(input) {
3694        var arrayTest = isArray(input),
3695            dataTypeTest = false;
3696        if (arrayTest) {
3697            dataTypeTest =
3698                input.filter(function (item) {
3699                    return !isNumber(item) && isString(input);
3700                }).length === 0;
3701        }
3702        return arrayTest && dataTypeTest;
3703    }
3704
3705    function isCalendarSpec(input) {
3706        var objectTest = isObject(input) && !isObjectEmpty(input),
3707            propertyTest = false,
3708            properties = [
3709                'sameDay',
3710                'nextDay',
3711                'lastDay',
3712                'nextWeek',
3713                'lastWeek',
3714                'sameElse',
3715            ],
3716            i,
3717            property;
3718
3719        for (i = 0; i < properties.length; i += 1) {
3720            property = properties[i];
3721            propertyTest = propertyTest || hasOwnProp(input, property);
3722        }
3723
3724        return objectTest && propertyTest;
3725    }
3726
3727    function getCalendarFormat(myMoment, now) {
3728        var diff = myMoment.diff(now, 'days', true);
3729        return diff < -6
3730            ? 'sameElse'
3731            : diff < -1
3732            ? 'lastWeek'
3733            : diff < 0
3734            ? 'lastDay'
3735            : diff < 1
3736            ? 'sameDay'
3737            : diff < 2
3738            ? 'nextDay'
3739            : diff < 7
3740            ? 'nextWeek'
3741            : 'sameElse';
3742    }
3743
3744    function calendar$1(time, formats) {
3745        // Support for single parameter, formats only overload to the calendar function
3746        if (arguments.length === 1) {
3747            if (!arguments[0]) {
3748                time = undefined;
3749                formats = undefined;
3750            } else
vendor: 17,627 bytes, lines 3750-4308
3750 if (isMomentInput(arguments[0])) {
3751                time = arguments[0];
3752                formats = undefined;
3753            } else if (isCalendarSpec(arguments[0])) {
3754                formats = arguments[0];
3755                time = undefined;
3756            }
3757        }
3758        // We want to compare the start of today, vs this.
3759        // Getting start-of-today depends on whether we're local/utc/offset or not.
3760        var now = time || createLocal(),
3761            sod = cloneWithOffset(now, this).startOf('day'),
3762            format = hooks.calendarFormat(this, sod) || 'sameElse',
3763            output =
3764                formats &&
3765                (isFunction(formats[format])
3766                    ? formats[format].call(this, now)
3767                    : formats[format]);
3768
3769        return this.format(
3770            output || this.localeData().calendar(format, this, createLocal(now))
3771        );
3772    }
3773
3774    function clone() {
3775        return new Moment(this);
3776    }
3777
3778    function isAfter(input, units) {
3779        var localInput = isMoment(input) ? input : createLocal(input);
3780        if (!(this.isValid() && localInput.isValid())) {
3781            return false;
3782        }
3783        units = normalizeUnits(units) || 'millisecond';
3784        if (units === 'millisecond') {
3785            return this.valueOf() > localInput.valueOf();
3786        } else {
3787            return localInput.valueOf() < this.clone().startOf(units).valueOf();
3788        }
3789    }
3790
3791    function isBefore(input, units) {
3792        var localInput = isMoment(input) ? input : createLocal(input);
3793        if (!(this.isValid() && localInput.isValid())) {
3794            return false;
3795        }
3796        units = normalizeUnits(units) || 'millisecond';
3797        if (units === 'millisecond') {
3798            return this.valueOf() < localInput.valueOf();
3799        } else {
3800            return this.clone().endOf(units).valueOf() < localInput.valueOf();
3801        }
3802    }
3803
3804    function isBetween(from, to, units, inclusivity) {
3805        var localFrom = isMoment(from) ? from : createLocal(from),
3806            localTo = isMoment(to) ? to : createLocal(to);
3807        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
3808            return false;
3809        }
3810        inclusivity = inclusivity || '()';
3811        return (
3812            (inclusivity[0] === '('
3813                ? this.isAfter(localFrom, units)
3814                : !this.isBefore(localFrom, units)) &&
3815            (inclusivity[1] === ')'
3816                ? this.isBefore(localTo, units)
3817                : !this.isAfter(localTo, units))
3818        );
3819    }
3820
3821    function isSame(input, units) {
3822        var localInput = isMoment(input) ? input : createLocal(input),
3823            inputMs;
3824        if (!(this.isValid() && localInput.isValid())) {
3825            return false;
3826        }
3827        units = normalizeUnits(units) || 'millisecond';
3828        if (units === 'millisecond') {
3829            return this.valueOf() === localInput.valueOf();
3830        } else {
3831            inputMs = localInput.valueOf();
3832            return (
3833                this.clone().startOf(units).valueOf() <= inputMs &&
3834                inputMs <= this.clone().endOf(units).valueOf()
3835            );
3836        }
3837    }
3838
3839    function isSameOrAfter(input, units) {
3840        return this.isSame(input, units) || this.isAfter(input, units);
3841    }
3842
3843    function isSameOrBefore(input, units) {
3844        return this.isSame(input, units) || this.isBefore(input, units);
3845    }
3846
3847    function diff(input, units, asFloat) {
3848        var that, zoneDelta, output;
3849
3850        if (!this.isValid()) {
3851            return NaN;
3852        }
3853
3854        that = cloneWithOffset(input, this);
3855
3856        if (!that.isValid()) {
3857            return NaN;
3858        }
3859
3860        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
3861
3862        units = normalizeUnits(units);
3863
3864        switch (units) {
3865            case 'year':
3866                output = monthDiff(this, that) / 12;
3867                break;
3868            case 'month':
3869                output = monthDiff(this, that);
3870                break;
3871            case 'quarter':
3872                output = monthDiff(this, that) / 3;
3873                break;
3874            case 'second':
3875                output = (this - that) / 1e3;
3876                break; // 1000
3877            case 'minute':
3878                output = (this - that) / 6e4;
3879                break; // 1000 * 60
3880            case 'hour':
3881                output = (this - that) / 36e5;
3882                break; // 1000 * 60 * 60
3883            case 'day':
3884                output = (this - that - zoneDelta) / 864e5;
3885                break; // 1000 * 60 * 60 * 24, negate dst
3886            case 'week':
3887                output = (this - that - zoneDelta) / 6048e5;
3888                break; // 1000 * 60 * 60 * 24 * 7, negate dst
3889            default:
3890                output = this - that;
3891        }
3892
3893        return asFloat ? output : absFloor(output);
3894    }
3895
3896    function monthDiff(a, b) {
3897        if (a.date() < b.date()) {
3898            // end-of-month calculations work correct when the start month has more
3899            // days than the end month.
3900            return -monthDiff(b, a);
3901        }
3902        // difference in months
3903        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
3904            // b is in (anchor - 1 month, anchor + 1 month)
3905            anchor = a.clone().add(wholeMonthDiff, 'months'),
3906            anchor2,
3907            adjust;
3908
3909        if (b - anchor < 0) {
3910            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
3911            // linear across the month
3912            adjust = (b - anchor) / (anchor - anchor2);
3913        } else {
3914            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
3915            // linear across the month
3916            adjust = (b - anchor) / (anchor2 - anchor);
3917        }
3918
3919        //check for negative zero, return zero if negative zero
3920        return -(wholeMonthDiff + adjust) || 0;
3921    }
3922
3923    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
3924    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
3925
3926    function toString() {
3927        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
3928    }
3929
3930    function toISOString(keepOffset) {
3931        if (!this.isValid()) {
3932            return null;
3933        }
3934        var utc = keepOffset !== true,
3935            m = utc ? this.clone().utc() : this;
3936        if (m.year() < 0 || m.year() > 9999) {
3937            return formatMoment(
3938                m,
3939                utc
3940                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
3941                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
3942            );
3943        }
3944        if (isFunction(Date.prototype.toISOString)) {
3945            // native implementation is ~50x faster, use it when we can
3946            if (utc) {
3947                return this.toDate().toISOString();
3948            } else {
3949                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
3950                    .toISOString()
3951                    .replace('Z', formatMoment(m, 'Z'));
3952            }
3953        }
3954        return formatMoment(
3955            m,
3956            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
3957        );
3958    }
3959
3960    /**
3961     * Return a human readable representation of a moment that can
3962     * also be evaluated to get a new moment which is the same
3963     *
3964     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
3965     */
3966    function inspect() {
3967        if (!this.isValid()) {
3968            return 'moment.invalid(/* ' + this._i + ' */)';
3969        }
3970        var func = 'moment',
3971            zone = '',
3972            prefix,
3973            year,
3974            datetime,
3975            suffix;
3976        if (!this.isLocal()) {
3977            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
3978            zone = 'Z';
3979        }
3980        prefix = '[' + func + '("]';
3981        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
3982        datetime = '-MM-DD[T]HH:mm:ss.SSS';
3983        suffix = zone + '[")]';
3984
3985        return this.format(prefix + year + datetime + suffix);
3986    }
3987
3988    function format(inputString) {
3989        if (!inputString) {
3990            inputString = this.isUtc()
3991                ? hooks.defaultFormatUtc
3992                : hooks.defaultFormat;
3993        }
3994        var output = formatMoment(this, inputString);
3995        return this.localeData().postformat(output);
3996    }
3997
3998    function from(time, withoutSuffix) {
3999        if (
4000            this.isValid() &&
4001            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
4002        ) {
4003            return createDuration({ to: this, from: time })
4004                .locale(this.locale())
4005                .humanize(!withoutSuffix);
4006        } else {
4007            return this.localeData().invalidDate();
4008        }
4009    }
4010
4011    function fromNow(withoutSuffix) {
4012        return this.from(createLocal(), withoutSuffix);
4013    }
4014
4015    function to(time, withoutSuffix) {
4016        if (
4017            this.isValid() &&
4018            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
4019        ) {
4020            return createDuration({ from: this, to: time })
4021                .locale(this.locale())
4022                .humanize(!withoutSuffix);
4023        } else {
4024            return this.localeData().invalidDate();
4025        }
4026    }
4027
4028    function toNow(withoutSuffix) {
4029        return this.to(createLocal(), withoutSuffix);
4030    }
4031
4032    // If passed a locale key, it will set the locale for this
4033    // instance.  Otherwise, it will return the locale configuration
4034    // variables for this instance.
4035    function locale(key) {
4036        var newLocaleData;
4037
4038        if (key === undefined) {
4039            return this._locale._abbr;
4040        } else {
4041            newLocaleData = getLocale(key);
4042            if (newLocaleData != null) {
4043                this._locale = newLocaleData;
4044            }
4045            return this;
4046        }
4047    }
4048
4049    var lang = deprecate(
4050        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
4051        function (key) {
4052            if (key === undefined) {
4053                return this.localeData();
4054            } else {
4055                return this.locale(key);
4056            }
4057        }
4058    );
4059
4060    function localeData() {
4061        return this._locale;
4062    }
4063
4064    var MS_PER_SECOND = 1000,
4065        MS_PER_MINUTE = 60 * MS_PER_SECOND,
4066        MS_PER_HOUR = 60 * MS_PER_MINUTE,
4067        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
4068
4069    // actual modulo - handles negative numbers (for dates before 1970):
4070    function mod$1(dividend, divisor) {
4071        return ((dividend % divisor) + divisor) % divisor;
4072    }
4073
4074    function localStartOfDate(y, m, d) {
4075        // the date constructor remaps years 0-99 to 1900-1999
4076        if (y < 100 && y >= 0) {
4077            // preserve leap years using a full 400 year cycle, then reset
4078            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
4079        } else {
4080            return new Date(y, m, d).valueOf();
4081        }
4082    }
4083
4084    function utcStartOfDate(y, m, d) {
4085        // Date.UTC remaps years 0-99 to 1900-1999
4086        if (y < 100 && y >= 0) {
4087            // preserve leap years using a full 400 year cycle, then reset
4088            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
4089        } else {
4090            return Date.UTC(y, m, d);
4091        }
4092    }
4093
4094    function startOf(units) {
4095        var time, startOfDate;
4096        units = normalizeUnits(units);
4097        if (units === undefined || units === 'millisecond' || !this.isValid()) {
4098            return this;
4099        }
4100
4101        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
4102
4103        switch (units) {
4104            case 'year':
4105                time = startOfDate(this.year(), 0, 1);
4106                break;
4107            case 'quarter':
4108                time = startOfDate(
4109                    this.year(),
4110                    this.month() - (this.month() % 3),
4111                    1
4112                );
4113                break;
4114            case 'month':
4115                time = startOfDate(this.year(), this.month(), 1);
4116                break;
4117            case 'week':
4118                time = startOfDate(
4119                    this.year(),
4120                    this.month(),
4121                    this.date() - this.weekday()
4122                );
4123                break;
4124            case 'isoWeek':
4125                time = startOfDate(
4126                    this.year(),
4127                    this.month(),
4128                    this.date() - (this.isoWeekday() - 1)
4129                );
4130                break;
4131            case 'day':
4132            case 'date':
4133                time = startOfDate(this.year(), this.month(), this.date());
4134                break;
4135            case 'hour':
4136                time = this._d.valueOf();
4137                time -= mod$1(
4138                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
4139                    MS_PER_HOUR
4140                );
4141                break;
4142            case 'minute':
4143                time = this._d.valueOf();
4144                time -= mod$1(time, MS_PER_MINUTE);
4145                break;
4146            case 'second':
4147                time = this._d.valueOf();
4148                time -= mod$1(time, MS_PER_SECOND);
4149                break;
4150        }
4151
4152        this._d.setTime(time);
4153        hooks.updateOffset(this, true);
4154        return this;
4155    }
4156
4157    function endOf(units) {
4158        var time, startOfDate;
4159        units = normalizeUnits(units);
4160        if (units === undefined || units === 'millisecond' || !this.isValid()) {
4161            return this;
4162        }
4163
4164        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
4165
4166        switch (units) {
4167            case 'year':
4168                time = startOfDate(this.year() + 1, 0, 1) - 1;
4169                break;
4170            case 'quarter':
4171                time =
4172                    startOfDate(
4173                        this.year(),
4174                        this.month() - (this.month() % 3) + 3,
4175                        1
4176                    ) - 1;
4177                break;
4178            case 'month':
4179                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
4180                break;
4181            case 'week':
4182                time =
4183                    startOfDate(
4184                        this.year(),
4185                        this.month(),
4186                        this.date() - this.weekday() + 7
4187                    ) - 1;
4188                break;
4189            case 'isoWeek':
4190                time =
4191                    startOfDate(
4192                        this.year(),
4193                        this.month(),
4194                        this.date() - (this.isoWeekday() - 1) + 7
4195                    ) - 1;
4196                break;
4197            case 'day':
4198            case 'date':
4199                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
4200                break;
4201            case 'hour':
4202                time = this._d.valueOf();
4203                time +=
4204                    MS_PER_HOUR -
4205                    mod$1(
4206                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
4207                        MS_PER_HOUR
4208                    ) -
4209                    1;
4210                break;
4211            case 'minute':
4212                time = this._d.valueOf();
4213                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
4214                break;
4215            case 'second':
4216                time = this._d.valueOf();
4217                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
4218                break;
4219        }
4220
4221        this._d.setTime(time);
4222        hooks.updateOffset(this, true);
4223        return this;
4224    }
4225
4226    function valueOf() {
4227        return this._d.valueOf() - (this._offset || 0) * 60000;
4228    }
4229
4230    function unix() {
4231        return Math.floor(this.valueOf() / 1000);
4232    }
4233
4234    function toDate() {
4235        return new Date(this.valueOf());
4236    }
4237
4238    function toArray() {
4239        var m = this;
4240        return [
4241            m.year(),
4242            m.month(),
4243            m.date(),
4244            m.hour(),
4245            m.minute(),
4246            m.second(),
4247            m.millisecond(),
4248        ];
4249    }
4250
4251    function toObject() {
4252        var m = this;
4253        return {
4254            years: m.year(),
4255            months: m.month(),
4256            date: m.date(),
4257            hours: m.hours(),
4258            minutes: m.minutes(),
4259            seconds: m.seconds(),
4260            milliseconds: m.milliseconds(),
4261        };
4262    }
4263
4264    function toJSON() {
4265        // new Date(NaN).toJSON() === null
4266        return this.isValid() ? this.toISOString() : null;
4267    }
4268
4269    function isValid$2() {
4270        return isValid(this);
4271    }
4272
4273    function parsingFlags() {
4274        return extend({}, getParsingFlags(this));
4275    }
4276
4277    function invalidAt() {
4278        return getParsingFlags(this).overflow;
4279    }
4280
4281    function creationData() {
4282        return {
4283            input: this._i,
4284            format: this._f,
4285            locale: this._locale,
4286            isUTC: this._isUTC,
4287            strict: this._strict,
4288        };
4289    }
4290
4291    addFormatToken('N', 0, 0, 'eraAbbr');
4292    addFormatToken('NN', 0, 0, 'eraAbbr');
4293    addFormatToken('NNN', 0, 0, 'eraAbbr');
4294    addFormatToken('NNNN', 0, 0, 'eraName');
4295    addFormatToken('NNNNN', 0, 0, 'eraNarrow');
4296
4297    addFormatToken('y', ['y', 1], 'yo', 'eraYear');
4298    addFormatToken('y', ['yy', 2], 0, 'eraYear');
4299    addFormatToken('y', ['yyy', 3], 0, 'eraYear');
4300    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
4301
4302    addRegexToken('N', matchEraAbbr);
4303    addRegexToken('NN', matchEraAbbr);
4304    addRegexToken('NNN', matchEraAbbr);
4305    addRegexToken('NNNN', matchEraName);
4306    addRegexToken('NNNNN', matchEraNarrow);
4307
4308    addParseToken(
vendor: 8,145 bytes, lines 4308-4583
4308
4309        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],
4310        function (input, array, config, token) {
4311            var era = config._locale.erasParse(input, token, config._strict);
4312            if (era) {
4313                getParsingFlags(config).era = era;
4314            } else {
4315                getParsingFlags(config).invalidEra = input;
4316            }
4317        }
4318    );
4319
4320    addRegexToken('y', matchUnsigned);
4321    addRegexToken('yy', matchUnsigned);
4322    addRegexToken('yyy', matchUnsigned);
4323    addRegexToken('yyyy', matchUnsigned);
4324    addRegexToken('yo', matchEraYearOrdinal);
4325
4326    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
4327    addParseToken(['yo'], function (input, array, config, token) {
4328        var match;
4329        if (config._locale._eraYearOrdinalRegex) {
4330            match = input.match(config._locale._eraYearOrdinalRegex);
4331        }
4332
4333        if (config._locale.eraYearOrdinalParse) {
4334            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
4335        } else {
4336            array[YEAR] = parseInt(input, 10);
4337        }
4338    });
4339
4340    function localeEras(m, format) {
4341        var i,
4342            l,
4343            date,
4344            eras = this._eras || getLocale('en')._eras;
4345        for (i = 0, l = eras.length; i < l; ++i) {
4346            switch (typeof eras[i].since) {
4347                case 'string':
4348                    // truncate time
4349                    date = hooks(eras[i].since).startOf('day');
4350                    eras[i].since = date.valueOf();
4351                    break;
4352            }
4353
4354            switch (typeof eras[i].until) {
4355                case 'undefined':
4356                    eras[i].until = +Infinity;
4357                    break;
4358                case 'string':
4359                    // truncate time
4360                    date = hooks(eras[i].until).startOf('day').valueOf();
4361                    eras[i].until = date.valueOf();
4362                    break;
4363            }
4364        }
4365        return eras;
4366    }
4367
4368    function localeErasParse(eraName, format, strict) {
4369        var i,
4370            l,
4371            eras = this.eras(),
4372            name,
4373            abbr,
4374            narrow;
4375        eraName = eraName.toUpperCase();
4376
4377        for (i = 0, l = eras.length; i < l; ++i) {
4378            name = eras[i].name.toUpperCase();
4379            abbr = eras[i].abbr.toUpperCase();
4380            narrow = eras[i].narrow.toUpperCase();
4381
4382            if (strict) {
4383                switch (format) {
4384                    case 'N':
4385                    case 'NN':
4386                    case 'NNN':
4387                        if (abbr === eraName) {
4388                            return eras[i];
4389                        }
4390                        break;
4391
4392                    case 'NNNN':
4393                        if (name === eraName) {
4394                            return eras[i];
4395                        }
4396                        break;
4397
4398                    case 'NNNNN':
4399                        if (narrow === eraName) {
4400                            return eras[i];
4401                        }
4402                        break;
4403                }
4404            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
4405                return eras[i];
4406            }
4407        }
4408    }
4409
4410    function localeErasConvertYear(era, year) {
4411        var dir = era.since <= era.until ? +1 : -1;
4412        if (year === undefined) {
4413            return hooks(era.since).year();
4414        } else {
4415            return hooks(era.since).year() + (year - era.offset) * dir;
4416        }
4417    }
4418
4419    function getEraName() {
4420        var i,
4421            l,
4422            val,
4423            eras = this.localeData().eras();
4424        for (i = 0, l = eras.length; i < l; ++i) {
4425            // truncate time
4426            val = this.clone().startOf('day').valueOf();
4427
4428            if (eras[i].since <= val && val <= eras[i].until) {
4429                return eras[i].name;
4430            }
4431            if (eras[i].until <= val && val <= eras[i].since) {
4432                return eras[i].name;
4433            }
4434        }
4435
4436        return '';
4437    }
4438
4439    function getEraNarrow() {
4440        var i,
4441            l,
4442            val,
4443            eras = this.localeData().eras();
4444        for (i = 0, l = eras.length; i < l; ++i) {
4445            // truncate time
4446            val = this.clone().startOf('day').valueOf();
4447
4448            if (eras[i].since <= val && val <= eras[i].until) {
4449                return eras[i].narrow;
4450            }
4451            if (eras[i].until <= val && val <= eras[i].since) {
4452                return eras[i].narrow;
4453            }
4454        }
4455
4456        return '';
4457    }
4458
4459    function getEraAbbr() {
4460        var i,
4461            l,
4462            val,
4463            eras = this.localeData().eras();
4464        for (i = 0, l = eras.length; i < l; ++i) {
4465            // truncate time
4466            val = this.clone().startOf('day').valueOf();
4467
4468            if (eras[i].since <= val && val <= eras[i].until) {
4469                return eras[i].abbr;
4470            }
4471            if (eras[i].until <= val && val <= eras[i].since) {
4472                return eras[i].abbr;
4473            }
4474        }
4475
4476        return '';
4477    }
4478
4479    function getEraYear() {
4480        var i,
4481            l,
4482            dir,
4483            val,
4484            eras = this.localeData().eras();
4485        for (i = 0, l = eras.length; i < l; ++i) {
4486            dir = eras[i].since <= eras[i].until ? +1 : -1;
4487
4488            // truncate time
4489            val = this.clone().startOf('day').valueOf();
4490
4491            if (
4492                (eras[i].since <= val && val <= eras[i].until) ||
4493                (eras[i].until <= val && val <= eras[i].since)
4494            ) {
4495                return (
4496                    (this.year() - hooks(eras[i].since).year()) * dir +
4497                    eras[i].offset
4498                );
4499            }
4500        }
4501
4502        return this.year();
4503    }
4504
4505    function erasNameRegex(isStrict) {
4506        if (!hasOwnProp(this, '_erasNameRegex')) {
4507            computeErasParse.call(this);
4508        }
4509        return isStrict ? this._erasNameRegex : this._erasRegex;
4510    }
4511
4512    function erasAbbrRegex(isStrict) {
4513        if (!hasOwnProp(this, '_erasAbbrRegex')) {
4514            computeErasParse.call(this);
4515        }
4516        return isStrict ? this._erasAbbrRegex : this._erasRegex;
4517    }
4518
4519    function erasNarrowRegex(isStrict) {
4520        if (!hasOwnProp(this, '_erasNarrowRegex')) {
4521            computeErasParse.call(this);
4522        }
4523        return isStrict ? this._erasNarrowRegex : this._erasRegex;
4524    }
4525
4526    function matchEraAbbr(isStrict, locale) {
4527        return locale.erasAbbrRegex(isStrict);
4528    }
4529
4530    function matchEraName(isStrict, locale) {
4531        return locale.erasNameRegex(isStrict);
4532    }
4533
4534    function matchEraNarrow(isStrict, locale) {
4535        return locale.erasNarrowRegex(isStrict);
4536    }
4537
4538    function matchEraYearOrdinal(isStrict, locale) {
4539        return locale._eraYearOrdinalRegex || matchUnsigned;
4540    }
4541
4542    function computeErasParse() {
4543        var abbrPieces = [],
4544            namePieces = [],
4545            narrowPieces = [],
4546            mixedPieces = [],
4547            i,
4548            l,
4549            eras = this.eras();
4550
4551        for (i = 0, l = eras.length; i < l; ++i) {
4552            namePieces.push(regexEscape(eras[i].name));
4553            abbrPieces.push(regexEscape(eras[i].abbr));
4554            narrowPieces.push(regexEscape(eras[i].narrow));
4555
4556            mixedPieces.push(regexEscape(eras[i].name));
4557            mixedPieces.push(regexEscape(eras[i].abbr));
4558            mixedPieces.push(regexEscape(eras[i].narrow));
4559        }
4560
4561        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
4562        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
4563        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
4564        this._erasNarrowRegex = new RegExp(
4565            '^(' + narrowPieces.join('|') + ')',
4566            'i'
4567        );
4568    }
4569
4570    // FORMATTING
4571
4572    addFormatToken(0, ['gg', 2], 0, function () {
4573        return this.weekYear() % 100;
4574    });
4575
4576    addFormatToken(0, ['GG', 2], 0, function () {
4577        return this.isoWeekYear() % 100;
4578    });
4579
4580    function addWeekYearFormatToken(token, getter) {
4581        addFormatToken(0, [token, token.length], 0, getter);
4582    }
4583
4584    addWeekYearFormatToken('gggg', 'weekYear');
4585    addWeekYearFormatToken('ggggg', 'weekYear');
4586    addWeekYearFormatToken('GGGG', 'isoWeekYear');
4587    addWeekYearFormatToken('GGGGG', 'isoWeekYear');
4588
4589    // ALIASES
4590
4591    addUnitAlias('weekYear', 'gg');
4592    addUnitAlias('isoWeekYear', 'GG');
4593
4594    // PRIORITY
4595
4596    addUnitPriority('weekYear', 1);
4597    addUnitPriority('isoWeekYear', 1);
4598
4599    // PARSING
4600
4601    addRegexToken('G', matchSigned);
4602    addRegexToken('g', matchSigned);
4603    addRegexToken('GG', match1to2, match2);
4604    addRegexToken('gg', match1to2, match2);
4605    addRegexToken('GGGG', match1to4, match4);
4606    addRegexToken('gggg', match1to4, match4);
4607    addRegexToken('GGGGG', match1to6, match6);
4608    addRegexToken('ggggg', match1to6, match6);
4609
4610    addWeekParseToken(
4611        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],
4612        function (input, week, config, token) {
4613            week[token.substr(0, 2)] = toInt(input);
4614        }
4615    
vendor: 29,543 bytes, lines 4615-5638
4615);
4616
4617    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
4618        week[token] = hooks.parseTwoDigitYear(input);
4619    });
4620
4621    // MOMENTS
4622
4623    function getSetWeekYear(input) {
4624        return getSetWeekYearHelper.call(
4625            this,
4626            input,
4627            this.week(),
4628            this.weekday(),
4629            this.localeData()._week.dow,
4630            this.localeData()._week.doy
4631        );
4632    }
4633
4634    function getSetISOWeekYear(input) {
4635        return getSetWeekYearHelper.call(
4636            this,
4637            input,
4638            this.isoWeek(),
4639            this.isoWeekday(),
4640            1,
4641            4
4642        );
4643    }
4644
4645    function getISOWeeksInYear() {
4646        return weeksInYear(this.year(), 1, 4);
4647    }
4648
4649    function getISOWeeksInISOWeekYear() {
4650        return weeksInYear(this.isoWeekYear(), 1, 4);
4651    }
4652
4653    function getWeeksInYear() {
4654        var weekInfo = this.localeData()._week;
4655        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
4656    }
4657
4658    function getWeeksInWeekYear() {
4659        var weekInfo = this.localeData()._week;
4660        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
4661    }
4662
4663    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
4664        var weeksTarget;
4665        if (input == null) {
4666            return weekOfYear(this, dow, doy).year;
4667        } else {
4668            weeksTarget = weeksInYear(input, dow, doy);
4669            if (week > weeksTarget) {
4670                week = weeksTarget;
4671            }
4672            return setWeekAll.call(this, input, week, weekday, dow, doy);
4673        }
4674    }
4675
4676    function setWeekAll(weekYear, week, weekday, dow, doy) {
4677        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
4678            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
4679
4680        this.year(date.getUTCFullYear());
4681        this.month(date.getUTCMonth());
4682        this.date(date.getUTCDate());
4683        return this;
4684    }
4685
4686    // FORMATTING
4687
4688    addFormatToken('Q', 0, 'Qo', 'quarter');
4689
4690    // ALIASES
4691
4692    addUnitAlias('quarter', 'Q');
4693
4694    // PRIORITY
4695
4696    addUnitPriority('quarter', 7);
4697
4698    // PARSING
4699
4700    addRegexToken('Q', match1);
4701    addParseToken('Q', function (input, array) {
4702        array[MONTH] = (toInt(input) - 1) * 3;
4703    });
4704
4705    // MOMENTS
4706
4707    function getSetQuarter(input) {
4708        return input == null
4709            ? Math.ceil((this.month() + 1) / 3)
4710            : this.month((input - 1) * 3 + (this.month() % 3));
4711    }
4712
4713    // FORMATTING
4714
4715    addFormatToken('D', ['DD', 2], 'Do', 'date');
4716
4717    // ALIASES
4718
4719    addUnitAlias('date', 'D');
4720
4721    // PRIORITY
4722    addUnitPriority('date', 9);
4723
4724    // PARSING
4725
4726    addRegexToken('D', match1to2);
4727    addRegexToken('DD', match1to2, match2);
4728    addRegexToken('Do', function (isStrict, locale) {
4729        // TODO: Remove "ordinalParse" fallback in next major release.
4730        return isStrict
4731            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
4732            : locale._dayOfMonthOrdinalParseLenient;
4733    });
4734
4735    addParseToken(['D', 'DD'], DATE);
4736    addParseToken('Do', function (input, array) {
4737        array[DATE] = toInt(input.match(match1to2)[0]);
4738    });
4739
4740    // MOMENTS
4741
4742    var getSetDayOfMonth = makeGetSet('Date', true);
4743
4744    // FORMATTING
4745
4746    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
4747
4748    // ALIASES
4749
4750    addUnitAlias('dayOfYear', 'DDD');
4751
4752    // PRIORITY
4753    addUnitPriority('dayOfYear', 4);
4754
4755    // PARSING
4756
4757    addRegexToken('DDD', match1to3);
4758    addRegexToken('DDDD', match3);
4759    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
4760        config._dayOfYear = toInt(input);
4761    });
4762
4763    // HELPERS
4764
4765    // MOMENTS
4766
4767    function getSetDayOfYear(input) {
4768        var dayOfYear =
4769            Math.round(
4770                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
4771            ) + 1;
4772        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
4773    }
4774
4775    // FORMATTING
4776
4777    addFormatToken('m', ['mm', 2], 0, 'minute');
4778
4779    // ALIASES
4780
4781    addUnitAlias('minute', 'm');
4782
4783    // PRIORITY
4784
4785    addUnitPriority('minute', 14);
4786
4787    // PARSING
4788
4789    addRegexToken('m', match1to2);
4790    addRegexToken('mm', match1to2, match2);
4791    addParseToken(['m', 'mm'], MINUTE);
4792
4793    // MOMENTS
4794
4795    var getSetMinute = makeGetSet('Minutes', false);
4796
4797    // FORMATTING
4798
4799    addFormatToken('s', ['ss', 2], 0, 'second');
4800
4801    // ALIASES
4802
4803    addUnitAlias('second', 's');
4804
4805    // PRIORITY
4806
4807    addUnitPriority('second', 15);
4808
4809    // PARSING
4810
4811    addRegexToken('s', match1to2);
4812    addRegexToken('ss', match1to2, match2);
4813    addParseToken(['s', 'ss'], SECOND);
4814
4815    // MOMENTS
4816
4817    var getSetSecond = makeGetSet('Seconds', false);
4818
4819    // FORMATTING
4820
4821    addFormatToken('S', 0, 0, function () {
4822        return ~~(this.millisecond() / 100);
4823    });
4824
4825    addFormatToken(0, ['SS', 2], 0, function () {
4826        return ~~(this.millisecond() / 10);
4827    });
4828
4829    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
4830    addFormatToken(0, ['SSSS', 4], 0, function () {
4831        return this.millisecond() * 10;
4832    });
4833    addFormatToken(0, ['SSSSS', 5], 0, function () {
4834        return this.millisecond() * 100;
4835    });
4836    addFormatToken(0, ['SSSSSS', 6], 0, function () {
4837        return this.millisecond() * 1000;
4838    });
4839    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
4840        return this.millisecond() * 10000;
4841    });
4842    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
4843        return this.millisecond() * 100000;
4844    });
4845    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
4846        return this.millisecond() * 1000000;
4847    });
4848
4849    // ALIASES
4850
4851    addUnitAlias('millisecond', 'ms');
4852
4853    // PRIORITY
4854
4855    addUnitPriority('millisecond', 16);
4856
4857    // PARSING
4858
4859    addRegexToken('S', match1to3, match1);
4860    addRegexToken('SS', match1to3, match2);
4861    addRegexToken('SSS', match1to3, match3);
4862
4863    var token, getSetMillisecond;
4864    for (token = 'SSSS'; token.length <= 9; token += 'S') {
4865        addRegexToken(token, matchUnsigned);
4866    }
4867
4868    function parseMs(input, array) {
4869        array[MILLISECOND] = toInt(('0.' + input) * 1000);
4870    }
4871
4872    for (token = 'S'; token.length <= 9; token += 'S') {
4873        addParseToken(token, parseMs);
4874    }
4875
4876    getSetMillisecond = makeGetSet('Milliseconds', false);
4877
4878    // FORMATTING
4879
4880    addFormatToken('z', 0, 0, 'zoneAbbr');
4881    addFormatToken('zz', 0, 0, 'zoneName');
4882
4883    // MOMENTS
4884
4885    function getZoneAbbr() {
4886        return this._isUTC ? 'UTC' : '';
4887    }
4888
4889    function getZoneName() {
4890        return this._isUTC ? 'Coordinated Universal Time' : '';
4891    }
4892
4893    var proto = Moment.prototype;
4894
4895    proto.add = add;
4896    proto.calendar = calendar$1;
4897    proto.clone = clone;
4898    proto.diff = diff;
4899    proto.endOf = endOf;
4900    proto.format = format;
4901    proto.from = from;
4902    proto.fromNow = fromNow;
4903    proto.to = to;
4904    proto.toNow = toNow;
4905    proto.get = stringGet;
4906    proto.invalidAt = invalidAt;
4907    proto.isAfter = isAfter;
4908    proto.isBefore = isBefore;
4909    proto.isBetween = isBetween;
4910    proto.isSame = isSame;
4911    proto.isSameOrAfter = isSameOrAfter;
4912    proto.isSameOrBefore = isSameOrBefore;
4913    proto.isValid = isValid$2;
4914    proto.lang = lang;
4915    proto.locale = locale;
4916    proto.localeData = localeData;
4917    proto.max = prototypeMax;
4918    proto.min = prototypeMin;
4919    proto.parsingFlags = parsingFlags;
4920    proto.set = stringSet;
4921    proto.startOf = startOf;
4922    proto.subtract = subtract;
4923    proto.toArray = toArray;
4924    proto.toObject = toObject;
4925    proto.toDate = toDate;
4926    proto.toISOString = toISOString;
4927    proto.inspect = inspect;
4928    if (typeof Symbol !== 'undefined' && Symbol.for != null) {
4929        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
4930            return 'Moment<' + this.format() + '>';
4931        };
4932    }
4933    proto.toJSON = toJSON;
4934    proto.toString = toString;
4935    proto.unix = unix;
4936    proto.valueOf = valueOf;
4937    proto.creationData = creationData;
4938    proto.eraName = getEraName;
4939    proto.eraNarrow = getEraNarrow;
4940    proto.eraAbbr = getEraAbbr;
4941    proto.eraYear = getEraYear;
4942    proto.year = getSetYear;
4943    proto.isLeapYear = getIsLeapYear;
4944    proto.weekYear = getSetWeekYear;
4945    proto.isoWeekYear = getSetISOWeekYear;
4946    proto.quarter = proto.quarters = getSetQuarter;
4947    proto.month = getSetMonth;
4948    proto.daysInMonth = getDaysInMonth;
4949    proto.week = proto.weeks = getSetWeek;
4950    proto.isoWeek = proto.isoWeeks = getSetISOWeek;
4951    proto.weeksInYear = getWeeksInYear;
4952    proto.weeksInWeekYear = getWeeksInWeekYear;
4953    proto.isoWeeksInYear = getISOWeeksInYear;
4954    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
4955    proto.date = getSetDayOfMonth;
4956    proto.day = proto.days = getSetDayOfWeek;
4957    proto.weekday = getSetLocaleDayOfWeek;
4958    proto.isoWeekday = getSetISODayOfWeek;
4959    proto.dayOfYear = getSetDayOfYear;
4960    proto.hour = proto.hours = getSetHour;
4961    proto.minute = proto.minutes = getSetMinute;
4962    proto.second = proto.seconds = getSetSecond;
4963    proto.millisecond = proto.milliseconds = getSetMillisecond;
4964    proto.utcOffset = getSetOffset;
4965    proto.utc = setOffsetToUTC;
4966    proto.local = setOffsetToLocal;
4967    proto.parseZone = setOffsetToParsedOffset;
4968    proto.hasAlignedHourOffset = hasAlignedHourOffset;
4969    proto.isDST = isDaylightSavingTime;
4970    proto.isLocal = isLocal;
4971    proto.isUtcOffset = isUtcOffset;
4972    proto.isUtc = isUtc;
4973    proto.isUTC = isUtc;
4974    proto.zoneAbbr = getZoneAbbr;
4975    proto.zoneName = getZoneName;
4976    proto.dates = deprecate(
4977        'dates accessor is deprecated. Use date instead.',
4978        getSetDayOfMonth
4979    );
4980    proto.months = deprecate(
4981        'months accessor is deprecated. Use month instead',
4982        getSetMonth
4983    );
4984    proto.years = deprecate(
4985        'years accessor is deprecated. Use year instead',
4986        getSetYear
4987    );
4988    proto.zone = deprecate(
4989        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
4990        getSetZone
4991    );
4992    proto.isDSTShifted = deprecate(
4993        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
4994        isDaylightSavingTimeShifted
4995    );
4996
4997    function createUnix(input) {
4998        return createLocal(input * 1000);
4999    }
5000
5001    function createInZone() {
5002        return createLocal.apply(null, arguments).parseZone();
5003    }
5004
5005    function preParsePostFormat(string) {
5006        return string;
5007    }
5008
5009    var proto$1 = Locale.prototype;
5010
5011    proto$1.calendar = calendar;
5012    proto$1.longDateFormat = longDateFormat;
5013    proto$1.invalidDate = invalidDate;
5014    proto$1.ordinal = ordinal;
5015    proto$1.preparse = preParsePostFormat;
5016    proto$1.postformat = preParsePostFormat;
5017    proto$1.relativeTime = relativeTime;
5018    proto$1.pastFuture = pastFuture;
5019    proto$1.set = set;
5020    proto$1.eras = localeEras;
5021    proto$1.erasParse = localeErasParse;
5022    proto$1.erasConvertYear = localeErasConvertYear;
5023    proto$1.erasAbbrRegex = erasAbbrRegex;
5024    proto$1.erasNameRegex = erasNameRegex;
5025    proto$1.erasNarrowRegex = erasNarrowRegex;
5026
5027    proto$1.months = localeMonths;
5028    proto$1.monthsShort = localeMonthsShort;
5029    proto$1.monthsParse = localeMonthsParse;
5030    proto$1.monthsRegex = monthsRegex;
5031    proto$1.monthsShortRegex = monthsShortRegex;
5032    proto$1.week = localeWeek;
5033    proto$1.firstDayOfYear = localeFirstDayOfYear;
5034    proto$1.firstDayOfWeek = localeFirstDayOfWeek;
5035
5036    proto$1.weekdays = localeWeekdays;
5037    proto$1.weekdaysMin = localeWeekdaysMin;
5038    proto$1.weekdaysShort = localeWeekdaysShort;
5039    proto$1.weekdaysParse = localeWeekdaysParse;
5040
5041    proto$1.weekdaysRegex = weekdaysRegex;
5042    proto$1.weekdaysShortRegex = weekdaysShortRegex;
5043    proto$1.weekdaysMinRegex = weekdaysMinRegex;
5044
5045    proto$1.isPM = localeIsPM;
5046    proto$1.meridiem = localeMeridiem;
5047
5048    function get$1(format, index, field, setter) {
5049        var locale = getLocale(),
5050            utc = createUTC().set(setter, index);
5051        return locale[field](utc, format);
5052    }
5053
5054    function listMonthsImpl(format, index, field) {
5055        if (isNumber(format)) {
5056            index = format;
5057            format = undefined;
5058        }
5059
5060        format = format || '';
5061
5062        if (index != null) {
5063            return get$1(format, index, field, 'month');
5064        }
5065
5066        var i,
5067            out = [];
5068        for (i = 0; i < 12; i++) {
5069            out[i] = get$1(format, i, field, 'month');
5070        }
5071        return out;
5072    }
5073
5074    // ()
5075    // (5)
5076    // (fmt, 5)
5077    // (fmt)
5078    // (true)
5079    // (true, 5)
5080    // (true, fmt, 5)
5081    // (true, fmt)
5082    function listWeekdaysImpl(localeSorted, format, index, field) {
5083        if (typeof localeSorted === 'boolean') {
5084            if (isNumber(format)) {
5085                index = format;
5086                format = undefined;
5087            }
5088
5089            format = format || '';
5090        } else {
5091            format = localeSorted;
5092            index = format;
5093            localeSorted = false;
5094
5095            if (isNumber(format)) {
5096                index = format;
5097                format = undefined;
5098            }
5099
5100            format = format || '';
5101        }
5102
5103        var locale = getLocale(),
5104            shift = localeSorted ? locale._week.dow : 0,
5105            i,
5106            out = [];
5107
5108        if (index != null) {
5109            return get$1(format, (index + shift) % 7, field, 'day');
5110        }
5111
5112        for (i = 0; i < 7; i++) {
5113            out[i] = get$1(format, (i + shift) % 7, field, 'day');
5114        }
5115        return out;
5116    }
5117
5118    function listMonths(format, index) {
5119        return listMonthsImpl(format, index, 'months');
5120    }
5121
5122    function listMonthsShort(format, index) {
5123        return listMonthsImpl(format, index, 'monthsShort');
5124    }
5125
5126    function listWeekdays(localeSorted, format, index) {
5127        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
5128    }
5129
5130    function listWeekdaysShort(localeSorted, format, index) {
5131        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
5132    }
5133
5134    function listWeekdaysMin(localeSorted, format, index) {
5135        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
5136    }
5137
5138    getSetGlobalLocale('en', {
5139        eras: [
5140            {
5141                since: '0001-01-01',
5142                until: +Infinity,
5143                offset: 1,
5144                name: 'Anno Domini',
5145                narrow: 'AD',
5146                abbr: 'AD',
5147            },
5148            {
5149                since: '0000-12-31',
5150                until: -Infinity,
5151                offset: 1,
5152                name: 'Before Christ',
5153                narrow: 'BC',
5154                abbr: 'BC',
5155            },
5156        ],
5157        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
5158        ordinal: function (number) {
5159            var b = number % 10,
5160                output =
5161                    toInt((number % 100) / 10) === 1
5162                        ? 'th'
5163                        : b === 1
5164                        ? 'st'
5165                        : b === 2
5166                        ? 'nd'
5167                        : b === 3
5168                        ? 'rd'
5169                        : 'th';
5170            return number + output;
5171        },
5172    });
5173
5174    // Side effect imports
5175
5176    hooks.lang = deprecate(
5177        'moment.lang is deprecated. Use moment.locale instead.',
5178        getSetGlobalLocale
5179    );
5180    hooks.langData = deprecate(
5181        'moment.langData is deprecated. Use moment.localeData instead.',
5182        getLocale
5183    );
5184
5185    var mathAbs = Math.abs;
5186
5187    function abs() {
5188        var data = this._data;
5189
5190        this._milliseconds = mathAbs(this._milliseconds);
5191        this._days = mathAbs(this._days);
5192        this._months = mathAbs(this._months);
5193
5194        data.milliseconds = mathAbs(data.milliseconds);
5195        data.seconds = mathAbs(data.seconds);
5196        data.minutes = mathAbs(data.minutes);
5197        data.hours = mathAbs(data.hours);
5198        data.months = mathAbs(data.months);
5199        data.years = mathAbs(data.years);
5200
5201        return this;
5202    }
5203
5204    function addSubtract$1(duration, input, value, direction) {
5205        var other = createDuration(input, value);
5206
5207        duration._milliseconds += direction * other._milliseconds;
5208        duration._days += direction * other._days;
5209        duration._months += direction * other._months;
5210
5211        return duration._bubble();
5212    }
5213
5214    // supports only 2.0-style add(1, 's') or add(duration)
5215    function add$1(input, value) {
5216        return addSubtract$1(this, input, value, 1);
5217    }
5218
5219    // supports only 2.0-style subtract(1, 's') or subtract(duration)
5220    function subtract$1(input, value) {
5221        return addSubtract$1(this, input, value, -1);
5222    }
5223
5224    function absCeil(number) {
5225        if (number < 0) {
5226            return Math.floor(number);
5227        } else {
5228            return Math.ceil(number);
5229        }
5230    }
5231
5232    function bubble() {
5233        var milliseconds = this._milliseconds,
5234            days = this._days,
5235            months = this._months,
5236            data = this._data,
5237            seconds,
5238            minutes,
5239            hours,
5240            years,
5241            monthsFromDays;
5242
5243        // if we have a mix of positive and negative values, bubble down first
5244        // check: https://github.com/moment/moment/issues/2166
5245        if (
5246            !(
5247                (milliseconds >= 0 && days >= 0 && months >= 0) ||
5248                (milliseconds <= 0 && days <= 0 && months <= 0)
5249            )
5250        ) {
5251            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
5252            days = 0;
5253            months = 0;
5254        }
5255
5256        // The following code bubbles up values, see the tests for
5257        // examples of what that means.
5258        data.milliseconds = milliseconds % 1000;
5259
5260        seconds = absFloor(milliseconds / 1000);
5261        data.seconds = seconds % 60;
5262
5263        minutes = absFloor(seconds / 60);
5264        data.minutes = minutes % 60;
5265
5266        hours = absFloor(minutes / 60);
5267        data.hours = hours % 24;
5268
5269        days += absFloor(hours / 24);
5270
5271        // convert days to months
5272        monthsFromDays = absFloor(daysToMonths(days));
5273        months += monthsFromDays;
5274        days -= absCeil(monthsToDays(monthsFromDays));
5275
5276        // 12 months -> 1 year
5277        years = absFloor(months / 12);
5278        months %= 12;
5279
5280        data.days = days;
5281        data.months = months;
5282        data.years = years;
5283
5284        return this;
5285    }
5286
5287    function daysToMonths(days) {
5288        // 400 years have 146097 days (taking into account leap year rules)
5289        // 400 years have 12 months === 4800
5290        return (days * 4800) / 146097;
5291    }
5292
5293    function monthsToDays(months) {
5294        // the reverse of daysToMonths
5295        return (months * 146097) / 4800;
5296    }
5297
5298    function as(units) {
5299        if (!this.isValid()) {
5300            return NaN;
5301        }
5302        var days,
5303            months,
5304            milliseconds = this._milliseconds;
5305
5306        units = normalizeUnits(units);
5307
5308        if (units === 'month' || units === 'quarter' || units === 'year') {
5309            days = this._days + milliseconds / 864e5;
5310            months = this._months + daysToMonths(days);
5311            switch (units) {
5312                case 'month':
5313                    return months;
5314                case 'quarter':
5315                    return months / 3;
5316                case 'year':
5317                    return months / 12;
5318            }
5319        } else {
5320            // handle milliseconds separately because of floating point math errors (issue #1867)
5321            days = this._days + Math.round(monthsToDays(this._months));
5322            switch (units) {
5323                case 'week':
5324                    return days / 7 + milliseconds / 6048e5;
5325                case 'day':
5326                    return days + milliseconds / 864e5;
5327                case 'hour':
5328                    return days * 24 + milliseconds / 36e5;
5329                case 'minute':
5330                    return days * 1440 + milliseconds / 6e4;
5331                case 'second':
5332                    return days * 86400 + milliseconds / 1000;
5333                // Math.floor prevents floating point math errors here
5334                case 'millisecond':
5335                    return Math.floor(days * 864e5) + milliseconds;
5336                default:
5337                    throw new Error('Unknown unit ' + units);
5338            }
5339        }
5340    }
5341
5342    // TODO: Use this.as('ms')?
5343    function valueOf$1() {
5344        if (!this.isValid()) {
5345            return NaN;
5346        }
5347        return (
5348            this._milliseconds +
5349            this._days * 864e5 +
5350            (this._months % 12) * 2592e6 +
5351            toInt(this._months / 12) * 31536e6
5352        );
5353    }
5354
5355    function makeAs(alias) {
5356        return function () {
5357            return this.as(alias);
5358        };
5359    }
5360
5361    var asMilliseconds = makeAs('ms'),
5362        asSeconds = makeAs('s'),
5363        asMinutes = makeAs('m'),
5364        asHours = makeAs('h'),
5365        asDays = makeAs('d'),
5366        asWeeks = makeAs('w'),
5367        asMonths = makeAs('M'),
5368        asQuarters = makeAs('Q'),
5369        asYears = makeAs('y');
5370
5371    function clone$1() {
5372        return createDuration(this);
5373    }
5374
5375    function get$2(units) {
5376        units = normalizeUnits(units);
5377        return this.isValid() ? this[units + 's']() : NaN;
5378    }
5379
5380    function makeGetter(name) {
5381        return function () {
5382            return this.isValid() ? this._data[name] : NaN;
5383        };
5384    }
5385
5386    var milliseconds = makeGetter('milliseconds'),
5387        seconds = makeGetter('seconds'),
5388        minutes = makeGetter('minutes'),
5389        hours = makeGetter('hours'),
5390        days = makeGetter('days'),
5391        months = makeGetter('months'),
5392        years = makeGetter('years');
5393
5394    function weeks() {
5395        return absFloor(this.days() / 7);
5396    }
5397
5398    var round = Math.round,
5399        thresholds = {
5400            ss: 44, // a few seconds to seconds
5401            s: 45, // seconds to minute
5402            m: 45, // minutes to hour
5403            h: 22, // hours to day
5404            d: 26, // days to month/week
5405            w: null, // weeks to month
5406            M: 11, // months to year
5407        };
5408
5409    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
5410    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
5411        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
5412    }
5413
5414    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
5415        var duration = createDuration(posNegDuration).abs(),
5416            seconds = round(duration.as('s')),
5417            minutes = round(duration.as('m')),
5418            hours = round(duration.as('h')),
5419            days = round(duration.as('d')),
5420            months = round(duration.as('M')),
5421            weeks = round(duration.as('w')),
5422            years = round(duration.as('y')),
5423            a =
5424                (seconds <= thresholds.ss && ['s', seconds]) ||
5425                (seconds < thresholds.s && ['ss', seconds]) ||
5426                (minutes <= 1 && ['m']) ||
5427                (minutes < thresholds.m && ['mm', minutes]) ||
5428                (hours <= 1 && ['h']) ||
5429                (hours < thresholds.h && ['hh', hours]) ||
5430                (days <= 1 && ['d']) ||
5431                (days < thresholds.d && ['dd', days]);
5432
5433        if (thresholds.w != null) {
5434            a =
5435                a ||
5436                (weeks <= 1 && ['w']) ||
5437                (weeks < thresholds.w && ['ww', weeks]);
5438        }
5439        a = a ||
5440            (months <= 1 && ['M']) ||
5441            (months < thresholds.M && ['MM', months]) ||
5442            (years <= 1 && ['y']) || ['yy', years];
5443
5444        a[2] = withoutSuffix;
5445        a[3] = +posNegDuration > 0;
5446        a[4] = locale;
5447        return substituteTimeAgo.apply(null, a);
5448    }
5449
5450    // This function allows you to set the rounding function for relative time strings
5451    function getSetRelativeTimeRounding(roundingFunction) {
5452        if (roundingFunction === undefined) {
5453            return round;
5454        }
5455        if (typeof roundingFunction === 'function') {
5456            round = roundingFunction;
5457            return true;
5458        }
5459        return false;
5460    }
5461
5462    // This function allows you to set a threshold for relative time strings
5463    function getSetRelativeTimeThreshold(threshold, limit) {
5464        if (thresholds[threshold] === undefined) {
5465            return false;
5466        }
5467        if (limit === undefined) {
5468            return thresholds[threshold];
5469        }
5470        thresholds[threshold] = limit;
5471        if (threshold === 's') {
5472            thresholds.ss = limit - 1;
5473        }
5474        return true;
5475    }
5476
5477    function humanize(argWithSuffix, argThresholds) {
5478        if (!this.isValid()) {
5479            return this.localeData().invalidDate();
5480        }
5481
5482        var withSuffix = false,
5483            th = thresholds,
5484            locale,
5485            output;
5486
5487        if (typeof argWithSuffix === 'object') {
5488            argThresholds = argWithSuffix;
5489            argWithSuffix = false;
5490        }
5491        if (typeof argWithSuffix === 'boolean') {
5492            withSuffix = argWithSuffix;
5493        }
5494        if (typeof argThresholds === 'object') {
5495            th = Object.assign({}, thresholds, argThresholds);
5496            if (argThresholds.s != null && argThresholds.ss == null) {
5497                th.ss = argThresholds.s - 1;
5498            }
5499        }
5500
5501        locale = this.localeData();
5502        output = relativeTime$1(this, !withSuffix, th, locale);
5503
5504        if (withSuffix) {
5505            output = locale.pastFuture(+this, output);
5506        }
5507
5508        return locale.postformat(output);
5509    }
5510
5511    var abs$1 = Math.abs;
5512
5513    function sign(x) {
5514        return (x > 0) - (x < 0) || +x;
5515    }
5516
5517    function toISOString$1() {
5518        // for ISO strings we do not use the normal bubbling rules:
5519        //  * milliseconds bubble up until they become hours
5520        //  * days do not bubble at all
5521        //  * months bubble up until they become years
5522        // This is because there is no context-free conversion between hours and days
5523        // (think of clock changes)
5524        // and also not between days and months (28-31 days per month)
5525        if (!this.isValid()) {
5526            return this.localeData().invalidDate();
5527        }
5528
5529        var seconds = abs$1(this._milliseconds) / 1000,
5530            days = abs$1(this._days),
5531            months = abs$1(this._months),
5532            minutes,
5533            hours,
5534            years,
5535            s,
5536            total = this.asSeconds(),
5537            totalSign,
5538            ymSign,
5539            daysSign,
5540            hmsSign;
5541
5542        if (!total) {
5543            // this is the same as C#'s (Noda) and python (isodate)...
5544            // but not other JS (goog.date)
5545            return 'P0D';
5546        }
5547
5548        // 3600 seconds -> 60 minutes -> 1 hour
5549        minutes = absFloor(seconds / 60);
5550        hours = absFloor(minutes / 60);
5551        seconds %= 60;
5552        minutes %= 60;
5553
5554        // 12 months -> 1 year
5555        years = absFloor(months / 12);
5556        months %= 12;
5557
5558        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
5559        s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
5560
5561        totalSign = total < 0 ? '-' : '';
5562        ymSign = sign(this._months) !== sign(total) ? '-' : '';
5563        daysSign = sign(this._days) !== sign(total) ? '-' : '';
5564        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
5565
5566        return (
5567            totalSign +
5568            'P' +
5569            (years ? ymSign + years + 'Y' : '') +
5570            (months ? ymSign + months + 'M' : '') +
5571            (days ? daysSign + days + 'D' : '') +
5572            (hours || minutes || seconds ? 'T' : '') +
5573            (hours ? hmsSign + hours + 'H' : '') +
5574            (minutes ? hmsSign + minutes + 'M' : '') +
5575            (seconds ? hmsSign + s + 'S' : '')
5576        );
5577    }
5578
5579    var proto$2 = Duration.prototype;
5580
5581    proto$2.isValid = isValid$1;
5582    proto$2.abs = abs;
5583    proto$2.add = add$1;
5584    proto$2.subtract = subtract$1;
5585    proto$2.as = as;
5586    proto$2.asMilliseconds = asMilliseconds;
5587    proto$2.asSeconds = asSeconds;
5588    proto$2.asMinutes = asMinutes;
5589    proto$2.asHours = asHours;
5590    proto$2.asDays = asDays;
5591    proto$2.asWeeks = asWeeks;
5592    proto$2.asMonths = asMonths;
5593    proto$2.asQuarters = asQuarters;
5594    proto$2.asYears = asYears;
5595    proto$2.valueOf = valueOf$1;
5596    proto$2._bubble = bubble;
5597    proto$2.clone = clone$1;
5598    proto$2.get = get$2;
5599    proto$2.milliseconds = milliseconds;
5600    proto$2.seconds = seconds;
5601    proto$2.minutes = minutes;
5602    proto$2.hours = hours;
5603    proto$2.days = days;
5604    proto$2.weeks = weeks;
5605    proto$2.months = months;
5606    proto$2.years = years;
5607    proto$2.humanize = humanize;
5608    proto$2.toISOString = toISOString$1;
5609    proto$2.toString = toISOString$1;
5610    proto$2.toJSON = toISOString$1;
5611    proto$2.locale = locale;
5612    proto$2.localeData = localeData;
5613
5614    proto$2.toIsoString = deprecate(
5615        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
5616        toISOString$1
5617    );
5618    proto$2.lang = lang;
5619
5620    // FORMATTING
5621
5622    addFormatToken('X', 0, 0, 'unix');
5623    addFormatToken('x', 0, 0, 'valueOf');
5624
5625    // PARSING
5626
5627    addRegexToken('x', matchSigned);
5628    addRegexToken('X', matchTimestamp);
5629    addParseToken('X', function (input, array, config) {
5630        config._d = new Date(parseFloat(input) * 1000);
5631    });
5632    addParseToken('x', function (input, array, config) {
5633        config._d = new Date(toInt(input));
5634    });
5635
5636    //! moment.js
5637
5638    hooks.version = '2.2
56389.4';
5639
5640    setHookCallback(createLocal);
5641
5642    hooks.fn = proto;
5643    hooks.min = min;
5644    hooks.max = max;
5645    hooks.now = now;
5646    hooks.utc = createUTC;
5647    hooks.unix = createUnix;
5648    hooks.months = listMonths;
5649    hooks.isDate = isDate;
5650    hooks.locale = getSetGlobalLocale;
5651    hooks.invalid = createInvalid;
5652    hooks.duration = createDuration;
5653    hooks.isMoment = isMoment;
5654    hooks.weekdays = listWeekdays;
5655    hooks.parseZone = createInZone;
5656    hooks.localeData = getLocale;
5657    hooks.isDuration = isDuration;
5658    hooks.monthsShort = listMonthsShort;
5659    hooks.weekdaysMin = listWeekdaysMin;
5660    hooks.defineLocale = defineLocale;
5661    hooks.updateLocale = updateLocale;
5662    hooks.locales = listLocales;
5663    hooks.weekdaysShort = listWeekdaysShort;
5664    hooks.normalizeUnits = normalizeUnits;
5665    hooks.relativeTimeRounding = getSetRelativeTimeRounding;
5666    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
5667    hooks.calendarFormat = getCalendarFormat;
5668    hooks.prototype = proto;
5669
5670    // currently HTML5 input type only supports 24-hour formats
5671    hooks.HTML5_FMT = {
5672        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
5673        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
5674        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
5675        DATE: 'YYYY-MM-DD', // <input type="date" />
5676        TIME: 'HH:mm', // <input type="time" />
5677        TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
5678        TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
5679        WEEK: 'GGGG-[W]WW', // <input type="week" />
5680        MONTH: 'YYYY-MM', // <input type="month" />
5681    };
5682
5683    return hooks;
5684
5685})));
5686
5687/*
5688 * ADOBE CONFIDENTIAL
5689 *
5690 * Copyright 2017 Adobe Systems Incorporated
5691 * All Rights Reserved.
5692 *
5693 * NOTICE:  All information contained herein is, and remains
5694 * the property of Adobe Systems Incorporated and its suppliers,
5695 * if any.  The intellectual and technical concepts contained
5696 * herein are proprietary to Adobe Systems Incorporated and its
5697 * suppliers and may be covered by U.S. and Foreign Patents,
5698 * patents in process, and are protected by trade secret or copyright law.
5699 * Dissemination of this information or reproduction of this material
5700 * is strictly forbidden unless prior written permission is obtained
5701 * from Adobe Systems Incorporated.
5702 *
5703 */
5704(function(root, factory) {
5705    "use strict";
5706
5707    if (typeof module === "object" && module.exports) {
5708        module.exports = factory(require("moment"));
5709    } else {
5710        factory(root.moment);
5711    }
5712}(this, function(moment) {
5713    "use strict";
5714
5715    function normalizeType(type) {
5716        switch (type) {
5717            case "date":
5718            case "time":
5719            case "datetime":
5720                return type;
5721            default:
5722                return "date";
5723        }
5724    }
5725
5726    function normalizeFormat(format) {
5727        switch (format) {
5728            case "short":
5729            case "medium":
5730            case "long":
5731            case "full":
5732                return format;
5733            default:
5734                return "medium";
5735        }
5736    }
5737
5738    moment.fn.formatWithPreset = function(type, format) {
5739        var localeData = this.localeData();
5740        var actualFormat = localeData._presets[normalizeType(type)][normalizeFormat(format)];
5741
5742        if (typeof actualFormat === "function") {
5743            actualFormat = actualFormat(this);
5744        }
5745
5746        return this.format(actualFormat);
5747    };
5748
5749    return moment;
5750}));
5751
5752//! moment.js locale configuration
5753
5754;(function (global, factory) {
5755   typeof exports === 'object' && typeof module !== 'undefined'
5756       && typeof require === 'function' ? factory(require('../moment')) :
5757   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
5758   factory(global.moment)
5759}(this, (function (moment) { 'use strict';
5760
5761
5762    function processRelativeTime$2(number, withoutSuffix, key, isFuture) {
5763        var format = {
5764            m: ['eine Minute', 'einer Minute'],
5765            h: ['eine Stunde', 'einer Stunde'],
5766            d: ['ein Tag', 'einem Tag'],
5767            dd: [number + ' Tage', number + ' Tagen'],
5768            w: ['eine Woche', 'einer Woche'],
5769            M: ['ein Monat', 'einem Monat'],
5770            MM: [number + ' Monate', number + ' Monaten'],
5771            y: ['ein Jahr', 'einem Jahr'],
5772            yy: [number + ' Jahre', number + ' Jahren'],
5773        };
5774        return withoutSuffix ? format[key][0] : format[key][1];
5775    }
5776
5777    var de = moment.defineLocale('de', {
5778        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
5779        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
5780        monthsParseExact : true,
5781        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
5782        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
5783        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
5784        weekdaysParseExact : true,
5785        longDateFormat : {
5786            LT: 'HH:mm',
5787            LTS: 'HH:mm:ss',
5788            L : 'DD.MM.YYYY',
5789            LL : 'D. MMMM YYYY',
5790            LLL : 'D. MMMM YYYY HH:mm',
5791            LLLL : 'dddd, D. MMMM YYYY HH:mm'
5792        },
5793        calendar : {
5794            sameDay: '[heute um] LT [Uhr]',
5795            sameElse: 'L',
5796            nextDay: '[morgen um] LT [Uhr]',
5797            nextWeek: 'dddd [um] LT [Uhr]',
5798            lastDay: '[gestern um] LT [Uhr]',
5799            lastWeek: '[letzten] dddd [um] LT [Uhr]'
5800        },
5801        relativeTime : {
5802            future: 'in %s',
5803            past: 'vor %s',
5804            s: 'ein paar Sekunden',
5805            ss: '%d Sekunden',
5806            m: processRelativeTime$2,
5807            mm: '%d Minuten',
5808            h: processRelativeTime$2,
5809            hh: '%d Stunden',
5810            d: processRelativeTime$2,
5811            dd: processRelativeTime$2,
5812            w: processRelativeTime$2,
5813            ww: '%d Wochen',
5814            M: processRelativeTime$2,
5815            MM: processRelativeTime$2,
5816            y: processRelativeTime$2,
5817            yy: processRelativeTime$2,
5818        },
5819        dayOfMonthOrdinalParse: /\d{1,2}\./,
5820        ordinal : '%d.',
5821        week : {
5822            dow : 1, // Monday is the first day of the week.
5823            doy : 4  // The week that contains Jan 4th is the first week of the year.
5824        }
5825    });
5826
5827    return de;
5828
5829})));
5830
5831//! moment.js locale configuration
5832
5833;(function (global, factory) {
5834   typeof exports === 'object' && typeof module !== 'undefined'
5835       && typeof require === 'function' ? factory(require('../moment')) :
5836   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
5837   factory(global.moment)
5838}(this, (function (moment) { 'use strict';
5839
5840
5841    var monthsShortDot$3 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
5842        monthsShort$4 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
5843
5844    var monthsParse$5 = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];
5845    var monthsRegex$6 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
5846
5847    var es = moment.defineLocale('es', {
5848        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
5849            '_'
5850        ),
5851        monthsShort: function (m, format) {
5852            if (!m) {
5853                return monthsShortDot$3;
5854            } else if (/-MMM-/.test(format)) {
5855                return monthsShort$4[m.month()];
5856            } else {
5857                return monthsShortDot$3[m.month()];
5858            }
5859        },
5860        monthsRegex: monthsRegex$6,
5861        monthsShortRegex: monthsRegex$6,
5862        monthsStrictRegex:
5863            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
5864        monthsShortStrictRegex:
5865            /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
5866        monthsParse: monthsParse$5,
5867        longMonthsParse: monthsParse$5,
5868        shortMonthsParse: monthsParse$5,
5869        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
5870        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
5871        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
5872        weekdaysParseExact: true,
5873        longDateFormat: {
5874            LT: 'H:mm',
5875            LTS: 'H:mm:ss',
5876            L: 'DD/MM/YYYY',
5877            LL: 'D [de] MMMM [de] YYYY',
5878            LLL: 'D [de] MMMM [de] YYYY H:mm',
5879            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
5880        },
5881        calendar: {
5882            sameDay: function () {
5883                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
5884            },
5885            nextDay: function () {
5886                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
5887            },
5888            nextWeek: function () {
5889                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
5890            },
5891            lastDay: function () {
5892                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
5893            },
5894            lastWeek: function () {
5895                return (
5896                    '[el] dddd [pasado a la' +
5897                    (this.hours() !== 1 ? 's' : '') +
5898                    '] LT'
5899                );
5900            },
5901            sameElse: 'L',
5902        },
5903        relativeTime: {
5904            future: 'en %s',
5905            past: 'hace %s',
5906            s: 'unos segundos',
5907            ss: '%d segundos',
5908            m: 'un minuto',
5909            mm: '%d minutos',
5910            h: 'una hora',
5911            hh: '%d horas',
5912            d: 'un día',
5913            dd: '%d días',
5914            w: 'una semana',
5915            ww: '%d semanas',
5916            M: 'un mes',
5917            MM: '%d meses',
5918            y: 'un año',
5919            yy: '%d años',
5920        },
5921        dayOfMonthOrdinalParse: /\d{1,2}º/,
5922        ordinal: '%dº',
5923        week: {
5924            dow: 1, // Monday is the first day of the week.
5925            doy: 4, // The week that contains Jan 4th is the first week of the year.
5926        },
5927        invalidDate: 'Fecha inválida',
5928    });
5929    return es;
5930})));
5931
5932//! moment.js locale configuration
5933
5934;(function (global, factory) {
5935   typeof exports === 'object' && typeof module !== 'undefined'
5936       && typeof require === 'function' ? factory(require('../moment')) :
5937   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
5938   factory(global.moment)
5939}(this, (function (moment) { 'use strict';
5940
5941    var monthsStrictRegex$1 =
5942            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
5943        monthsShortStrictRegex$1 =
5944            /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
vendor: 21,826 bytes, lines 5945-6602
5945        monthsRegex$7 =
5946            /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
5947        monthsParse$6 = [
5948            /^janv/i,
5949            /^févr/i,
5950            /^mars/i,
5951            /^avr/i,
5952            /^mai/i,
5953            /^juin/i,
5954            /^juil/i,
5955            /^août/i,
5956            /^sept/i,
5957            /^oct/i,
5958            /^nov/i,
5959            /^déc/i,
5960        ];
5961
5962    var fr = moment.defineLocale('fr', {
5963        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
5964            '_'
5965        ),
5966        monthsShort:
5967            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
5968                '_'
5969            ),
5970        monthsRegex: monthsRegex$7,
5971        monthsShortRegex: monthsRegex$7,
5972        monthsStrictRegex: monthsStrictRegex$1,
5973        monthsShortStrictRegex: monthsShortStrictRegex$1,
5974        monthsParse: monthsParse$6,
5975        longMonthsParse: monthsParse$6,
5976        shortMonthsParse: monthsParse$6,
5977        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
5978        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
5979        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
5980        weekdaysParseExact: true,
5981        longDateFormat: {
5982            LT: 'HH:mm',
5983            LTS: 'HH:mm:ss',
5984            L: 'DD/MM/YYYY',
5985            LL: 'D MMMM YYYY',
5986            LLL: 'D MMMM YYYY HH:mm',
5987            LLLL: 'dddd D MMMM YYYY HH:mm',
5988        },
5989        calendar: {
5990            sameDay: '[Aujourd’hui à] LT',
5991            nextDay: '[Demain à] LT',
5992            nextWeek: 'dddd [à] LT',
5993            lastDay: '[Hier à] LT',
5994            lastWeek: 'dddd [dernier à] LT',
5995            sameElse: 'L',
5996        },
5997        relativeTime: {
5998            future: 'dans %s',
5999            past: 'il y a %s',
6000            s: 'quelques secondes',
6001            ss: '%d secondes',
6002            m: 'une minute',
6003            mm: '%d minutes',
6004            h: 'une heure',
6005            hh: '%d heures',
6006            d: 'un jour',
6007            dd: '%d jours',
6008            w: 'une semaine',
6009            ww: '%d semaines',
6010            M: 'un mois',
6011            MM: '%d mois',
6012            y: 'un an',
6013            yy: '%d ans',
6014        },
6015        dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
6016        ordinal: function (number, period) {
6017            switch (period) {
6018                // TODO: Return 'e' when day of month > 1. Move this case inside
6019                // block for masculine words below.
6020                // See https://github.com/moment/moment/issues/3375
6021                case 'D':
6022                    return number + (number === 1 ? 'er' : '');
6023
6024                // Words with masculine grammatical gender: mois, trimestre, jour
6025                default:
6026                case 'M':
6027                case 'Q':
6028                case 'DDD':
6029                case 'd':
6030                    return number + (number === 1 ? 'er' : 'e');
6031
6032                // Words with feminine grammatical gender: semaine
6033                case 'w':
6034                case 'W':
6035                    return number + (number === 1 ? 're' : 'e');
6036            }
6037        },
6038        week: {
6039            dow: 1, // Monday is the first day of the week.
6040            doy: 4, // The week that contains Jan 4th is the first week of the year.
6041        },
6042    });
6043
6044    return fr;
6045
6046})));
6047
6048//! moment.js locale configuration
6049
6050;(function (global, factory) {
6051   typeof exports === 'object' && typeof module !== 'undefined'
6052       && typeof require === 'function' ? factory(require('../moment')) :
6053   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
6054   factory(global.moment)
6055}(this, (function (moment) { 'use strict';
6056
6057
6058    var it = moment.defineLocale('it', {
6059        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
6060            '_'
6061        ),
6062        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
6063        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
6064            '_'
6065        ),
6066        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
6067        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
6068        longDateFormat: {
6069            LT: 'HH:mm',
6070            LTS: 'HH:mm:ss',
6071            L: 'DD/MM/YYYY',
6072            LL: 'D MMMM YYYY',
6073            LLL: 'D MMMM YYYY HH:mm',
6074            LLLL: 'dddd D MMMM YYYY HH:mm',
6075        },
6076        calendar: {
6077            sameDay: function () {
6078                return (
6079                    '[Oggi a' +
6080                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
6081                    ']LT'
6082                );
6083            },
6084            nextDay: function () {
6085                return (
6086                    '[Domani a' +
6087                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
6088                    ']LT'
6089                );
6090            },
6091            nextWeek: function () {
6092                return (
6093                    'dddd [a' +
6094                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
6095                    ']LT'
6096                );
6097            },
6098            lastDay: function () {
6099                return (
6100                    '[Ieri a' +
6101                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
6102                    ']LT'
6103                );
6104            },
6105            lastWeek: function () {
6106                switch (this.day()) {
6107                    case 0:
6108                        return (
6109                            '[La scorsa] dddd [a' +
6110                            (this.hours() > 1
6111                                ? 'lle '
6112                                : this.hours() === 0
6113                                ? ' '
6114                                : "ll'") +
6115                            ']LT'
6116                        );
6117                    default:
6118                        return (
6119                            '[Lo scorso] dddd [a' +
6120                            (this.hours() > 1
6121                                ? 'lle '
6122                                : this.hours() === 0
6123                                ? ' '
6124                                : "ll'") +
6125                            ']LT'
6126                        );
6127                }
6128            },
6129            sameElse: 'L',
6130        },
6131        relativeTime: {
6132            future: 'tra %s',
6133            past: '%s fa',
6134            s: 'alcuni secondi',
6135            ss: '%d secondi',
6136            m: 'un minuto',
6137            mm: '%d minuti',
6138            h: "un'ora",
6139            hh: '%d ore',
6140            d: 'un giorno',
6141            dd: '%d giorni',
6142            w: 'una settimana',
6143            ww: '%d settimane',
6144            M: 'un mese',
6145            MM: '%d mesi',
6146            y: 'un anno',
6147            yy: '%d anni',
6148        },
6149        dayOfMonthOrdinalParse: /\d{1,2}º/,
6150        ordinal: '%dº',
6151        week: {
6152            dow: 1, // Monday is the first day of the week.
6153            doy: 4, // The week that contains Jan 4th is the first week of the year.
6154        },
6155    });
6156
6157    return it;
6158
6159})));
6160
6161//! moment.js locale configuration
6162
6163;(function (global, factory) {
6164   typeof exports === 'object' && typeof module !== 'undefined'
6165       && typeof require === 'function' ? factory(require('../moment')) :
6166   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
6167   factory(global.moment)
6168}(this, (function (moment) { 'use strict';
6169
6170
6171    var ptBr = moment.defineLocale('pt-br', {
6172        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
6173            '_'
6174        ),
6175        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
6176        weekdays:
6177            'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(
6178                '_'
6179            ),
6180        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
6181        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),
6182        weekdaysParseExact: true,
6183        longDateFormat: {
6184            LT: 'HH:mm',
6185            LTS: 'HH:mm:ss',
6186            L: 'DD/MM/YYYY',
6187            LL: 'D [de] MMMM [de] YYYY',
6188            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',
6189            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',
6190        },
6191        calendar: {
6192            sameDay: '[Hoje às] LT',
6193            nextDay: '[Amanhã às] LT',
6194            nextWeek: 'dddd [às] LT',
6195            lastDay: '[Ontem às] LT',
6196            lastWeek: function () {
6197                return this.day() === 0 || this.day() === 6
6198                    ? '[Último] dddd [às] LT' // Saturday + Sunday
6199                    : '[Última] dddd [às] LT'; // Monday - Friday
6200            },
6201            sameElse: 'L',
6202        },
6203        relativeTime: {
6204            future: 'em %s',
6205            past: 'há %s',
6206            s: 'poucos segundos',
6207            ss: '%d segundos',
6208            m: 'um minuto',
6209            mm: '%d minutos',
6210            h: 'uma hora',
6211            hh: '%d horas',
6212            d: 'um dia',
6213            dd: '%d dias',
6214            M: 'um mês',
6215            MM: '%d meses',
6216            y: 'um ano',
6217            yy: '%d anos',
6218        },
6219        dayOfMonthOrdinalParse: /\d{1,2}º/,
6220        ordinal: '%dº',
6221        invalidDate: 'Data inválida',
6222    });
6223
6224    return ptBr;
6225
6226})));
6227
6228//! moment.js locale configuration
6229
6230;(function (global, factory) {
6231   typeof exports === 'object' && typeof module !== 'undefined'
6232       && typeof require === 'function' ? factory(require('../moment')) :
6233   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
6234   factory(global.moment)
6235}(this, (function (moment) { 'use strict';
6236
6237
6238    var zhCn = moment.defineLocale('zh-cn', {
6239        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
6240            '_'
6241        ),
6242        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
6243            '_'
6244        ),
6245        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
6246        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
6247        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
6248        longDateFormat: {
6249            LT: 'HH:mm',
6250            LTS: 'HH:mm:ss',
6251            L: 'YYYY/MM/DD',
6252            LL: 'YYYY年M月D日',
6253            LLL: 'YYYY年M月D日Ah点mm分',
6254            LLLL: 'YYYY年M月D日ddddAh点mm分',
6255            l: 'YYYY/M/D',
6256            ll: 'YYYY年M月D日',
6257            lll: 'YYYY年M月D日 HH:mm',
6258            llll: 'YYYY年M月D日dddd HH:mm',
6259        },
6260        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
6261        meridiemHour: function (hour, meridiem) {
6262            if (hour === 12) {
6263                hour = 0;
6264            }
6265            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
6266                return hour;
6267            } else if (meridiem === '下午' || meridiem === '晚上') {
6268                return hour + 12;
6269            } else {
6270                // '中午'
6271                return hour >= 11 ? hour : hour + 12;
6272            }
6273        },
6274        meridiem: function (hour, minute, isLower) {
6275            var hm = hour * 100 + minute;
6276            if (hm < 600) {
6277                return '凌晨';
6278            } else if (hm < 900) {
6279                return '早上';
6280            } else if (hm < 1130) {
6281                return '上午';
6282            } else if (hm < 1230) {
6283                return '中午';
6284            } else if (hm < 1800) {
6285                return '下午';
6286            } else {
6287                return '晚上';
6288            }
6289        },
6290        calendar: {
6291            sameDay: '[今天]LT',
6292            nextDay: '[明天]LT',
6293            nextWeek: function (now) {
6294                if (now.week() !== this.week()) {
6295                    return '[下]dddLT';
6296                } else {
6297                    return '[本]dddLT';
6298                }
6299            },
6300            lastDay: '[昨天]LT',
6301            lastWeek: function (now) {
6302                if (this.week() !== now.week()) {
6303                    return '[上]dddLT';
6304                } else {
6305                    return '[本]dddLT';
6306                }
6307            },
6308            sameElse: 'L',
6309        },
6310        dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
6311        ordinal: function (number, period) {
6312            switch (period) {
6313                case 'd':
6314                case 'D':
6315                case 'DDD':
6316                    return number + '日';
6317                case 'M':
6318                    return number + '月';
6319                case 'w':
6320                case 'W':
6321                    return number + '周';
6322                default:
6323                    return number;
6324            }
6325        },
6326        relativeTime: {
6327            future: '%s后',
6328            past: '%s前',
6329            s: '几秒',
6330            ss: '%d 秒',
6331            m: '1 分钟',
6332            mm: '%d 分钟',
6333            h: '1 小时',
6334            hh: '%d 小时',
6335            d: '1 天',
6336            dd: '%d 天',
6337            w: '1 周',
6338            ww: '%d 周',
6339            M: '1 个月',
6340            MM: '%d 个月',
6341            y: '1 å¹´',
6342            yy: '%d å¹´',
6343        },
6344        week: {
6345            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
6346            dow: 1, // Monday is the first day of the week.
6347            doy: 4, // The week that contains Jan 4th is the first week of the year.
6348        },
6349    });
6350
6351    return zhCn;
6352
6353})));
6354
6355//! moment.js locale configuration
6356
6357;(function (global, factory) {
6358   typeof exports === 'object' && typeof module !== 'undefined'
6359       && typeof require === 'function' ? factory(require('../moment')) :
6360   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
6361   factory(global.moment)
6362}(this, (function (moment) { 'use strict';
6363
6364
6365    var zhTw = moment.defineLocale('zh-tw', {
6366        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
6367            '_'
6368        ),
6369        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
6370            '_'
6371        ),
6372        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
6373        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
6374        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
6375        longDateFormat: {
6376            LT: 'HH:mm',
6377            LTS: 'HH:mm:ss',
6378            L: 'YYYY/MM/DD',
6379            LL: 'YYYY年M月D日',
6380            LLL: 'YYYY年M月D日 HH:mm',
6381            LLLL: 'YYYY年M月D日dddd HH:mm',
6382            l: 'YYYY/M/D',
6383            ll: 'YYYY年M月D日',
6384            lll: 'YYYY年M月D日 HH:mm',
6385            llll: 'YYYY年M月D日dddd HH:mm',
6386        },
6387        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
6388        meridiemHour: function (hour, meridiem) {
6389            if (hour === 12) {
6390                hour = 0;
6391            }
6392            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
6393                return hour;
6394            } else if (meridiem === '中午') {
6395                return hour >= 11 ? hour : hour + 12;
6396            } else if (meridiem === '下午' || meridiem === '晚上') {
6397                return hour + 12;
6398            }
6399        },
6400        meridiem: function (hour, minute, isLower) {
6401            var hm = hour * 100 + minute;
6402            if (hm < 600) {
6403                return '凌晨';
6404            } else if (hm < 900) {
6405                return '早上';
6406            } else if (hm < 1130) {
6407                return '上午';
6408            } else if (hm < 1230) {
6409                return '中午';
6410            } else if (hm < 1800) {
6411                return '下午';
6412            } else {
6413                return '晚上';
6414            }
6415        },
6416        calendar: {
6417            sameDay: '[今天] LT',
6418            nextDay: '[明天] LT',
6419            nextWeek: '[下]dddd LT',
6420            lastDay: '[昨天] LT',
6421            lastWeek: '[上]dddd LT',
6422            sameElse: 'L',
6423        },
6424        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
6425        ordinal: function (number, period) {
6426            switch (period) {
6427                case 'd':
6428                case 'D':
6429                case 'DDD':
6430                    return number + '日';
6431                case 'M':
6432                    return number + '月';
6433                case 'w':
6434                case 'W':
6435                    return number + '週';
6436                default:
6437                    return number;
6438            }
6439        },
6440        relativeTime: {
6441            future: '%s後',
6442            past: '%s前',
6443            s: '幾秒',
6444            ss: '%d 秒',
6445            m: '1 分鐘',
6446            mm: '%d 分鐘',
6447            h: '1 小時',
6448            hh: '%d 小時',
6449            d: '1 天',
6450            dd: '%d 天',
6451            M: '1 個月',
6452            MM: '%d 個月',
6453            y: '1 å¹´',
6454            yy: '%d å¹´',
6455        },
6456    });
6457
6458    return zhTw;
6459
6460})));
6461
6462//! moment.js locale configuration
6463
6464;(function (global, factory) {
6465   typeof exports === 'object' && typeof module !== 'undefined'
6466       && typeof require === 'function' ? factory(require('../moment')) :
6467   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
6468   factory(global.moment)
6469}(this, (function (moment) { 'use strict';
6470
6471
6472    var ja = moment.defineLocale('ja', {
6473        eras: [
6474            {
6475                since: '2019-05-01',
6476                offset: 1,
6477                name: '令和',
6478                narrow: '㋿',
6479                abbr: 'R',
6480            },
6481            {
6482                since: '1989-01-08',
6483                until: '2019-04-30',
6484                offset: 1,
6485                name: '平成',
6486                narrow: '㍻',
6487                abbr: 'H',
6488            },
6489            {
6490                since: '1926-12-25',
6491                until: '1989-01-07',
6492                offset: 1,
6493                name: '昭和',
6494                narrow: '㍼',
6495                abbr: 'S',
6496            },
6497            {
6498                since: '1912-07-30',
6499                until: '1926-12-24',
6500                offset: 1,
6501                name: '大正',
6502                narrow: '㍽',
6503                abbr: 'T',
6504            },
6505            {
6506                since: '1873-01-01',
6507                until: '1912-07-29',
6508                offset: 6,
6509                name: '明治',
6510                narrow: '㍾',
6511                abbr: 'M',
6512            },
6513            {
6514                since: '0001-01-01',
6515                until: '1873-12-31',
6516                offset: 1,
6517                name: '西暦',
6518                narrow: 'AD',
6519                abbr: 'AD',
6520            },
6521            {
6522                since: '0000-12-31',
6523                until: -Infinity,
6524                offset: 1,
6525                name: '紀元前',
6526                narrow: 'BC',
6527                abbr: 'BC',
6528            },
6529        ],
6530        eraYearOrdinalRegex: /(元|\d+)年/,
6531        eraYearOrdinalParse: function (input, match) {
6532            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);
6533        },
6534        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
6535        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
6536            '_'
6537        ),
6538        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
6539        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),
6540        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),
6541        longDateFormat: {
6542            LT: 'HH:mm',
6543            LTS: 'HH:mm:ss',
6544            L: 'YYYY/MM/DD',
6545            LL: 'YYYY年M月D日',
6546            LLL: 'YYYY年M月D日 HH:mm',
6547            LLLL: 'YYYY年M月D日 dddd HH:mm',
6548            l: 'YYYY/MM/DD',
6549            ll: 'YYYY年M月D日',
6550            lll: 'YYYY年M月D日 HH:mm',
6551            llll: 'YYYY年M月D日(ddd) HH:mm',
6552        },
6553        meridiemParse: /午前|午後/i,
6554        isPM: function (input) {
6555            return input === '午後';
6556        },
6557        meridiem: function (hour, minute, isLower) {
6558            if (hour < 12) {
6559                return '午前';
6560            } else {
6561                return '午後';
6562            }
6563        },
6564        calendar: {
6565            sameDay: '[今日] LT',
6566            nextDay: '[明日] LT',
6567            nextWeek: function (now) {
6568                if (now.week() !== this.week()) {
6569                    return '[来週]dddd LT';
6570                } else {
6571                    return 'dddd LT';
6572                }
6573            },
6574            lastDay: '[昨日] LT',
6575            lastWeek: function (now) {
6576                if (this.week() !== now.week()) {
6577                    return '[先週]dddd LT';
6578                } else {
6579                    return 'dddd LT';
6580                }
6581            },
6582            sameElse: 'L',
6583        },
6584        dayOfMonthOrdinalParse: /\d{1,2}日/,
6585        ordinal: function (number, period) {
6586            switch (period) {
6587                case 'y':
6588                    return number === 1 ? '元年' : number + '年';
6589                case 'd':
6590                case 'D':
6591                case 'DDD':
6592                    return number + '日';
6593                default:
6594                    return number;
6595            }
6596        },
6597        relativeTime: {
6598            future: '%s後',
6599            past: '%s前',
6600            s: '数秒',
6601            ss: '%d秒',
6602            m: '1分',
6603            mm: '%d分',
6604            h: '1時間',
6605            hh: '%d時間',
6606            d: '1日',
6607            dd: '%d日',
6608            M: '1ヶ月',
6609            MM: '%dヶ月',
6610            y: '1å¹´',
6611            yy: '%då¹´',
6612        },
6613    });
6614
6615    return ja;
6616
6617})));
6618
6619//! moment.js locale configuration
6620
6621;(function (global, factory) {
6622   typeof exports === 'object' && typeof module !== 'undefined'
6623       && typeof require === 'function' ? factory(require('../moment')) :
6624   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
6625   factory(global.moment)
6626}(this, (function (moment) { 'use strict';
6627
6628
6629    var ko = moment.defineLocale('ko', {
6630        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
6631        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(
6632            '_'
6633        ),
6634        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
6635        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),
6636        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),
6637        longDateFormat: {
6638            LT: 'A h:mm',
6639            LTS: 'A h:mm:ss',
6640            L: 'YYYY.MM.DD.',
6641            LL: 'YYYY년 MMMM D일',
6642            LLL: 'YYYY년 MMMM D일 A h:mm',
6643            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',
6644            l: 'YYYY.MM.DD.',
6645            ll: 'YYYY년 MMMM D일',
6646            lll: 'YYYY년 MMMM D일 A h:mm',
6647            llll: 'YYYY년 MMMM D일 dddd A h:mm',
6648        },
6649        calendar: {
6650            sameDay: '오늘 LT',
6651            nextDay: '내일 LT',
6652            nextWeek: 'dddd LT',
6653            lastDay: '어제 LT',
6654            lastWeek: '지난주 dddd LT',
6655            sameElse: 'L',
6656        },
6657        relativeTime: {
6658            future: '%s 후',
6659            past: '%s 전',
6660            s: '몇 초',
6661            ss: '%d초',
6662            m: '1분',
6663            mm: '%d분',
6664            h: '한 시간',
6665            hh: '%d시간',
6666            d: '하루',
6667            dd: '%d일',
6668            M: '한 달',
6669            MM: '%d달',
6670            y: '일 년',
6671            yy: '%d년',
6672        },
6673        dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/,
6674        ordinal: function (number, period) {
6675            switch (period) {
6676                case 'd':
6677                case 'D':
6678                case 'DDD':
6679                    return number + '일';
6680                case 'M':
6681                    return number + '월';
6682                case 'w':
6683                case 'W':
6684                    return number + '주';
6685                default:
6686                    return number;
6687            }
6688        },
6689        meridiemParse: /오전|오후/,
6690        isPM: function (token) {
6691            return token === '오후';
6692        },
6693        meridiem: function (hour, minute, isUpper) {
6694            return hour < 12 ? '오전' : '오후';
6695        },
6696    });
6697
6698    return ko;
6699
6700})));
6701
6702/*
6703 * ADOBE CONFIDENTIAL
6704 *
6705 * Copyright 2017 Adobe Systems Incorporated
6706 * All Rights Reserved.
6707 *
6708 * NOTICE:  All information contained herein is, and remains
6709 * the property of Adobe Systems Incorporated and its suppliers,
6710 * if any.  The intellectual and technical concepts contained
6711 * herein are proprietary to Adobe Systems Incorporated and its
6712 * suppliers and may be covered by U.S. and Foreign Patents,
6713 * patents in process, and are protected by trade secret or copyright law.
6714 * Dissemination of this information or reproduction of this material
6715 * is strictly forbidden unless prior written permission is obtained
6716 * from Adobe Systems Incorporated.
6717 */
6718(function(root, factory) {
6719    "use strict";
6720
6721    if (typeof module === "object" && module.exports) {
6722        module.exports = factory(require("moment"));
6723    } else {
6724        factory(root.moment);
6725    }
6726}(this, function(moment) {
6727    "use strict";
6728
6729    var shortTimeZoneFormat = new Intl.DateTimeFormat("de", { year: "2-digit", timeZoneName: "short" });
6730    var longTimeZoneFormat = new Intl.DateTimeFormat("de", { year: "2-digit", timeZoneName: "long" });
6731
6732    function getShortTimeZone(date) {
6733        var v = shortTimeZoneFormat.format(date);
6734        return v.substring(v.indexOf(" ") + 1);
6735    }
6736
6737    function getLongTimeZone(date) {
6738        var v = longTimeZoneFormat.format(date);
6739        return v.substring(v.indexOf(" ") + 1);
6740    }
6741
6742    // See https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/de/ca-gregorian.json
6743    moment.updateLocale("de", {
6744        presets: {
6745            date: {
6746                short: "DD.MM.YY",
6747                medium: "DD.MM.Y",
6748                long: "D. MMMM Y",
6749                full: "dddd, D. MMMM Y"
6750            },
6751            time: {
6752                short: "HH:mm",
6753                medium: "HH:mm:ss",
6754                long: function(moment) {
6755                    return "HH:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
6756                },
6757                full: function(moment) {
6758                    return "HH:mm:ss [" + getLongTimeZone(moment.toDate()) + "]";
6759                }
6760            },
6761            datetime: {
6762                short: "DD.MM.YY, HH:mm",
6763                medium: "DD.MM.Y, HH:mm:ss",
6764                long: function(moment) {
6765                    return "D. MMMM Y [um] HH:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
6766                },
6767                full: function(moment) {
6768                    return "dddd, D. MMMM Y [um] HH:mm:ss [" + getLongTimeZone(moment.toDate()) + "]";
6769                }
6770            }
6771        }
6772    });
6773}));
6774
6775/*
6776 * ADOBE CONFIDENTIAL
6777 *
6778 * Copyright 2017 Adobe Systems Incorporated
6779 * All Rights Reserved.
6780 *
6781 * NOTICE:  All information contained herein is, and remains
6782 * the property of Adobe Systems Incorporated and its suppliers,
6783 * if any.  The intellectual and technical concepts contained
6784 * herein are proprietary to Adobe Systems Incorporated and its
6785 * suppliers and may be covered by U.S. and Foreign Patents,
6786 * patents in process, and are protected by trade secret or copyright law.
6787 * Dissemination of this information or reproduction of this material
6788 * is strictly forbidden unless prior written permission is obtained
6789 * from Adobe Systems Incorporated.
6790 */
6791(function(root, factory) {
6792    "use strict";
6793
6794    if (typeof module === "object" && module.exports) {
6795        module.exports = factory(require("moment"));
6796    } else {
6797        factory(root.moment);
6798    }
6799}(this, function(moment) {
6800    "use strict";
6801
6802    var shortTimeZoneFormat = new Intl.DateTimeFormat("es", { year: "2-digit", timeZoneName: "short" });
6803    var longTimeZoneFormat = new Intl.DateTimeFormat("es", { year: "2-digit", timeZoneName: "long" });
6804
6805    function getShortTimeZone(date) {
6806        var v = shortTimeZoneFormat.format(date);
6807        return v.substring(v.indexOf(" ") + 1);
6808    }
6809
6810    function getLongTimeZone(date) {
6811        var v = longTimeZoneFormat.format(date);
6812        return v.substring(v.indexOf(" ") + 1);
6813    }
6814
6815    // See https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/es/ca-gregorian.json
6816    moment.updateLocale("es", {
6817        presets: {
6818            date: {
6819                short: "D/M/YY",
6820                medium: "D MMM Y",
6821                long: "D [de] MMMM [de] Y",
6822                full: "dddd, D [de] MMMM [de] Y"
6823            },
6824            time: {
6825                short: "H:mm",
6826                medium: "H:mm:ss",
6827                long: function(moment) {
6828                    return "H:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
6829                },
6830                full: function(moment) {
6831                    return "H:mm:ss [(" + getLongTimeZone(moment.toDate()) + ")]";
6832                }
6833            },
6834            datetime: {
6835                short: "D/M/YY H:mm",
6836                medium: "D MMM Y H:mm:ss",
6837                long: function(moment) {
6838                    return "D [de] MMMM [de] Y, H:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
6839                },
6840                full: function(moment) {
6841                    return "dddd, D [de] MMMM [de] Y, H:mm:ss [(" + getLongTimeZone(moment.toDate()) + ")]";
6842                }
6843            }
6844        }
6845    });
6846}));
6847
6848/*
6849 * ADOBE CONFIDENTIAL
6850 *
6851 * Copyright 2017 Adobe Systems Incorporated
6852 * All Rights Reserved.
6853 *
6854 * NOTICE:  All information contained herein is, and remains
6855 * the property of Adobe Systems Incorporated and its suppliers,
6856 * if any.  The intellectual and technical concepts contained
6857 * herein are proprietary to Adobe Systems Incorporated and its
6858 * suppliers and may be covered by U.S. and Foreign Patents,
6859 * patents in process, and are protected by trade secret or copyright law.
6860 * Dissemination of this information or reproduction of this material
6861 * is strictly forbidden unless prior written permission is obtained
6862 * from Adobe Systems Incorporated.
6863 */
6864(function(root, factory) {
6865    "use strict";
6866
6867    if (typeof module === "object" && module.exports) {
6868        module.exports = factory(require("moment"));
6869    } else {
6870        factory(root.moment);
6871    }
6872}(this, function(moment) {
6873    "use strict";
6874
6875    var shortTimeZoneFormat = new Intl.DateTimeFormat("fr", { year: "2-digit", timeZoneName: "short" });
6876    var longTimeZoneFormat = new Intl.DateTimeFormat("fr", { year: "2-digit", timeZoneName: "long" });
6877
6878    function getShortTimeZone(date) {
6879        var v = shortTimeZoneFormat.format(date);
6880        return v.substring(v.indexOf(" ") + 1);
6881    }
6882
6883    function getLongTimeZone(date) {
6884        var v = longTimeZoneFormat.format(date);
6885        return v.substring(v.indexOf(" ") + 1);
6886    }
6887
6888    moment.updateLocale("fr", {
6889        presets: {
6890            date: {
6891                short: "DD/MM/Y",
6892                medium: "D MMM Y",
6893                long: "D MMMM Y",
6894                full: "dddd D MMMM Y"
6895            },
6896            time: {
6897                short: "HH:mm",
6898                medium: "HH:mm:ss",
6899                long: function(moment) {
6900                    return "HH:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
6901                },
6902                full: function(moment) {
6903                    return "HH:mm:ss [" + getLongTimeZone(moment.toDate()) + "]";
6904                }
6905            },
6906            datetime: {
6907                short: "DD/MM/Y HH:mm",
6908                medium: "D MMM Y à HH:mm:ss",
6909                long: function(moment) {
6910                    return "D MMMM Y à HH:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
6911                },
6912                full: function(moment) {
6913                    return "dddd D MMMM Y à HH:mm:ss [" + getLongTimeZone(moment.toDate()) + "]";
6914                }
6915            }
6916        }
6917    });
6918}));
6919
6920/*
6921 * ADOBE CONFIDENTIAL
6922 *
6923 * Copyright 2017 Adobe Systems Incorporated
6924 * All Rights Reserved.
6925 *
6926 * NOTICE:  All information contained herein is, and remains
6927 * the property of Adobe Systems Incorporated and its suppliers,
6928 * if any.  The intellectual and technical concepts contained
6929 * herein are proprietary to Adobe Systems Incorporated and its
6930 * suppliers and may be covered by U.S. and Foreign Patents,
6931 * patents in process, and are protected by trade secret or copyright law.
6932 * Dissemination of this information or reproduction of this material
6933 * is strictly forbidden unless prior written permission is obtained
6934 * from Adobe Systems Incorporated.
6935 */
6936(function(root, factory) {
6937    "use strict";
6938
6939    if (typeof module === "object" && module.exports) {
6940        module.exports = factory(require("moment"));
6941    } else {
6942        factory(root.moment);
6943    }
6944}(this, function(moment) {
6945    "use strict";
6946
6947    var shortTimeZoneFormat = new Intl.DateTimeFormat("it", { year: "2-digit", timeZoneName: "short" });
6948    var longTimeZoneFormat = new Intl.DateTimeFormat("it", { year: "2-digit", timeZoneName: "long" });
6949
6950    function getShortTimeZone(date) {
6951        var v = shortTimeZoneFormat.format(date);
6952        return v.substring(v.indexOf(" ") + 1);
6953    }
6954
6955    function getLongTimeZone(date) {
6956        var v = longTimeZoneFormat.format(date);
6957        return v.substring(v.indexOf(" ") + 1);
6958    }
6959
6960    // See https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/it/ca-gregorian.json
6961    moment.updateLocale("it", {
6962        presets: {
6963            date: {
6964                short: "DD/MM/YY",
6965                medium: "DD MMM Y",
6966                long: "D MMMM Y",
6967                full: "dddd D MMMM Y"
6968            },
6969            time: {
6970                short: "HH:mm",
6971                medium: "HH:mm:ss",
6972                long: function(moment) {
6973                    return "HH:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
6974                },
6975                full: function(moment) {
6976                    return "HH:mm:ss [" + getLongTimeZone(moment.toDate()) + "]";
6977                }
6978            },
6979            datetime: {
6980                short: "DD/MM/YY, HH:mm",
6981                medium: "DD MMM Y, HH:mm:ss",
6982                long: function(moment) {
6983                    return "D MMMM Y HH:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
6984                },
6985                full: function(moment) {
6986                    return "dddd D MMMM Y HH:mm:ss [" + getLongTimeZone(moment.toDate()) + "]";
6987                }
6988            }
6989        }
6990    });
6991}));
6992
6993/*
6994 * ADOBE CONFIDENTIAL
6995 *
6996 * Copyright 2017 Adobe Systems Incorporated
6997 * All Rights Reserved.
6998 *
6999 * NOTICE:  All information contained herein is, and remains
7000 * the property of Adobe Systems Incorporated and its suppliers,
7001 * if any.  The intellectual and technical concepts contained
7002 * herein are proprietary to Adobe Systems Incorporated and its
7003 * suppliers and may be covered by U.S. and Foreign Patents,
7004 * patents in process, and are protected by trade secret or copyright law.
7005 * Dissemination of this information or reproduction of this material
7006 * is strictly forbidden unless prior written permission is obtained
7007 * from Adobe Systems Incorporated.
7008 */
7009(function(root, factory) {
7010    "use strict";
7011
7012    if (typeof module === "object" && module.exports) {
7013        module.exports = factory(require("moment"));
7014    } else {
7015        factory(root.moment);
7016    }
7017}(this, function(moment) {
7018    "use strict";
7019
7020    var shortTimeZoneFormat = new Intl.DateTimeFormat("pt-br", { year: "2-digit", timeZoneName: "short" });
7021    var longTimeZoneFormat = new Intl.DateTimeFormat("pt-br", { year: "2-digit", timeZoneName: "long" });
7022
7023    function getShortTimeZone(date) {
7024        var v = shortTimeZoneFormat.format(date);
7025        return v.substring(v.indexOf(" ") + 1);
7026    }
7027
7028    function getLongTimeZone(date) {
7029        var v = longTimeZoneFormat.format(date);
7030        return v.substring(v.indexOf(" ") + 1);
7031    }
7032
7033    // See https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/pt/ca-gregorian.json
7034    moment.updateLocale("pt-br", {
7035        presets: {
7036            date: {
7037                short: "DD/MM/Y",
7038                medium: "D [de] MMM [de] Y",
7039                long: "D [de] MMMM [de] Y",
7040                full: "dddd, D [de] MMMM [de] Y"
7041            },
7042            time: {
7043                short: "HH:mm",
7044                medium: "HH:mm:ss",
7045                long: function(moment) {
7046                    return "HH:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
7047                },
7048                full: function(moment) {
7049                    return "HH:mm:ss [" + getLongTimeZone(moment.toDate()) + "]";
7050                }
7051            },
7052            datetime: {
7053                short: "DD/MM/Y HH:mm",
7054                medium: "D [de] MMM [de] Y HH:mm:ss",
7055                long: function(moment) {
7056                    return "D [de] MMMM [de] Y HH:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
7057                },
7058                full: function(moment) {
7059                    return "dddd, D [de] MMMM [de] Y HH:mm:ss [" + getLongTimeZone(moment.toDate()) + "]";
7060                }
7061            }
7062        }
7063    });
7064}));
7065
7066/*
7067 * ADOBE CONFIDENTIAL
7068 *
7069 * Copyright 2017 Adobe Systems Incorporated
7070 * All Rights Reserved.
7071 *
7072 * NOTICE:  All information contained herein is, and remains
7073 * the property of Adobe Systems Incorporated and its suppliers,
7074 * if any.  The intellectual and technical concepts contained
7075 * herein are proprietary to Adobe Systems Incorporated and its
7076 * suppliers and may be covered by U.S. and Foreign Patents,
7077 * patents in process, and are protected by trade secret or copyright law.
7078 * Dissemination of this information or reproduction of this material
7079 * is strictly forbidden unless prior written permission is obtained
7080 * from Adobe Systems Incorporated.
7081 */
7082(function(root, factory) {
7083    "use strict";
7084
7085    if (typeof module === "object" && module.exports) {
7086        module.exports = factory(require("moment"));
7087    } else {
7088        factory(root.moment);
7089    }
7090}(this, function(moment) {
7091    "use strict";
7092
7093    var shortTimeZoneFormat = new Intl.DateTimeFormat("zh-cn", { year: "2-digit", timeZoneName: "short" });
7094    var longTimeZoneFormat = new Intl.DateTimeFormat("zh-cn", { year: "2-digit", timeZoneName: "long" });
7095
7096    function getShortTimeZone(date) {
7097        var v = shortTimeZoneFormat.format(date);
7098        return v.substring(v.indexOf(" ") + 1);
7099    }
7100
7101    function getLongTimeZone(date) {
7102        var v = longTimeZoneFormat.format(date);
7103        return v.substring(v.indexOf(" ") + 1);
7104    }
7105
7106    // See https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/zh/ca-gregorian.json
7107    moment.updateLocale("zh-cn", {
7108        presets: {
7109            date: {
7110                short: "Y/M/D",
7111                medium: "Y年M月D日",
7112                long: "Y年M月D日",
7113                full: "Y年M月D日dddd"
7114            },
7115            time: {
7116                short: "ah:mm",
7117                medium: "ah:mm:ss",
7118                long: function(moment) {
7119                    return "[" + getShortTimeZone(moment.toDate()) + "] ah:mm:ss";
7120                },
7121                full: function(moment) {
7122                    return "[" + getLongTimeZone(moment.toDate()) + "] ah:mm:ss";
7123                }
7124            },
7125            datetime: {
7126                short: "Y/M/D ah:mm",
7127                medium: "Y年M月D日 ah:mm:ss",
7128                long: function(moment) {
7129                    return "Y年M月D日 [" + getShortTimeZone(moment.toDate()) + "] ah:mm:ss";
7130                },
7131                full: function(moment) {
7132                    return "Y年M月D日dddd [" + getLongTimeZone(moment.toDate()) + "] ah:mm:ss";
7133                }
7134            }
7135        }
7136    });
7137}));
7138
7139/*
7140 * ADOBE CONFIDENTIAL
7141 *
7142 * Copyright 2017 Adobe Systems Incorporated
7143 * All Rights Reserved.
7144 *
7145 * NOTICE:  All information contained herein is, and remains
7146 * the property of Adobe Systems Incorporated and its suppliers,
7147 * if any.  The intellectual and technical concepts contained
7148 * herein are proprietary to Adobe Systems Incorporated and its
7149 * suppliers and may be covered by U.S. and Foreign Patents,
7150 * patents in process, and are protected by trade secret or copyright law.
7151 * Dissemination of this information or reproduction of this material
7152 * is strictly forbidden unless prior written permission is obtained
7153 * from Adobe Systems Incorporated.
7154 */
7155(function(root, factory) {
7156    "use strict";
7157
7158    if (typeof module === "object" && module.exports) {
7159        module.exports = factory(require("moment"));
7160    } else {
7161        factory(root.moment);
7162    }
7163}(this, function(moment) {
7164    "use strict";
7165
7166    var shortTimeZoneFormat = new Intl.DateTimeFormat("zh-tw", { year: "2-digit", timeZoneName: "short" });
7167    var longTimeZoneFormat = new Intl.DateTimeFormat("zh-tw", { year: "2-digit", timeZoneName: "long" });
7168
7169    function getShortTimeZone(date) {
7170        var v = shortTimeZoneFormat.format(date);
7171        return v.substring(v.indexOf(" ") + 1);
7172    }
7173
7174    function getLongTimeZone(date) {
7175        var v = longTimeZoneFormat.format(date);
7176        return v.substring(v.indexOf(" ") + 1);
7177    }
7178
7179    // See https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/zh-Hant/ca-gregorian.json
7180    moment.updateLocale("zh-tw", {
7181        presets: {
7182            date: {
7183                short: "Y/M/D",
7184                medium: "Y年M月D日",
7185                long: "Y年M月D日",
7186                full: "Y年M月D日 dddd"
7187            },
7188            time: {
7189                short: "ah:mm",
7190                medium: "ah:mm:ss",
7191                long: function(moment) {
7192                    return "ah:mm:ss [[" + getShortTimeZone(moment.toDate()) + "]]";
7193                },
7194                full: function(moment) {
7195                    return "ah:mm:ss [[" + getLongTimeZone(moment.toDate()) + "]]";
7196                }
7197            },
7198            datetime: {
7199                short: "Y/M/D ah:mm",
7200                medium: "Y年M月D日 ah:mm:ss",
7201                long: function(moment) {
7202                    return "Y年M月D日 ah:mm:ss [[" + getShortTimeZone(moment.toDate()) + "]]";
7203                },
7204                full: function(moment) {
7205                    return "Y年M月D日 dddd ah:mm:ss [[" + getLongTimeZone(moment.toDate()) + "]]";
7206                }
7207            }
7208        }
7209    });
7210}));
7211
7212/*
7213 * ADOBE CONFIDENTIAL
7214 *
7215 * Copyright 2017 Adobe Systems Incorporated
7216 * All Rights Reserved.
7217 *
7218 * NOTICE:  All information contained herein is, and remains
7219 * the property of Adobe Systems Incorporated and its suppliers,
7220 * if any.  The intellectual and technical concepts contained
7221 * herein are proprietary to Adobe Systems Incorporated and its
7222 * suppliers and may be covered by U.S. and Foreign Patents,
7223 * patents in process, and are protected by trade secret or copyright law.
7224 * Dissemination of this information or reproduction of this material
7225 * is strictly forbidden unless prior written permission is obtained
7226 * from Adobe Systems Incorporated.
7227 */
7228(function(root, factory) {
7229    "use strict";
7230
7231    if (typeof module === "object" && module.exports) {
7232        module.exports = factory(require("moment"));
7233    } else {
7234        factory(root.moment);
7235    }
7236}(this, function(moment) {
7237    "use strict";
7238
7239    var shortTimeZoneFormat = new Intl.DateTimeFormat("ja", { year: "2-digit", timeZoneName: "short" });
7240    var longTimeZoneFormat = new Intl.DateTimeFormat("ja", { year: "2-digit", timeZoneName: "long" });
7241
7242    function getShortTimeZone(date) {
7243        var v = shortTimeZoneFormat.format(date);
7244        return v.substring(v.indexOf(" ") + 1);
7245    }
7246
7247    function getLongTimeZone(date) {
7248        var v = longTimeZoneFormat.format(date);
7249        return v.substring(v.indexOf(" ") + 1);
7250    }
7251
7252    // See https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/ja/ca-gregorian.json
7253    moment.updateLocale("ja", {
7254        presets: {
7255            date: {
7256                short: "Y/MM/DD",
7257                medium: "Y/MM/DD",
7258                long: "Y年M月D日",
7259                full: "Y年M月D日dddd"
7260            },
7261            time: {
7262                short: "H:mm",
7263                medium: "H:mm:ss",
7264                long: function(moment) {
7265                    return "H:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
7266                },
7267                full: function(moment) {
7268                    return "H時mm分ss秒 [" + getLongTimeZone(moment.toDate()) + "]";
7269                }
7270            },
7271            datetime: {
7272                short: " Y/MM/DD H:mm",
7273                medium: "Y/MM/DD H:mm:ss",
7274                long: function(moment) {
7275                    return "Y年M月D日 H:mm:ss [" + getShortTimeZone(moment.toDate()) + "]";
7276                },
7277                full: function(moment) {
7278                    return "Y年M月D日dddd H時mm分ss秒 [" + getLongTimeZone(moment.toDate()) + "]";
7279                }
7280            }
7281        }
7282    });
7283}));
7284
7285/*
7286 * ADOBE CONFIDENTIAL
7287 *
7288 * Copyright 2017 Adobe Systems Incorporated
7289 * All Rights Reserved.
7290 *
7291 * NOTICE:  All information contained herein is, and remains
7292 * the property of Adobe Systems Incorporated and its suppliers,
7293 * if any.  The intellectual and technical concepts contained
7294 * herein are proprietary to Adobe Systems Incorporated and its
7295 * suppliers and may be covered by U.S. and Foreign Patents,
7296 * patents in process, and are protected by trade secret or copyright law.
7297 * Dissemination of this information or reproduction of this material
7298 * is strictly forbidden unless prior written permission is obtained
7299 * from Adobe Systems Incorporated.
7300 */
7301(function(root, factory) {
7302    "use strict";
7303
7304    if (typeof module === "object" && module.exports) {
7305        module.exports = factory(require("moment"));
7306    } else {
7307        factory(root.moment);
7308    }
7309}(this, function(moment) {
7310    "use strict";
7311
7312    var shortTimeZoneFormat = new Intl.DateTimeFormat("ko", { year: "2-digit", timeZoneName: "short" });
7313    var longTimeZoneFormat = new Intl.DateTimeFormat("ko", { year: "2-digit", timeZoneName: "long" });
7314
7315    function getShortTimeZone(date) {
7316        var v = shortTimeZoneFormat.format(date);
7317        return v.substring(v.indexOf(" ") + 1);
7318    }
7319
7320    function getLongTimeZone(date) {
7321        var v = longTimeZoneFormat.format(date);
7322        return v.substring(v.indexOf(" ") + 1);
7323    }
7324
7325    // See https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/ko/ca-gregorian.json
7326    moment.updateLocale("ko", {
7327        presets: {
7328            date: {
7329                short: "YY. M. D.",
7330                medium: "Y. M. D.",
7331                long: "Y년 M월 D일",
7332                full: "Y년 M월 D일 dddd"
7333            },
7334            time: {
7335                short: "a h:mm",
7336                medium: "a h:mm:ss",
7337                long: function(moment) {
7338                    return "a h시 m분 s초 [" + getShortTimeZone(moment.toDate()) + "]";
7339                },
7340                full: function(moment) {
7341                    return "a h시 m분 s초 [" + getLongTimeZone(moment.toDate()) + "]";
7342                }
7343            },
7344            datetime: {
7345                short: "YY. M. D. a h:mm",
7346                medium: "Y. M. D. a h:mm:ss",
7347                long: function(moment) {
7348                    return "Y년 M월 D일 a h시 m분 s초 [" + getShortTimeZone(moment.toDate()) + "]";
7349                },
7350                full: function(moment) {
7351                    return "Y년 M월 D일 dddd a h시 m분 s초 [" + getLongTimeZone(moment.toDate()) + "]";
7352                }
7353            }
7354        }
7355    });
7356}));
7357
7358/*
7359 * ADOBE CONFIDENTIAL
7360 *
7361 * Copyright 2017 Adobe Systems Incorporated
7362 * All Rights Reserved.
7363 *
7364 * NOTICE:  All information contained herein is, and remains
7365 * the property of Adobe Systems Incorporated and its suppliers,
7366 * if any.  The intellectual and technical concepts contained
7367 * herein are proprietary to Adobe Systems Incorporated and its
7368 * suppliers and may be covered by U.S. and Foreign Patents,
7369 * patents in process, and are protected by trade secret or copyright law.
7370 * Dissemination of this information or reproduction of this material
7371 * is strictly forbidden unless prior written permission is obtained
7372 * from Adobe Systems Incorporated.
7373 */
7374(function(root, factory) {
7375    "use strict";
7376
7377    if (typeof module === "object" && module.exports) {
7378        module.exports = factory(require("moment"));
7379    } else {
7380        factory(root.moment);
7381    }
7382}(this, function(moment) {
7383    "use strict";
7384
7385    var shortTimeZoneFormat = new Intl.DateTimeFormat("en", { year: "2-digit", timeZoneName: "short" });
7386    var longTimeZoneFormat = new Intl.DateTimeFormat("en", { year: "2-digit", timeZoneName: "long" });
7387
7388    function getShortTimeZone(date) {
7389        var v = shortTimeZoneFormat.format(date);
7390        return v.substring(v.indexOf(" ") + 1);
7391    }
7392
7393    function getLongTimeZone(date) {
7394        var v = longTimeZoneFormat.format(date);
7395        return v.substring(v.indexOf(" ") + 1);
7396    }
7397
7398    // See https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/en/ca-gregorian.json
7399    moment.updateLocale("en", {
7400        presets: {
7401            date: {
7402                short: "M/D/YY",
7403                medium: "MMM D, Y",
7404                long: "MMMM D, Y",
7405                full: "dddd, MMMM D, Y"
7406            },
7407            time: {
7408                short: "h:mm A",
7409                medium: "h:mm:ss A",
7410                long: function(moment) {
7411                    return "h:mm:ss A [" + getShortTimeZone(moment.toDate()) + "]";
7412                },
7413                full: function(moment) {
7414                    return "h:mm:ss A [" + getLongTimeZone(moment.toDate()) + "]";
7415                }
7416            },
7417            datetime: {
7418                short: "M/D/YY, h:mm A",
7419                medium: "MMM D, Y, h:mm:ss A",
7420                long: function(moment) {
7421                    return "MMMM D, Y [at] h:mm:ss A [" + getShortTimeZone(moment.toDate()) + "]";
7422                },
7423                full: function(moment) {
7424                    return "dddd, MMMM D, Y [at] h:mm:ss A [" + getLongTimeZone(moment.toDate()) + "]";
7425                }
7426            }
7427        }
7428    });
7429}));
7430

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.